monitor.rc - monitor - monitor script
HTML git clone git://git.suckless.org/monitor
DIR Log
DIR Files
DIR Refs
DIR LICENSE
---
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