monitor.rc (2199B)
1 #!/usr/local/plan9/bin/rc 2 # 3 # requires 4 # - 9base 5 # - ping 6 # - curl 7 # - netcat (nc) 8 # - dig 9 # 10 PATH=/usr/local/plan9/bin:$PATH 11 12 hosts=(\ 13 suckless.org:88.99.169.165:garbeam@gmail.com:1:1:1:1\ 14 sta.li:88.99.169.165:garbeam@gmail.com:1:1:0.0\ 15 garbe.us:94.130.56.76:garbeam@gmail.com:1:1:1:1\ 16 flycyg.com:35.156.38.103:garbeam@gmail.com:0:1:1:1\ 17 ) 18 19 fn ok { 20 line=$line^' 1' 21 html=$html^'<td class="ok">OK</td>' 22 } 23 24 fn fail { 25 line=$line^' 0' 26 if(~ $1 '1') { 27 html=$html^'<td class="fail">FAIL</td>' 28 failtext=$failtext^'['^$2^': FAIL]' 29 } 30 if not 31 html=$html^'<td class="na">NA</td>' 32 } 33 34 fn check_host { 35 ifs=(':') { pair=`{echo -n $1} } 36 host=$pair(1) 37 ip=$pair(2) 38 contact=$pair(3) 39 icmp_required=$pair(4) 40 http_required=$pair(5) 41 dns_required=$pair(6) 42 smtp_required=$pair(7) 43 failtext='' 44 line=`{date -n} 45 now=`{date -u} 46 html='<tr><td>'^$"now^'</td>' 47 # ICMP 48 if(ping -c 1 $host >/dev/null >[2]/dev/null) 49 ok 50 if not { 51 sleep 5 52 if(ping -c 1 $host >/dev/null >[2]/dev/null) 53 ok 54 if not 55 fail $icmp_required 'ICMP' 56 } 57 # HTTP 58 if(curl -I 'http://'^$host --connect-timeout 10 >/dev/null >[2]/dev/null) 59 ok 60 if not { 61 sleep 5 62 if(curl -I 'http://'^$host --connect-timeout 10 >/dev/null >[2]/dev/null) 63 ok 64 if not 65 fail $http_required 'HTTP' 66 } 67 # DNS 68 if(dig $host | grep -v '^;' | grep A | grep $ip >/dev/null >[2]/dev/null) 69 ok 70 if not { 71 sleep 5 72 if(dig $host | grep -v '^;' | grep A | grep $ip >/dev/null >[2]/dev/null) 73 ok 74 if not 75 fail $dns_required 'DNS' 76 } 77 # SMTP 78 if(nc -z -w 5 $host 25 >/dev/null >[2]/dev/null) 79 ok 80 if not { 81 sleep 5 82 if(nc -z -w 5 $host 25 >/dev/null >[2]/dev/null) 83 ok 84 if not 85 fail $smtp_required 'SMTP' 86 } 87 echo $line >> '/data/'^$host^'.dat' 88 gnuplot '/data/'^$host^'.gnu' > '/var/www/static/monitor.garbe.us/'^$host^'.png' 89 html=$html^'<td><img src="'^$host^'.png"/></td></tr>' 90 echo $html >> /var/www/static/monitor.garbe.us/index.html 91 if(~ $failtext '') 92 ; 93 if not 94 echo $failtext | mail -s $host $contact 95 } 96 97 cat /var/www/static/monitor.garbe.us/head.tpl > /var/www/static/monitor.garbe.us/index.html 98 for(i in $hosts) 99 check_host $i 100 cat /var/www/static/monitor.garbe.us/foot.tpl >> /var/www/static/monitor.garbe.us/index.html