1 |
apollock |
29 |
#!/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() |