xmpp-webhook

webhook to xmpp gateway (clone of https://github.com/opthomas-prime/xmpp-webhook/ with my own mods)
git clone https://git.e1e0.net/xmpp-webhook.git
Log | Files | Refs | README | LICENSE

commit bc0efdb859f1ed1fd8e00152be52b6b2ac5e7d20
parent 617a7a76a455785d0432f16868aa5161d251972b
Author: Thomas Maier <contact@thomas-maier.net>
Date:   Tue, 11 Dec 2018 17:30:13 +0100

some work on Prometheus alerts (WiP)

Diffstat:
Adev/alertmanager-docker.yml | 11+++++++++++
Adev/alertmanager.yml | 14++++++++++++++
Adev/prometheus-testalert.sh | 3+++
Mhandler.go | 34++++++++++++++++++++++++++++++++++
Mmain.go | 3+++
5 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/dev/alertmanager-docker.yml b/dev/alertmanager-docker.yml @@ -0,0 +1,11 @@ +version: "3.7" +services: + alertmanager: + image: prom/alertmanager:v0.15.3 + volumes: + - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml + ports: + - target: 9093 + published: 9093 + protocol: tcp + mode: host diff --git a/dev/alertmanager.yml b/dev/alertmanager.yml @@ -0,0 +1,14 @@ +global: + resolve_timeout: 30s + +route: + group_by: ['alertname'] + group_wait: 1s + group_interval: 1s + repeat_interval: 10s + receiver: 'xmpp-webhook' + +receivers: + - name: 'xmpp-webhook' + webhook_configs: + - url: 'http://172.17.0.1:4321/prometheus' diff --git a/dev/prometheus-testalert.sh b/dev/prometheus-testalert.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +curl -H "Content-Type: application/json" -d '[{"labels":{"alertname":"XMPPTest"}}]' localhost:9093/api/v1/alerts diff --git a/handler.go b/handler.go @@ -69,3 +69,37 @@ func grafanaParserFunc(r *http.Request) (string, error) { return message, nil } + +/**************** +PROMETHEUS PARSER +****************/ +func prometheusParserFunc(r *http.Request) (string, error) { + // get alert data from request + body, err := ioutil.ReadAll(r.Body) + if err != nil { + return "", err + } + + // prometheus alert struct + alert := &struct { + Status string `json:"status"` + ExternalURL string `json:"externalURL"` + }{} + + // parse body into the alert struct + err = json.Unmarshal(body, &alert) + if err != nil { + return "", err + } + + // contruct alert message + var message string + switch alert.Status { + case "resolved": + message = ":) " + alert.ExternalURL + default: + message = ":( " + alert.ExternalURL + } + + return message, nil +} diff --git a/main.go b/main.go @@ -97,6 +97,9 @@ func main() { // initialize handler for grafana alerts http.Handle("/grafana", newMessageHandler(messages, grafanaParserFunc)) + // initialize handler for grafana alerts + http.Handle("/prometheus", newMessageHandler(messages, prometheusParserFunc)) + // listen for requests http.ListenAndServe(":4321", nil) }