grafana-sms-alert

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 81e68372945b9d0fe629f21136359e46c583c42a
parent a36876194d49cd75a85d9d3353e30dd6dd0ae50c
Author: Daniel Barlow <dan@telent.net>
Date:   Fri, 16 Sep 2022 21:43:24 +0100

read config file to get smsc, phone number & device name

Diffstat:
A.gitignore | 1+
Aconfig.json.example | 5+++++
Dhandler.fnl | 26--------------------------
Mmain.fnl | 28++++++++++++++++++++++++----
Awebhook.fnl | 10++++++++++
5 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1 @@ +config.json diff --git a/config.json.example b/config.json.example @@ -0,0 +1,5 @@ +{ + "smsc": "+447958879879", + "number": "447000123456", + "device": "/dev/serial/by-id/usb-HUAWEI_HUAWEI_HiLink-if00-port0" +} diff --git a/handler.fnl b/handler.fnl @@ -1,26 +0,0 @@ -(local json (require :dkjson)) -(local unistd (require :posix.unistd)) - -(local sms - ((. (require :sms) :new) - { - :smsc "+447958879879" - :device "/dev/serial/by-id/usb-HUAWEI_HUAWEI_HiLink-if00-port0" - :verbose true - })) - -(fn send-sms [body] - (print :send-sms body) - (sms:send "447000123456" body) - "Sent") - -(fn handle [s] - (let [(m pos err) (json.decode s 1 nil)] - (when m - (send-sms - (.. m.title " " (. (. m.alerts 1) :valueString)))) - "ok")) - ; -;;;; {"receiver":"","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"TestAlert","instance":"Grafana"},"annotations":{"summary":"Notification test"},"startsAt":"2022-09-13T21:14:29.77765882+01:00","endsAt":"0001-01-01T00:00:00Z","generatorURL":"","fingerprint":"57c6d9296de2ad39","silenceURL":"http://garf.telent.net:3002/alerting/silence/new?alertmanager=grafana\u0026matcher=alertname%3DTestAlert\u0026matcher=instance%3DGrafana","dashboardURL":"","panelURL":"","valueString":"[ metric='foo' labels={instance=bar} value=10 ]"}],"groupLabels":{},"commonLabels":{"alertname":"TestAlert","instance":"Grafana"},"commonAnnotations":{"summary":"Notification test"},"externalURL":"http://garf.telent.net:3002/","version":"1","groupKey":"{alertname=\"TestAlert\", instance=\"Grafana\"}2022-09-13 21:14:29.77765882 +0100 BST m=+644632.184951212","truncatedAlerts":0,"orgId":1,"title":"[FIRING:1] (TestAlert Grafana)","state":"alerting","message":"**Firing**\n\nValue: [ metric='foo' labels={instance=bar} value=10 ]\nLabels:\n - alertname = TestAlert\n - instance = Grafana\nAnnotations:\n - summary = Notification test\nSilence: http://garf.telent.net:3002/alerting/silence/new?alertmanager=grafana\u0026matcher=alertname%3DTestAlert\u0026matcher=instance%3DGrafana\n"} - -{: handle} diff --git a/main.fnl b/main.fnl @@ -1,8 +1,28 @@ +(set _G.modem-spew io.stderr) + (local server (require :server)) -(local handler (require :handler)) -(local sms (require :sms)) +(local webhook (require :webhook)) +(local json (require :dkjson)) + +(local {: smsc : number : device } + (let [filename (assert (. arg 1) "missing argument") + text (with-open [config (io.open filename :r)] + (config:read "*a"))] + (match (json.decode text) + a a + (nil pos err) (error (.. "reading " filename ": " err))))) + +(local { : view} (require :fennel)) +;(print (view m) (view err)) + + +(local sms ((. (require :sms) :new) { :smsc smsc :device device })) -(print "Ready") -(doto (server.new handler.handle) +(doto (server.new + (fn handle [body] + (let [message (webhook.parse body)] + (sms:send number message) + "Sent"))) (: :listen) + (print "server ready") (: :loop)) diff --git a/webhook.fnl b/webhook.fnl @@ -0,0 +1,10 @@ +(local json (require :dkjson)) + +(fn parse [body] + (let [(m pos err) (json.decode body 1 nil)] + (when m + (.. m.title " " (. (. m.alerts 1) :valueString))))) + ; +;;;; {"receiver":"","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"TestAlert","instance":"Grafana"},"annotations":{"summary":"Notification test"},"startsAt":"2022-09-13T21:14:29.77765882+01:00","endsAt":"0001-01-01T00:00:00Z","generatorURL":"","fingerprint":"57c6d9296de2ad39","silenceURL":"http://garf.telent.net:3002/alerting/silence/new?alertmanager=grafana\u0026matcher=alertname%3DTestAlert\u0026matcher=instance%3DGrafana","dashboardURL":"","panelURL":"","valueString":"[ metric='foo' labels={instance=bar} value=10 ]"}],"groupLabels":{},"commonLabels":{"alertname":"TestAlert","instance":"Grafana"},"commonAnnotations":{"summary":"Notification test"},"externalURL":"http://garf.telent.net:3002/","version":"1","groupKey":"{alertname=\"TestAlert\", instance=\"Grafana\"}2022-09-13 21:14:29.77765882 +0100 BST m=+644632.184951212","truncatedAlerts":0,"orgId":1,"title":"[FIRING:1] (TestAlert Grafana)","state":"alerting","message":"**Firing**\n\nValue: [ metric='foo' labels={instance=bar} value=10 ]\nLabels:\n - alertname = TestAlert\n - instance = Grafana\nAnnotations:\n - summary = Notification test\nSilence: http://garf.telent.net:3002/alerting/silence/new?alertmanager=grafana\u0026matcher=alertname%3DTestAlert\u0026matcher=instance%3DGrafana\n"} + +{: parse}