1 |
#!/usr/bin/python |
2 |
|
3 |
# |
4 |
# Python module for parsing /proc/diskstats on Linux |
5 |
# |
6 |
# Author: Andrew Pollock <me@andrew.net.au> |
7 |
# Copyright: (c) 2008 Andrew Pollock |
8 |
# |
9 |
|
10 |
class DiskStat: |
11 |
|
12 |
def __init__(self, nrread, nrmergedread, nrsectorsread, msread, nrwrite, nrmergedwrite, nrsectorswrite, mswrite, nrio, msio, weightedmsio): |
13 |
self.nrread = nrread |
14 |
self.nrmergedread = nrmergedread |
15 |
self.nrsectorsread = nrsectorsread |
16 |
self.msread = msread |
17 |
self.nrwrite = nrwrite |
18 |
self.nrmergedwrite = nrmergedwrite |
19 |
self.nrsectorswrite = nrsectorswrite |
20 |
self.mswrite = mswrite |
21 |
self.nrio = nrio |
22 |
self.msio = msio |
23 |
self.weightedmsio = weightedmsio |
24 |
|
25 |
|
26 |
class DiskStats: |
27 |
|
28 |
def __init__(self, disk): |
29 |
self.disk = disk.lstrip("/dev/") |
30 |
|
31 |
def diskstat(self): |
32 |
proc_diskstats = open("/proc/diskstats") |
33 |
stat = None |
34 |
while True: |
35 |
line = proc_diskstats.readline() |
36 |
if line == "": |
37 |
break |
38 |
else: |
39 |
line = line.split() |
40 |
|
41 |
if line[2] == self.disk: |
42 |
stat = line[3:] |
43 |
proc_diskstats.close() |
44 |
if stat: |
45 |
ds = DiskStat(stat[0], stat[1], stat[2], stat[3], stat[4], stat[5], stat[6], stat[7], stat[8], stat[9], stat[10]) |
46 |
return ds |
47 |
else: |
48 |
# Need to raise an exception here |
49 |
pass |
50 |
|
51 |
if __name__ == "__main__": |
52 |
ds = DiskStats("/dev/hda") |
53 |
print ds.diskstat() |