Annotation of embedaddon/iperf/contrib/iperf3_to_gnuplot.py, revision 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>