"Fossies" - the Fresh Open Source Software Archive 
Member "dstat-0.7.4/plugins/dstat_disk_tps.py" (17 Jan 2019, 2713 Bytes) of package /linux/privat/dstat-0.7.4.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style:
standard) with prefixed line numbers.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "dstat_disk_tps.py" see the
Fossies "Dox" file reference documentation and the latest
Fossies "Diffs" side-by-side code changes report:
0.7.3_vs_0.7.4.
1 ### Author: Dag Wieers <dag$wieers,com>
2
3 class dstat_plugin(dstat):
4 """
5 Number of read and write transactions per device.
6
7 Displays the number of read and write I/O transactions per device.
8 """
9
10 def __init__(self):
11 self.nick = ('#read', '#writ' )
12 self.type = 'd'
13 self.width = 5
14 self.scale = 1000
15 self.diskfilter = re.compile('^([hsv]d[a-z]+\d+|cciss/c\d+d\d+p\d+|dm-\d+|md\d+|mmcblk\d+p\d0|VxVM\d+)$')
16 self.open('/proc/diskstats')
17 self.cols = 2
18
19 def discover(self, *objlist):
20 ret = []
21 for l in self.splitlines():
22 if len(l) < 13: continue
23 if l[3:] == ['0',] * 11: continue
24 name = l[2]
25 ret.append(name)
26 for item in objlist: ret.append(item)
27 if not ret:
28 raise Exception('No suitable block devices found to monitor')
29 return ret
30
31 def vars(self):
32 ret = []
33 if op.disklist:
34 varlist = op.disklist
35 elif not op.full:
36 varlist = ('total',)
37 else:
38 varlist = []
39 for name in self.discover:
40 if self.diskfilter.match(name): continue
41 if name not in blockdevices(): continue
42 varlist.append(name)
43 # if len(varlist) > 2: varlist = varlist[0:2]
44 varlist.sort()
45 for name in varlist:
46 if name in self.discover + ['total'] or name in op.diskset:
47 ret.append(name)
48 return ret
49
50 def name(self):
51 return ['dsk/'+sysfs_dev(name) for name in self.vars]
52
53 def extract(self):
54 for name in self.vars: self.set2[name] = (0, 0)
55 for l in self.splitlines():
56 if len(l) < 13: continue
57 if l[3] == '0' and l[7] == '0': continue
58 if l[3:] == ['0',] * 11: continue
59 name = l[2]
60 if not self.diskfilter.match(name):
61 self.set2['total'] = ( self.set2['total'][0] + int(l[3]), self.set2['total'][1] + int(l[7]) )
62 if name in self.vars and name != 'total':
63 self.set2[name] = ( self.set2[name][0] + int(l[3]), self.set2[name][1] + int(l[7]))
64 for diskset in self.vars:
65 if diskset in op.diskset:
66 for disk in op.diskset[diskset]:
67 if re.match('^'+disk+'$', name):
68 self.set2[diskset] = ( self.set2[diskset][0] + int(l[3]), self.set2[diskset][1] + int(l[7]) )
69
70 for name in self.set2:
71 self.val[name] = list(map(lambda x, y: (y - x) / elapsed, self.set1[name], self.set2[name]))
72
73 if step == op.delay:
74 self.set1.update(self.set2)