From 79676357f382d1e1748f587e90b42341bb839b72 Mon Sep 17 00:00:00 2001 From: Christoph Eck Date: Mon, 27 Jan 2020 18:36:05 +0100 Subject: [PATCH] slack: webhookurl and sendSlack - GetComponentStatus fix - get main url from api definition for slack post - fix run send slack --- config.go | 6 ++++++ incident.go | 19 ++++++++++--------- slack.go | 6 +++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/config.go b/config.go index 7e8e731..8336566 100644 --- a/config.go +++ b/config.go @@ -89,3 +89,9 @@ func getTemplateData(monitor *AbstractMonitor) map[string]interface{} { "now": time.Now().Format(monitor.config.DateFormat), } } + +func MainUrl(cfg *CachetMonitor) string { + var url = cfg.API.URL + var index = strings.Index(url,"/api/") + return url[0:index] +} \ No newline at end of file diff --git a/incident.go b/incident.go index 21e6eeb..bbadae4 100644 --- a/incident.go +++ b/incident.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "strconv" + "time" "github.com/sirupsen/logrus" ) @@ -94,8 +95,8 @@ func (incident *Incident) Send(cfg *CachetMonitor) error { return fmt.Errorf("Could not create/update incident") } // send slack message - if cfg.SlackWebhook !="" { - sendSlack(cfg) + if cfg.SlackWebhook != "" { + incident.sendSlack(cfg) } return nil } @@ -111,7 +112,7 @@ func (incident *Incident) GetComponentStatus(cfg *CachetMonitor) (int, error) { } var data struct { - Status int `json:"status,string"` + Status int `json:"status"` } if err := json.Unmarshal(body.Data, &data); err != nil { return 0, fmt.Errorf("Cannot parse component body: %v. Err = %v", string(body.Data), err) @@ -142,19 +143,19 @@ func (incident *Incident) SetFixed() { // Send slack message func (incident *Incident) sendSlack(cfg *CachetMonitor) { - color:="#bf1932" //red + color := "#bf1932" //red if incident.ComponentStatus == 1 { - - color="#36a64f" //green + color = "#36a64f" //green } + titleLink := MainUrl(cfg) + "/dashboard/incidents/" + strconv.Itoa(incident.ID) slack := Slack{ - WebhookUrl: cfg.SlackWebhook + WebhookURL: cfg.SlackWebhook, Attachments: []Attachments{ Attachments{ Fallback: incident.Name, Color: color, Title: incident.Name, - TitleLink: "https://status.easyship.com", + TitleLink: titleLink, Text: incident.Message, Footer: "Cachet Monitor", FooterIcon: "https://i.imgur.com/spck1w6.png", @@ -163,6 +164,6 @@ func (incident *Incident) sendSlack(cfg *CachetMonitor) { }} err := slack.SendSlackNotification() if err != nil { - fmt.Errorf(err) + fmt.Errorf("Cannot send slack message. Err = %v", err) } } diff --git a/slack.go b/slack.go index 2faef21..99bd589 100644 --- a/slack.go +++ b/slack.go @@ -10,7 +10,7 @@ import ( ) type Slack struct { - WebhookUrl string + WebhookURL string Attachments []Attachments `json:"attachments"` } type Fields struct { @@ -46,7 +46,7 @@ func test() { Ts: time.Now().Unix(), }, }} - slack.WebhookUrl = "https://hooks.slack.com/services/0000000/00000000/xxxxxxxxxxxxxxxxxxx" + slack.WebhookURL = "https://hooks.slack.com/services/0000000/00000000/xxxxxxxxxxxxxxxxxxx" err := slack.SendSlackNotification() if err != nil { log.Fatal(err) @@ -58,7 +58,7 @@ func test() { func (slack *Slack) SendSlackNotification() error { slackBody, _ := json.Marshal(slack) - req, err := http.NewRequest(http.MethodPost, slack.WebhookUrl, bytes.NewBuffer(slackBody)) + req, err := http.NewRequest(http.MethodPost, slack.WebhookURL, bytes.NewBuffer(slackBody)) if err != nil { return err }