clearer names for actions, and infer actions better
[monitor.git] / zabbix / ext_boot_state
1 #!/usr/bin/python
2
3 import os
4 import sys
5 import time
6
7 def port_status(str):
8         fields = str.split('/')
9         return fields[1]
10
11 def get_state_from_port(host):
12         #nmap = os.popen("nmap -oG - -P0 -p 22,80,806 %s 2>/dev/null | tr ':' '\n' | grep -E 'tcp|Timeout'" % host, 'r')
13         nmap = os.popen("nmap -oG - -p 22,80,806 %s 2>/dev/null | tr ':' '\n' | grep -E 'tcp|Timeout'" % host, 'r')
14         line = nmap.readline()
15         #####
16         #####   22  80  806
17         #####   0    0    0   - down
18         #####   1    0    0   - dbg
19         #####   0    1    0   - unknown
20         #####   1    1    0   - unknown
21         #####   0    0    1   - firewall
22         #####   1    0    1   - error or firewall
23         #####   0    1    1   - firewall
24         #####   1    1    1   - boot
25         #####
26         #####   boot     - 4
27         #####   debug    - 3
28         #####   firewall - 2
29         #####   unknown - 1
30         #####   down - 0
31         #####
32         mapping = {'down' : 0,
33                            'unknown' : 1,
34                            'firewall' : 2,
35                            'debug' : 3,
36                            'boot' : 4,
37                            }
38         if line.strip() == "" or line.strip() == "Timeout":
39                 return mapping["down"]
40         (p22, p80, p806) = line.split()
41         if port_status(p22) == "open" and \
42            port_status(p80) == "open" and \
43            port_status(p806) == "open":
44                 return mapping["boot"]
45         elif port_status(p22) == "open" and port_status(p806) != "open":
46                 return mapping["debug"]
47         elif port_status(p806) == "open":
48                 return mapping["firewall"]
49         else:
50                 return mapping["unknown"]
51
52 if __name__ == "__main__":
53         print get_state_from_port(sys.argv[1])