From fcd8a2024ed9153cea56580cb56bd3a60a779a6b Mon Sep 17 00:00:00 2001 From: Phil Date: Thu, 8 Sep 2016 17:21:11 +0800 Subject: [PATCH] Add jianliao and slack log adapter --- logs/jianliao.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ logs/log.go | 2 ++ logs/slack.go | 66 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 logs/jianliao.go create mode 100644 logs/slack.go diff --git a/logs/jianliao.go b/logs/jianliao.go new file mode 100644 index 00000000..3755118d --- /dev/null +++ b/logs/jianliao.go @@ -0,0 +1,78 @@ +package logs + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + "time" +) + +// JLWriter implements beego LoggerInterface and is used to send jiaoliao webhook +type JLWriter struct { + AuthorName string `json:"authorname"` + Title string `json:"title"` + WebhookURL string `json:"webhookurl"` + RedirectURL string `json:"redirecturl,omitempty"` + ImageURL string `json:"imageurl,omitempty"` + Level int `json:"level"` +} + +// newJLWriter create jiaoliao writer. +func newJLWriter() Logger { + return &JLWriter{Level: LevelTrace} +} + +// Init JLWriter with json config string +func (s *JLWriter) Init(jsonconfig string) error { + err := json.Unmarshal([]byte(jsonconfig), s) + if err != nil { + return err + } + return nil +} + +// WriteMsg write message in smtp writer. +// it will send an email with subject and only this message. +func (s *JLWriter) WriteMsg(when time.Time, msg string, level int) error { + if level > s.Level { + return nil + } + + text := fmt.Sprintf("%s %s", when.Format("2006-01-02 15:04:05"), msg) + + form := url.Values{} + form.Add("authorName", s.AuthorName) + form.Add("title", s.Title) + form.Add("text", text) + if s.RedirectURL != "" { + form.Add("redirectUrl", s.RedirectURL) + } + if s.ImageURL != "" { + form.Add("imageUrl", s.ImageURL) + } + + resp, err := http.PostForm(s.WebhookURL, form) + if err != nil { + return err + } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("Post webhook failed %s %d", resp.Status, resp.StatusCode) + } + resp.Body.Close() + return nil +} + +// Flush implementing method. empty. +func (s *JLWriter) Flush() { + return +} + +// Destroy implementing method. empty. +func (s *JLWriter) Destroy() { + return +} + +func init() { + Register(AdapterJianLiao, newJLWriter) +} diff --git a/logs/log.go b/logs/log.go index 8aa8ff3a..3d512d2e 100644 --- a/logs/log.go +++ b/logs/log.go @@ -69,6 +69,8 @@ const ( AdapterMail = "smtp" AdapterConn = "conn" AdapterEs = "es" + AdapterJianLiao = "jianliao" + AdapterSlack = "slack" ) // Legacy log level constants to ensure backwards compatibility. diff --git a/logs/slack.go b/logs/slack.go new file mode 100644 index 00000000..eddedd5d --- /dev/null +++ b/logs/slack.go @@ -0,0 +1,66 @@ +package logs + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + "time" +) + +// SLACKWriter implements beego LoggerInterface and is used to send jiaoliao webhook +type SLACKWriter struct { + WebhookURL string `json:"webhookurl"` + Level int `json:"level"` +} + +// newSLACKWriter create jiaoliao writer. +func newSLACKWriter() Logger { + return &SLACKWriter{Level: LevelTrace} +} + +// Init SLACKWriter with json config string +func (s *SLACKWriter) Init(jsonconfig string) error { + err := json.Unmarshal([]byte(jsonconfig), s) + if err != nil { + return err + } + return nil +} + +// WriteMsg write message in smtp writer. +// it will send an email with subject and only this message. +func (s *SLACKWriter) WriteMsg(when time.Time, msg string, level int) error { + if level > s.Level { + return nil + } + + text := fmt.Sprintf("{\"text\": \"%s %s\"}", when.Format("2006-01-02 15:04:05"), msg) + + form := url.Values{} + form.Add("payload", text) + + resp, err := http.PostForm(s.WebhookURL, form) + if err != nil { + return err + } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("Post webhook failed %s %d", resp.Status, resp.StatusCode) + } + resp.Body.Close() + return nil +} + +// Flush implementing method. empty. +func (s *SLACKWriter) Flush() { + return +} + +// Destroy implementing method. empty. +func (s *SLACKWriter) Destroy() { + return +} + +func init() { + Register(AdapterSlack, newSLACKWriter) +}