Add scripts to create myops-getqueryview:
[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     hostname_input = os.popen("/bin/hostname | sed -e 's/\./_/g' ", 'r')
52     sar_input = os.popen("/usr/bin/sar %s %s 1" % (config.sarargs, config.seconds), 'r')
53     nc_output = os.popen("/usr/bin/nc %s 2003" % config.ghost, 'w')
54
55     hostname = hostname_input.read().strip()
56     hostname_input.close()
57
58     first_date = ""
59     headers = []
60
61     if config.subfix:
62         sf = subfix(hostname)
63     else:
64         sf = ""
65     prefix = config.prefix + sf + hostname + "."
66
67     skip_keys = [ 'CPU', 'IFACE' ]
68
69     for line in sar_input:
70         fields = line.split()
71
72         if first_date == "":
73             first_date = fields[3]
74             continue
75
76         if headers == []:
77             headers = fields[1:]
78             continue
79
80         if fields == []:
81             headers = []
82
83         if len(fields) > 0 and fields[0] != "Average:":
84             ts = date2ts("%s %s" % (first_date, fields[0]) )
85             key_fix = ""
86             for k,v in zip(headers, fields[1:]):
87                 if config.filter and k in config.filter:
88                     if v not in config.filter: break
89                     else: key_fix = v + "."
90                 if k in skip_keys: continue
91
92                 k = k.replace("/","_")
93                 if not config.debug:
94                     print >>nc_output, prefix + key_fix + k, v, ts
95                 print prefix + key_fix + k, v, ts
96                 nc_output.flush()
97                 
98     nc_output.close()
99
100 if __name__ == "__main__":
101     main()