func (s *Server) appendSlackService(c slack.Config) { if c.Enabled { l := s.LogService.NewLogger("[slack] ", log.LstdFlags) srv := slack.NewService(c, l) s.TaskMaster.SlackService = srv s.Services = append(s.Services, srv) } }
func (s *Server) appendSlackService() { c := s.config.Slack l := s.LogService.NewLogger("[slack] ", log.LstdFlags) srv := slack.NewService(c, l) s.TaskMaster.SlackService = srv s.SetDynamicService("slack", srv) s.AppendService("slack", srv) }
func TestStream_AlertSlack(t *testing.T) { requestCount := 0 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { requestCount++ type postData struct { Channel string `json:"channel"` Username string `json:"username"` Text string `json:"text"` Attachments []struct { Fallback string `json:"fallback"` Color string `json:"color"` Text string `json:"text"` } `json:"attachments"` } pd := postData{} dec := json.NewDecoder(r.Body) dec.Decode(&pd) if exp := "/test/slack/url"; r.URL.String() != exp { t.Errorf("unexpected url got %s exp %s", r.URL.String(), exp) } if requestCount == 1 { if exp := "#alerts"; pd.Channel != exp { t.Errorf("unexpected channel got %s exp %s", pd.Channel, exp) } } else if requestCount == 2 { if exp := "@jim"; pd.Channel != exp { t.Errorf("unexpected channel got %s exp %s", pd.Channel, exp) } } if exp := "kapacitor"; pd.Username != exp { t.Errorf("unexpected username got %s exp %s", pd.Username, exp) } if exp := ""; pd.Text != exp { t.Errorf("unexpected text got %s exp %s", pd.Text, exp) } if len(pd.Attachments) != 1 { t.Errorf("unexpected attachments got %v", pd.Attachments) } else { exp := "kapacitor/cpu/serverA is CRITICAL" if pd.Attachments[0].Fallback != exp { t.Errorf("unexpected fallback got %s exp %s", pd.Attachments[0].Fallback, exp) } if pd.Attachments[0].Text != exp { t.Errorf("unexpected text got %s exp %s", pd.Attachments[0].Text, exp) } if exp := "danger"; pd.Attachments[0].Color != exp { t.Errorf("unexpected color got %s exp %s", pd.Attachments[0].Color, exp) } } })) defer ts.Close() var script = ` stream .from().measurement('cpu') .where(lambda: "host" == 'serverA') .groupBy('host') .window() .period(10s) .every(10s) .mapReduce(influxql.count('idle')) .alert() .id('kapacitor/{{ .Name }}/{{ index .Tags "host" }}') .info(lambda: "count" > 6.0) .warn(lambda: "count" > 7.0) .crit(lambda: "count" > 8.0) .slack() .channel('#alerts') .slack() .channel('@jim') ` clock, et, replayErr, tm := testStreamer(t, "TestStream_Alert", script) defer tm.Close() c := slack.NewConfig() c.URL = ts.URL + "/test/slack/url" c.Channel = "#channel" sl := slack.NewService(c, logService.NewLogger("[test_slack] ", log.LstdFlags)) tm.SlackService = sl err := fastForwardTask(clock, et, replayErr, tm, 13*time.Second) if err != nil { t.Error(err) } if requestCount != 2 { t.Errorf("unexpected requestCount got %d exp 2", requestCount) } }