Added simplified ConfFile entry using myops_setup_sh
[myops.git] / web / collect / sar2graphite.py
1 #!/usr/bin/python
2
3 import os
4 import time
5 import sys
6
7 if 'LANG' in os.environ:
8     del os.environ['LANG']
9 os.environ['PATH'] = "/sbin:/bin:/usr/sbin:/usr/bin"
10
11 def date2ts(d, fmt="%m/%d/%y %H:%M:%S"):
12     return int(time.mktime(time.strptime(d, fmt)))
13
14 def subfix(h):
15     f = h.split('_')
16     sf = f[::-1]
17     print sf
18     return sf[2] + "."
19
20 def main():
21     from optparse import OptionParser
22     parser = OptionParser()
23
24     parser.set_defaults(prefix="sar.",
25                         sarargs="-q",
26                         seconds=60,
27                         subfix=False,
28                         debug=False,
29                         ghost=None,
30                         filter=None,
31                         )
32
33     parser.add_option("", "--prefix",  dest="prefix", help="")
34     parser.add_option("", "--sarargs",  dest="sarargs", help="")
35     parser.add_option("-s", "--seconds",  dest="seconds", help="")
36     parser.add_option("", "--subfix",  dest="subfix", action="store_true", help="")
37     parser.add_option("", "--debug",  dest="debug", action="store_true", help="")
38     parser.add_option("", "--filter",  dest="filter", help="")
39     parser.add_option("", "--ghost",  dest="ghost", help="")
40
41     (config, args) = parser.parse_args()
42     if len(sys.argv) == 1:
43         parser.print_help()
44         sys.exit(1)
45
46     if config.ghost is None:
47         # send to current host by default.
48         ghost_input = os.popen("/bin/hostname", 'r')
49         config.ghost = ghost_input.read().strip()
50
51     sysstat_check = os.popen("if ! rpm -q sysstat > /dev/null ; then yum install -y sysstat ; fi ", 'r').read()
52     hostname_input = os.popen("/bin/hostname | sed -e 's/\./_/g' ", 'r')
53     sar_input = os.popen("/usr/bin/sar %s %s 1" % (config.sarargs, config.seconds), 'r')
54     nc_output = os.popen("/usr/bin/nc %s 2003" % config.ghost, 'w')
55
56     hostname = hostname_input.read().strip()
57     hostname_input.close()
58
59     first_date = ""
60     headers = []
61
62     if config.subfix:
63         sf = subfix(hostname)
64     else:
65         sf = ""
66     prefix = config.prefix + sf + hostname + "."
67
68     skip_keys = [ 'CPU', 'IFACE' ]
69
70     for line in sar_input:
71         fields = line.split()
72
73         if first_date == "":
74             first_date = fields[3]
75             continue
76
77         if headers == []:
78             headers = fields[1:]
79             continue
80
81         if fields == []:
82             headers = []
83
84         if len(fields) > 0 and fields[0] != "Average:":
85             ts = date2ts("%s %s" % (first_date, fields[0]) )
86             key_fix = ""
87             for k,v in zip(headers, fields[1:]):
88                 if config.filter and k in config.filter:
89                     if v not in config.filter: break
90                     else: key_fix = v + "."
91                 if k in skip_keys: continue
92
93                 k = k.replace("/","_")
94                 if not config.debug:
95                     print >>nc_output, prefix + key_fix + k, v, ts
96                 print prefix + key_fix + k, v, ts
97                 nc_output.flush()
98                 
99     nc_output.close()
100
101 if __name__ == "__main__":
102     main()