123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package hooks
-
- import (
- "fmt"
-
- "github.com/sirupsen/logrus"
- )
-
- var linkClient *Client
-
- type NotificationHook struct {
- Project *Project
- Maintainers []*Maintainer
- NS *NotificationService
- }
-
- type Project struct {
- Name string
- Domain string
- }
-
- type Maintainer struct {
- Name string
- Email string
- }
-
- type NotificationService struct {
- Addr string
- Port int
- }
-
- func DefaultMaintainers() []*Maintainer {
- return []*Maintainer{
- {
- Name: "Paul",
- Email: "paul@links123.com",
- },
- {
- Name: "Adam",
- Email: "adam@links123.com",
- },
- {
- Name: "Whao",
- Email: "whao@links123.com",
- },
- {
- Name: "Slate",
- Email: "slate@links123.com",
- },
- }
- }
-
- func DefaultNotificationService() *NotificationService {
- return &NotificationService{
- Addr: "127.0.0.1",
- Port: 8085,
- }
- }
-
- func (nh *NotificationHook) Fire(entry *logrus.Entry) error {
- return notify(nh, entry)
- }
-
- func (nh *NotificationHook) Levels() []logrus.Level {
- return []logrus.Level{
- logrus.ErrorLevel,
- logrus.FatalLevel,
- logrus.PanicLevel,
- }
- }
-
- func NewNotificationHook(project *Project, maintainers []*Maintainer, ns *NotificationService) (*NotificationHook, error) {
- if project == nil {
- return nil, fmt.Errorf("project is required")
- }
- if maintainers == nil {
- return nil, fmt.Errorf("maintainers muest not be blank")
- }
- if ns == nil {
- return nil, fmt.Errorf("notification service is required")
- }
-
- if linkClient == nil {
- linkClient = NewClient(ns.Addr, ns.Port)
- }
-
- return &NotificationHook{Project: project, Maintainers: maintainers, NS: ns}, nil
- }
-
- func notify(nh *NotificationHook, entry *logrus.Entry) error {
- var emails []string
- for _, m := range nh.Maintainers {
- emails = append(emails, m.Email)
- }
- _, err := defaultClient.Notify(&NotifyRequest{
- Project: nh.Project.Name,
- Maintainers: emails,
- Message: entry.Message,
- Time: entry.Time.Format("2006-02-01 15:04:05"),
- })
- return err
- }
|