diff --git a/cstatsd/stats-machine b/cstatsd/stats-machine index c01a557..4e17718 100755 --- a/cstatsd/stats-machine +++ b/cstatsd/stats-machine @@ -1,6 +1,7 @@ #!/usr/bin/env python2 -import zmq, msgpack, time, psutil, yaml, os +import zmq, msgpack, time, psutil, yaml, os, subprocess +from collections import namedtuple ctx = zmq.Context() @@ -18,6 +19,13 @@ last_io_data = {} for disk in psutil.disk_partitions(): disk_map[disk.device] = disk + +if len(disk_map) == 0: + # We're probably on OpenVZ, so /proc/partitions doesn't exist. Fall back to 'df'. + FakeDisk = namedtuple("FakeDisk", ["device", "mountpoint"]) + for line in subprocess.check_output(["df"]).splitlines()[1:]: + device, _, _, _, _, mountpoint = line.split() + disk_map[device] = FakeDisk(device, mountpoint) while True: load_avgs = os.getloadavg() @@ -46,7 +54,10 @@ while True: } })) - io_counters = psutil.disk_io_counters(perdisk=True) + try: + io_counters = psutil.disk_io_counters(perdisk=True) + except IOError, e: + io_counters = {} # OpenVZ... for drive in config["drives"]: drive_data = psutil.disk_usage(disk_map[drive].mountpoint)