From fd82b95772083aa94c447ad2399cc58beea33901 Mon Sep 17 00:00:00 2001
From: Siraaj Khandkar <siraaj@khandkar.net>
Date: Fri, 3 Aug 2018 15:46:22 -0400
Subject: [PATCH] Add actuator prototype

---
 bin/khatus_actuator | 73 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100755 bin/khatus_actuator

diff --git a/bin/khatus_actuator b/bin/khatus_actuator
new file mode 100755
index 0000000..2e5d003
--- /dev/null
+++ b/bin/khatus_actuator
@@ -0,0 +1,73 @@
+#! /usr/bin/awk -f
+
+BEGIN {
+    n_ignored = split(opt_ignore_alerts_from, ignored, "[ \t\n]+")
+    for (i = 1; i <= n_ignored; i++) {
+        ignored_alert_sources[ignored[i]] = 1
+    }
+}
+
+/^STATUS_BAR / { shift(); handle_status_bar(); next }
+/^ALERT /      { shift(); handle_alert()     ; next }
+/^ERROR /      { shift(); handle_error()     ; next }
+
+function handle_status_bar() {
+    system("xsetroot -name \" " $0 "\" ")
+}
+
+function handle_alert(    src, priority, subject, sep, body, urgency, dbg) {
+    src = $1
+    priority = $2
+    subject  = $3
+    shift()
+    shift()
+    shift()
+    body = $0
+    sep = body ? "\n" : ""
+    body = body sep "--" src
+
+    urgency = priority
+    sub("hi" , "critical", urgency)
+    sub("med", "normal"  , urgency)
+
+    dbg["priority"]   = priority
+    dbg["urgency"]    = urgency
+    dbg["subject"]    = subject
+    dbg["body"]       = body
+    debug("ALERT properties", dbg)
+
+    if (src in ignored_alert_sources) {
+        debug("ALERT ignoring from " src, ignored_alert_sources)
+    } else {
+        debug("ALERT sending from " src, ignored_alert_sources)
+        notify_send(urgency, subject, body)
+    }
+}
+
+function handle_error() {
+    notify_send("normal", "Khatus_Error", $0)
+}
+
+function notify_send(urgency, subject, body,   cmd) {
+    cmd = \
+        sprintf(\
+            "DISPLAY=%s notify-send -u %s %s \" %s\"",
+            display, urgency, subject, body \
+        )
+    system(cmd)
+}
+
+function shift() {
+    sub("^" $1 " +", "")
+}
+
+function debug(msg, data,    sep, vals, key, payload) {
+    sep = ""
+    vals = ""
+    for (key in data) {
+        vals = sprintf("%s%s%s: \"%s\"", vals, sep, key, data[key])
+        sep = ", "
+    }
+    payload = sprintf("[%s] [%s] [%s]", pid, msg, vals)
+    print payload > "/dev/stderr"
+}
-- 
2.20.1