root / snf-cyclades-gtools / collectd / plugins / ganeti-netstats.py @ 2439c9d6
History | View | Annotate | Download (1.3 kB)
1 | 2439c9d6 | Stratos Psomadakis | #!/usr/bin/env python
|
---|---|---|---|
2 | 2439c9d6 | Stratos Psomadakis | |
3 | 2439c9d6 | Stratos Psomadakis | import os |
4 | 2439c9d6 | Stratos Psomadakis | import collectd |
5 | 2439c9d6 | Stratos Psomadakis | |
6 | 2439c9d6 | Stratos Psomadakis | from glob import glob |
7 | 2439c9d6 | Stratos Psomadakis | |
8 | 2439c9d6 | Stratos Psomadakis | |
9 | 2439c9d6 | Stratos Psomadakis | def read_int(file): |
10 | 2439c9d6 | Stratos Psomadakis | f = open(file, "r") |
11 | 2439c9d6 | Stratos Psomadakis | try:
|
12 | 2439c9d6 | Stratos Psomadakis | val = int(f.read())
|
13 | 2439c9d6 | Stratos Psomadakis | except ValueError: |
14 | 2439c9d6 | Stratos Psomadakis | val = None
|
15 | 2439c9d6 | Stratos Psomadakis | finally:
|
16 | 2439c9d6 | Stratos Psomadakis | f.close() |
17 | 2439c9d6 | Stratos Psomadakis | |
18 | 2439c9d6 | Stratos Psomadakis | return val
|
19 | 2439c9d6 | Stratos Psomadakis | |
20 | 2439c9d6 | Stratos Psomadakis | |
21 | 2439c9d6 | Stratos Psomadakis | def netstats(data=None): |
22 | 2439c9d6 | Stratos Psomadakis | for dir in glob("/var/run/ganeti/kvm-hypervisor/nic/*"): |
23 | 2439c9d6 | Stratos Psomadakis | if not os.path.isdir(dir): |
24 | 2439c9d6 | Stratos Psomadakis | continue
|
25 | 2439c9d6 | Stratos Psomadakis | |
26 | 2439c9d6 | Stratos Psomadakis | hostname = os.path.basename(dir)
|
27 | 2439c9d6 | Stratos Psomadakis | |
28 | 2439c9d6 | Stratos Psomadakis | for nic in glob(os.path.join(dir, "*")): |
29 | 2439c9d6 | Stratos Psomadakis | idx = int(os.path.basename(nic))
|
30 | 2439c9d6 | Stratos Psomadakis | with open(nic) as nicfile: |
31 | 2439c9d6 | Stratos Psomadakis | try:
|
32 | 2439c9d6 | Stratos Psomadakis | iface = nicfile.readline().strip() |
33 | 2439c9d6 | Stratos Psomadakis | except EnvironmentError: |
34 | 2439c9d6 | Stratos Psomadakis | continue
|
35 | 2439c9d6 | Stratos Psomadakis | |
36 | 2439c9d6 | Stratos Psomadakis | if not os.path.isdir("/sys/class/net/%s" % iface): |
37 | 2439c9d6 | Stratos Psomadakis | continue
|
38 | 2439c9d6 | Stratos Psomadakis | |
39 | 2439c9d6 | Stratos Psomadakis | bytes_in = read_int("/sys/class/net/%s/statistics/rx_bytes"
|
40 | 2439c9d6 | Stratos Psomadakis | % iface) |
41 | 2439c9d6 | Stratos Psomadakis | bytes_out = read_int("/sys/class/net/%s/statistics/tx_bytes"
|
42 | 2439c9d6 | Stratos Psomadakis | % iface) |
43 | 2439c9d6 | Stratos Psomadakis | |
44 | 2439c9d6 | Stratos Psomadakis | vl = collectd.Values(type="derive")
|
45 | 2439c9d6 | Stratos Psomadakis | vl.host = hostname |
46 | 2439c9d6 | Stratos Psomadakis | vl.plugin = "interface"
|
47 | 2439c9d6 | Stratos Psomadakis | vl.type = "if_octets"
|
48 | 2439c9d6 | Stratos Psomadakis | vl.type_instance = "eth%d" % idx
|
49 | 2439c9d6 | Stratos Psomadakis | vl.dispatch(values=[bytes_out, bytes_in]) |
50 | 2439c9d6 | Stratos Psomadakis | |
51 | 2439c9d6 | Stratos Psomadakis | collectd.register_read(netstats) |
52 | 2439c9d6 | Stratos Psomadakis | |
53 | 2439c9d6 | Stratos Psomadakis | # vim: set ts=4 sts=4 et sw=4 : |