Annotation of embedaddon/iperf/contrib/iperf3_to_gnuplot.py, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/env python
                      2: 
                      3: """
                      4: Extract iperf data from json blob and format for gnuplot.
                      5: """
                      6: 
                      7: import json
                      8: import os
                      9: import sys
                     10: 
                     11: import os.path
                     12: from optparse import OptionParser
                     13: 
                     14: import pprint
                     15: # for debugging, so output to stderr to keep verbose
                     16: # output out of any redirected stdout.
                     17: pp = pprint.PrettyPrinter(indent=4, stream=sys.stderr)
                     18: 
                     19: def generate_output(iperf, options):
                     20:     for i in iperf.get('intervals'):
                     21:         for ii in i.get('streams'):
                     22:             if options.verbose: pp.pprint(ii)
                     23:             row = '{0} {1} {2} {3} {4}\n'.format(
                     24:                         round(float(ii.get('start')), 4),
                     25:                         ii.get('bytes'),
                     26:                         # to Gbits/sec
                     27:                         round(float(ii.get('bits_per_second')) / (1000*1000*1000), 3),
                     28:                         ii.get('retransmits'),
                     29:                         round(float(ii.get('snd_cwnd')) / (1000*1000), 2)
                     30:                     )
                     31:             yield row
                     32: 
                     33: def main():
                     34:     usage = '%prog [ -f FILE | -o OUT | -v ]'
                     35:     parser = OptionParser(usage=usage)
                     36:     parser.add_option('-f', '--file', metavar='FILE',
                     37:         type='string', dest='filename', 
                     38:         help='Input filename.')
                     39:     parser.add_option('-o', '--output', metavar='OUT',
                     40:             type='string', dest='output', 
                     41:             help='Optional file to append output to.')
                     42:     parser.add_option('-v', '--verbose',
                     43:         dest='verbose', action='store_true', default=False,
                     44:         help='Verbose debug output to stderr.')
                     45:     options, args = parser.parse_args()
                     46:     
                     47:     if not options.filename:
                     48:         parser.error('Filename is required.')
                     49:     
                     50:     file_path = os.path.normpath(options.filename)
                     51:     
                     52:     if not os.path.exists(file_path):
                     53:         parser.error('{f} does not exist'.format(f=file_path))
                     54: 
                     55:     with open(file_path,'r') as fh:
                     56:         data = fh.read()
                     57:     
                     58:     try:
                     59:         iperf = json.loads(data)
                     60:     except Exception as e:
                     61:         parser.error('Could not parse JSON from file (ex): {0}'.format(str(e)))
                     62: 
                     63:     if options.output:
                     64:         absp = os.path.abspath(options.output)
                     65:         d,f = os.path.split(absp)
                     66:         if not os.path.exists(d):
                     67:             parser.error('Output file directory path {0} does not exist'.format(d))
                     68:         fh = open(absp, 'a')
                     69:     else:
                     70:         fh = sys.stdout
                     71: 
                     72:     for i in generate_output(iperf, options):
                     73:         fh.write(i)
                     74: 
                     75: 
                     76: if __name__ == '__main__':
                     77:     main()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>