aboutsummaryrefslogtreecommitdiffstats
path: root/netwatch-notify
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2020-03-04 15:45:37 +0100
committerGravatar Christian Hesse <mail@eworm.de>2020-03-04 15:56:40 +0100
commite588607efdad7246d2d75f91cfb4655262b1542b (patch)
treeacb88f67bff80de14ca8bfe8c86171375b7d466c /netwatch-notify
parent628ae1bd7098a4a898bf3fef0c202ae735014bec (diff)
add script netwatch-notify
Diffstat (limited to 'netwatch-notify')
-rw-r--r--netwatch-notify34
1 files changed, 34 insertions, 0 deletions
diff --git a/netwatch-notify b/netwatch-notify
new file mode 100644
index 0000000..8daf014
--- /dev/null
+++ b/netwatch-notify
@@ -0,0 +1,34 @@
+#!rsc
+# RouterOS script: netwatch-notify
+# Copyright (c) 2020 Christian Hesse <mail@eworm.de>
+#
+# monitor netwatch and send notifications
+
+:global NetwatchNotify;
+
+:global ParseKeyValueStore;
+:global SendNotification;
+
+:if ([ :typeof $NetwatchNotify ] = "nothing") do={
+ :set NetwatchNotify [ :toarray "" ];
+}
+
+:foreach Host in=[ / tool netwatch find where comment~"^notify," ] do={
+ :local HostVal [ / tool netwatch get $Host ];
+ :local HostName ([ $ParseKeyValueStore ($HostVal->"comment") ]->"hostname");
+ :if ($HostVal->"status" = "up") do={
+ :set ($NetwatchNotify->($HostName . "-count")) 0;
+ :if (($NetwatchNotify->($HostName . "-notified")) = true) do={
+ $SendNotification ("Netwatch Notify: " . $HostName . " up") \
+ ("Host " . $HostName . " (" . $HostVal->"host" . ") is up since " . $HostVal->"since" . ".");
+ }
+ :set ($NetwatchNotify->($HostName . "-notified")) false;
+ } else={
+ :set ($NetwatchNotify->($HostName . "-count")) (($NetwatchNotify->($HostName . "-count")) + 1);
+ :if (($NetwatchNotify->($HostName . "-count")) >= 5 && ($NetwatchNotify->($HostName . "-notified")) != true) do={
+ $SendNotification ("Netwatch Notify: " . $HostName . " down") \
+ ("Host " . $HostName . " (" . $HostVal->"host" . ") is down since " . $HostVal->"since" . ".");
+ :set ($NetwatchNotify->($HostName . "-notified")) true;
+ }
+ }
+}