mmnode-blocks-info: enable JSON output of averages stats
This commit is contained in:
parent
d4b940720b
commit
b220d88226
1 changed files with 16 additions and 17 deletions
|
|
@ -97,6 +97,7 @@ class BlocksInfo:
|
|||
|
||||
all_stats = ['avg','range','diff']
|
||||
dfl_stats = ['range','diff']
|
||||
noindent_stats = ['avg']
|
||||
|
||||
fmt_funcs = {
|
||||
'df': lambda arg: strftime('%Y-%m-%d %X',gmtime(arg)),
|
||||
|
|
@ -181,7 +182,7 @@ class BlocksInfo:
|
|||
self.block_data = namedtuple('block_data',self.fnames)
|
||||
self.stats = get_stats() if opt.stats else self.dfl_stats
|
||||
|
||||
def gen_fs(self,fnames,fill=[],fill_char='-'):
|
||||
def gen_fs(self,fnames,fill=[],fill_char='-',add_name=False):
|
||||
for i in range(len(fnames)):
|
||||
name = fnames[i]
|
||||
ls = (' ','')[name in self.fs_lsqueeze + self.fs_lsqueeze2]
|
||||
|
|
@ -193,11 +194,8 @@ class BlocksInfo:
|
|||
if name in group and fnames[i-1] in group:
|
||||
ls = ''
|
||||
break
|
||||
yield (
|
||||
ls
|
||||
+ (self.fields[name].fs.replace(':',':'+fill_char) if name in fill else self.fields[name].fs)
|
||||
+ rs
|
||||
)
|
||||
repl = (name if add_name else '') + ':' + (fill_char if name in fill else '')
|
||||
yield (ls + self.fields[name].fs.replace(':',repl) + rs)
|
||||
|
||||
def conv_blkspec(self,arg):
|
||||
if arg == 'cur':
|
||||
|
|
@ -388,19 +386,20 @@ class BlocksInfo:
|
|||
yield self.fs.format(*hdr1)
|
||||
yield self.fs.format(*hdr2)
|
||||
|
||||
def process_stats(self,name):
|
||||
return self.output_stats(getattr(self,f'create_{name}_stats')())
|
||||
def process_stats(self,sname):
|
||||
return self.output_stats(getattr(self,f'create_{sname}_stats')(),sname)
|
||||
|
||||
async def output_stats(self,res):
|
||||
async def output_stats(self,res,sname):
|
||||
def gen(data):
|
||||
for d in data:
|
||||
if len(d) == 2:
|
||||
yield (' '+d[0]).format(**d[1])
|
||||
yield (indent+d[0]).format(**d[1])
|
||||
elif len(d) == 3:
|
||||
yield (' '+d[0]).format(d[2])
|
||||
yield (indent+d[0]).format(d[2])
|
||||
else:
|
||||
yield d
|
||||
name,data = await res
|
||||
foo,data = await res
|
||||
indent = '' if sname in self.noindent_stats else ' '
|
||||
Msg('\n'.join(gen(data)))
|
||||
|
||||
async def create_range_stats(self):
|
||||
|
|
@ -482,13 +481,13 @@ class BlocksInfo:
|
|||
def gen():
|
||||
for field in self.fnames:
|
||||
if field in skip:
|
||||
yield ''
|
||||
yield ( field, '' )
|
||||
else:
|
||||
ret = sum(getattr(block,field) for block in self.res) // len(self.res)
|
||||
vn = self.fields[field].varname
|
||||
yield self.fmt_funcs[vn](ret) if vn in self.fmt_funcs else ret
|
||||
fs = ''.join(self.gen_fs(self.fnames,fill=skip)).strip()
|
||||
return ( 'averages', ( 'Averages:', fs.format(*gen()) ) )
|
||||
yield ( field, (self.fmt_funcs[vn](ret) if vn in self.fmt_funcs else ret) )
|
||||
fs = ''.join(self.gen_fs(self.fnames,fill=skip,add_name=True)).strip()
|
||||
return ('averages', ('Averages:', (fs, dict(gen())) ))
|
||||
|
||||
def process_stats_pre(self,i):
|
||||
if not (self.opt.stats_only and i == 0):
|
||||
|
|
@ -551,7 +550,7 @@ class JSONBlocksInfo(BlocksInfo):
|
|||
|
||||
def print_header(self): pass
|
||||
|
||||
async def output_stats(self,res):
|
||||
async def output_stats(self,res,sname):
|
||||
def gen(data):
|
||||
for d in data:
|
||||
if len(d) == 2:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue