commit 0361552b86ea235070c064e34e29c3fe79738769
Author: Anselm R Garbe <garbeam@gmail.com>
Date: Tue, 4 Jul 2017 17:23:07 +0200
created public repo due to interested people
Diffstat:
A | LICENSE | | | 21 | +++++++++++++++++++++ |
A | foot.tpl | | | 3 | +++ |
A | head.tpl | | | 16 | ++++++++++++++++ |
A | monitor.rc | | | 99 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
4 files changed, 139 insertions(+), 0 deletions(-)
diff --git a/LICENSE b/LICENSE
@@ -0,0 +1,21 @@
+MIT/X Consortium License
+
+© 2009-2017 Anselm R Garbe <anselm@garbe.us>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/foot.tpl b/foot.tpl
@@ -0,0 +1,3 @@
+ </table>
+</body>
+</html>
diff --git a/head.tpl b/head.tpl
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>monitor</title>
+ <style>
+ .ok { background-color: #008800; color: #ffffff; }
+ .fail { background-color: #880000; color: #ffffff; }
+ .na { background-color: #000088; color: #ffffff; }
+ td { border: 1px solid #000088; }
+ body { font-family: Helvetica, Verdana, Arial, 'Liberation Sans', FreeSans, sans-serif; font-size: 10pt; }
+ </style>
+ <meta charset="utf-8">
+</head>
+<body>
+ <table>
+ <tr><th>Last check</th><th>ICMP</th><th>HTTP</th><th>DNS</th><th>SMTP</th><th>Graph</th></tr>
diff --git a/monitor.rc b/monitor.rc
@@ -0,0 +1,99 @@
+#!/usr/local/plan9/bin/rc
+#
+# requires
+# - 9base
+# - ping
+# - curl
+# - netcat (nc)
+# - dig
+#
+PATH=/usr/local/plan9/bin:$PATH
+
+hosts=(\
+ suckless.org:88.99.169.165:garbeam@gmail.com:0:1:1:0\
+ sta.li:88.99.169.165:garbeam@gmail.com:0:1:0.0\
+ garbe.us:94.130.56.76:garbeam@gmail.com:0:1:1:0\
+)
+
+fn ok {
+ line=$line^' 1'
+ html=$html^'<td class="ok">OK</td>'
+}
+
+fn fail {
+ line=$line^' 0'
+ if(~ $1 '1') {
+ html=$html^'<td class="fail">FAIL</td>'
+ failtext=$failtext^'['^$2^': FAIL]'
+ }
+ if not
+ html=$html^'<td class="na">NA</td>'
+}
+
+fn check_host {
+ ifs=(':') { pair=`{echo -n $1} }
+ host=$pair(1)
+ ip=$pair(2)
+ contact=$pair(3)
+ icmp_required=$pair(4)
+ http_required=$pair(5)
+ dns_required=$pair(6)
+ smtp_required=$pair(7)
+ failtext=''
+ line=`{date -n}
+ now=`{date -u}
+ html='<tr><td>'^$"now^'</td>'
+# ICMP
+ if(ping -c 1 $host >/dev/null >[2]/dev/null)
+ ok
+ if not {
+ sleep 5
+ if(ping -c 1 $host >/dev/null >[2]/dev/null)
+ ok
+ if not
+ fail $icmp_required 'ICMP'
+ }
+# HTTP
+ if(curl -I 'http://'^$host --connect-timeout 10 >/dev/null >[2]/dev/null)
+ ok
+ if not {
+ sleep 5
+ if(curl -I 'http://'^$host --connect-timeout 10 >/dev/null >[2]/dev/null)
+ ok
+ if not
+ fail $http_required 'HTTP'
+ }
+# DNS
+ if(dig $host | grep -v '^;' | grep A | grep $ip >/dev/null >[2]/dev/null)
+ ok
+ if not {
+ sleep 5
+ if(dig $host | grep -v '^;' | grep A | grep $ip >/dev/null >[2]/dev/null)
+ ok
+ if not
+ fail $dns_required 'DNS'
+ }
+# SMTP
+ if(nc -z -w 5 $host 25 >/dev/null >[2]/dev/null)
+ ok
+ if not {
+ sleep 5
+ if(nc -z -w 5 $host 25 >/dev/null >[2]/dev/null)
+ ok
+ if not
+ fail $smtp_required 'SMTP'
+ }
+ echo $line >> '/data/'^$host^'.dat'
+ gnuplot '/data/'^$host^'.gnu' > '/var/www/static/monitor.garbe.us/'^$host^'.png'
+ html=$html^'<td><img src="'^$host^'.png"/></td></tr>'
+ echo $html >> /var/www/static/monitor.garbe.us/index.html
+ if(~ $failtext '')
+ ;
+ if not
+ echo $failtext | mail -s $host $contact
+}
+
+cat /var/www/static/monitor.garbe.us/head.tpl > /var/www/static/monitor.garbe.us/index.html
+for(i in $hosts)
+ check_host $i
+cat /var/www/static/monitor.garbe.us/foot.tpl >> /var/www/static/monitor.garbe.us/index.html