Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

httplistener.go 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package httplistener
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/juju/loggo"
  7. "github.com/spf13/viper"
  8. "github.com/thoj/go-ircevent"
  9. "net/http"
  10. )
  11. var log = loggo.GetLogger("HTTPListener")
  12. type HTTPListener struct {
  13. http http.Server
  14. irc *irc.Connection
  15. }
  16. func New(irc *irc.Connection) (*HTTPListener, error) {
  17. hl := HTTPListener{}
  18. hl.irc = irc
  19. hl.http = http.Server{Addr: viper.GetString("http.listen")}
  20. mux := http.NewServeMux()
  21. if viper.IsSet("http.listeners.grafana") {
  22. mux.HandleFunc("/grafana", hl.grafanaAlertHandler)
  23. }
  24. hl.http.Handler = mux
  25. log.Infof("Listening for HTTP requests on %s", viper.GetString("http.listen"))
  26. go hl.http.ListenAndServe()
  27. return &hl, nil
  28. }
  29. type grafanaMatch struct {
  30. Metric string
  31. Value float32
  32. }
  33. type grafanaAlert struct {
  34. Title string
  35. RuleName string
  36. RuleUrl string
  37. State string
  38. ImageUrl string
  39. Message string
  40. EvalMatches []grafanaMatch
  41. }
  42. func (hl *HTTPListener) grafanaAlertHandler(w http.ResponseWriter, request *http.Request) {
  43. if request.Method != "POST" {
  44. http.NotFound(w, request)
  45. return
  46. }
  47. var alert grafanaAlert
  48. buf := new(bytes.Buffer)
  49. buf.ReadFrom(request.Body)
  50. json.Unmarshal(buf.Bytes(), &alert)
  51. msg := fmt.Sprintf("[Grafana] [%s] %s: %s.", alert.State, alert.RuleName, alert.Message)
  52. for _, match := range alert.EvalMatches {
  53. msg += fmt.Sprintf(" %s:%f", match.Metric, match.Value)
  54. }
  55. msg += " " + alert.RuleUrl
  56. hl.irc.Privmsgf(viper.GetString("http.listeners.grafana"), msg)
  57. }