Statistics
| Branch: | Tag: | Revision:

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 :