Add IOps in the DiskIO plugin (issue #763)

This commit is contained in:
Nicolargo 2015-12-22 15:51:35 +01:00
parent 73bcd657eb
commit 16a62781e4
5 changed files with 59 additions and 23 deletions

View File

@ -206,6 +206,8 @@ Start the client browser (browser mode):\n\
dest='byte', help='display network rate in byte per second')
parser.add_argument('--diskio-show-ramfs', action='store_true', default=False,
dest='diskio_show_ramfs', help='show RAM Fs in the DiskIO plugin')
parser.add_argument('--diskio-iops', action='store_true', default=False,
dest='diskio_iops', help='show IO per second in the DiskIO plugin')
parser.add_argument('--fahrenheit', action='store_true', default=False,
dest='fahrenheit', help='display temperature in Fahrenheit (default is Celsius)')
parser.add_argument('-1', '--percpu', action='store_true', default=False,

View File

@ -314,8 +314,10 @@ class _GlancesCurses(object):
glances_processes.sort_key = 'cpu_percent'
elif self.pressedkey == ord('b'):
# 'b' > Switch between bit/s and Byte/s for network IO
# self.net_byteps_tag = not self.net_byteps_tag
self.args.byte = not self.args.byte
elif self.pressedkey == ord('B'):
# 'B' > Switch between bit/s and IO/s for Disk IO
self.args.diskio_iops = not self.args.diskio_iops
elif self.pressedkey == ord('c'):
# 'c' > Sort processes by CPU usage
glances_processes.auto_sort = False

View File

@ -102,8 +102,12 @@ class Plugin(GlancesPlugin):
if self.is_hide(disk):
continue
# Compute bitrate
# Compute count and bit rate
try:
read_count = (diskio_new[disk].read_count -
self.diskio_old[disk].read_count)
write_count = (diskio_new[disk].write_count -
self.diskio_old[disk].write_count)
read_bytes = (diskio_new[disk].read_bytes -
self.diskio_old[disk].read_bytes)
write_bytes = (diskio_new[disk].write_bytes -
@ -111,6 +115,8 @@ class Plugin(GlancesPlugin):
diskstat = {
'time_since_update': time_since_update,
'disk_name': disk,
'read_count': read_count,
'write_count': write_count,
'read_bytes': read_bytes,
'write_bytes': write_bytes}
except KeyError:
@ -161,10 +167,16 @@ class Plugin(GlancesPlugin):
# Header
msg = '{0:9}'.format('DISK I/O')
ret.append(self.curse_add_line(msg, "TITLE"))
msg = '{0:>7}'.format('R/s')
ret.append(self.curse_add_line(msg))
msg = '{0:>7}'.format('W/s')
ret.append(self.curse_add_line(msg))
if args.diskio_iops:
msg = '{0:>7}'.format('IOR/s')
ret.append(self.curse_add_line(msg))
msg = '{0:>7}'.format('IOW/s')
ret.append(self.curse_add_line(msg))
else:
msg = '{0:>7}'.format('R/s')
ret.append(self.curse_add_line(msg))
msg = '{0:>7}'.format('W/s')
ret.append(self.curse_add_line(msg))
# Disk list (sorted by name)
for i in sorted(self.stats, key=operator.itemgetter(self.get_key())):
# Is there an alias for the disk name ?
@ -179,19 +191,37 @@ class Plugin(GlancesPlugin):
disk_name = '_' + disk_name[-8:]
msg = '{0:9}'.format(disk_name)
ret.append(self.curse_add_line(msg))
txps = self.auto_unit(
int(i['read_bytes'] // i['time_since_update']))
rxps = self.auto_unit(
int(i['write_bytes'] // i['time_since_update']))
msg = '{0:>7}'.format(txps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='read_bytes',
option='decoration')))
msg = '{0:>7}'.format(rxps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='write_bytes',
option='decoration')))
if args.diskio_iops:
# count
txps = self.auto_unit(
int(i['read_count'] // i['time_since_update']))
rxps = self.auto_unit(
int(i['write_count'] // i['time_since_update']))
msg = '{0:>7}'.format(txps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='read_count',
option='decoration')))
msg = '{0:>7}'.format(rxps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='write_count',
option='decoration')))
else:
# Bitrate
txps = self.auto_unit(
int(i['read_bytes'] // i['time_since_update']))
rxps = self.auto_unit(
int(i['write_bytes'] // i['time_since_update']))
msg = '{0:>7}'.format(txps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='read_bytes',
option='decoration')))
msg = '{0:>7}'.format(rxps)
ret.append(self.curse_add_line(msg,
self.get_views(item=i[self.get_key()],
key='write_bytes',
option='decoration')))
return ret

View File

@ -91,6 +91,7 @@ class Plugin(GlancesPlugin):
self.view_data['enable_disable_docker'] = msg_col2.format('D', 'Enable/disable Docker stats')
self.view_data['enable_disable_quick_look'] = msg_col.format('3', 'Enable/disable quick look plugin')
self.view_data['show_hide_ip'] = msg_col2.format('I', 'Show/hide IP module')
self.view_data['diskio_iops'] = msg_col2.format('B', 'Count/rate for Disk I/O')
self.view_data['edit_pattern_filter'] = 'ENTER: Edit the process filter pattern'
def get_view_data(self, args=None):
@ -156,13 +157,14 @@ class Plugin(GlancesPlugin):
ret.append(self.curse_add_line(self.view_data['show_hide_help']))
ret.append(self.curse_new_line())
ret.append(self.curse_add_line(self.view_data['enable_disable_quick_look']))
ret.append(self.curse_add_line(self.view_data['quit']))
ret.append(self.curse_add_line(self.view_data['diskio_iops']))
ret.append(self.curse_new_line())
ret.append(self.curse_add_line(self.view_data['enable_disable_top_extends_stats']))
ret.append(self.curse_new_line())
ret.append(self.curse_add_line(self.view_data['enable_disable_short_processname']))
ret.append(self.curse_new_line())
ret.append(self.curse_add_line(self.view_data['enable_disable_irix']))
ret.append(self.curse_add_line(self.view_data['quit']))
ret.append(self.curse_new_line())
ret.append(self.curse_new_line())

View File

@ -456,9 +456,9 @@ class Plugin(GlancesPlugin):
ret.append(self.curse_add_line(msg))
msg = '{0:>10}'.format('TIME+')
ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True))
msg = '{0:>6}'.format('IOR/s')
msg = '{0:>6}'.format('R/s')
ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True))
msg = '{0:>6}'.format('IOW/s')
msg = '{0:>6}'.format('W/s')
ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True))
msg = ' {0:8}'.format('Command')
ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'name' else 'DEFAULT'))