mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-02 11:07:57 +00:00
writing json results from path_requests_run.py into csv
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
This commit is contained in:
93
examples/write_path_jsontocsv.py
Normal file
93
examples/write_path_jsontocsv.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# TelecomInfraProject/gnpy/examples
|
||||||
|
# Module name : write_path_jsontoxls.py
|
||||||
|
# Version :
|
||||||
|
# License : BSD 3-Clause Licence
|
||||||
|
# Copyright (c) 2018, Telecom Infra Project
|
||||||
|
|
||||||
|
"""
|
||||||
|
@author: esther.lerouzic
|
||||||
|
read json path result file in accordance with:
|
||||||
|
Yang model for requesting Path Computation
|
||||||
|
draft-ietf-teas-yang-path-computation-01.txt.
|
||||||
|
and write results in an CSV file
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from sys import exit
|
||||||
|
from csv import writer
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
from pathlib import Path
|
||||||
|
from json import dumps, loads
|
||||||
|
from gnpy.core.equipment import load_equipment
|
||||||
|
from gnpy.core.utils import lin2db
|
||||||
|
|
||||||
|
START_LINE = 5
|
||||||
|
|
||||||
|
|
||||||
|
parser = ArgumentParser(description = 'A function that writes json path results in an excel sheet.')
|
||||||
|
parser.add_argument('filename', nargs='?', type = Path)
|
||||||
|
parser.add_argument('eqpt_filename', nargs='?', type = Path)
|
||||||
|
|
||||||
|
parser.add_argument('output_filename', nargs='?', type = Path)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
args = parser.parse_args()
|
||||||
|
print(f'coucou {args.output_filename}')
|
||||||
|
with open(args.output_filename,"w") as file :
|
||||||
|
mywriter = writer(file)
|
||||||
|
mywriter.writerow(('path-id','source','destination','transponder-type',\
|
||||||
|
'transponder-mode','baud rate (Gbaud)', 'input power (dBm)','path','OSNR@bandwidth','OSNR@0.1nm','SNR@bandwidth','SNR@0.1nm','Pass?'))
|
||||||
|
|
||||||
|
with open(args.filename) as f:
|
||||||
|
json_data = loads(f.read())
|
||||||
|
equipment = load_equipment(args.eqpt_filename)
|
||||||
|
tspjsondata = equipment['Transceiver']
|
||||||
|
#print(tspjsondata)
|
||||||
|
for p in json_data['path']:
|
||||||
|
path_id = int(p['path-id'])
|
||||||
|
source = p['path-properties']['path-route-objects'][0]\
|
||||||
|
['path-route-object']['unnumbered-hop']['node-id']
|
||||||
|
destination = p['path-properties']['path-route-objects'][-1]\
|
||||||
|
['path-route-object']['unnumbered-hop']['node-id']
|
||||||
|
pth = ' | '.join([ e['path-route-object']['unnumbered-hop']['node-id']
|
||||||
|
for e in p['path-properties']['path-route-objects']])
|
||||||
|
|
||||||
|
[tsp,mode] = p['path-properties']['path-route-objects'][0]\
|
||||||
|
['path-route-object']['unnumbered-hop']['hop-type'].split(' - ')
|
||||||
|
|
||||||
|
# find the min acceptable OSNR, baud rate from the eqpt library based on tsp (tupe) and mode (format)
|
||||||
|
try:
|
||||||
|
[minosnr, baud_rate] = next([m['OSNR'] , m['baud_rate']]
|
||||||
|
for m in equipment['Transceiver'][tsp].mode if m['format']==mode)
|
||||||
|
|
||||||
|
# for debug
|
||||||
|
# print(f'coucou {baud_rate}')
|
||||||
|
except IndexError:
|
||||||
|
msg = f'could not find tsp : {self.tsp} with mode: {self.tsp_mode} in eqpt library'
|
||||||
|
|
||||||
|
raise ValueError(msg)
|
||||||
|
output_snr = next(e['accumulative-value']
|
||||||
|
for e in p['path-properties']['path-metric'] if e['metric-type'] == 'SNR@0.1nm')
|
||||||
|
output_snrbandwidth = next(e['accumulative-value']
|
||||||
|
for e in p['path-properties']['path-metric'] if e['metric-type'] == 'SNR@bandwidth')
|
||||||
|
output_osnr = next(e['accumulative-value']
|
||||||
|
for e in p['path-properties']['path-metric'] if e['metric-type'] == 'OSNR@0.1nm')
|
||||||
|
output_osnrbandwidth = next(e['accumulative-value']
|
||||||
|
for e in p['path-properties']['path-metric'] if e['metric-type'] == 'OSNR@bandwidth')
|
||||||
|
power = next(e['accumulative-value']
|
||||||
|
for e in p['path-properties']['path-metric'] if e['metric-type'] == 'reference_power')
|
||||||
|
mywriter.writerow((path_id,
|
||||||
|
source,
|
||||||
|
destination,
|
||||||
|
tsp,
|
||||||
|
mode,
|
||||||
|
baud_rate*1e-9,
|
||||||
|
round(lin2db(power)+30,2),
|
||||||
|
pth,
|
||||||
|
output_osnrbandwidth,
|
||||||
|
output_osnr,
|
||||||
|
output_snrbandwidth,
|
||||||
|
output_snr,
|
||||||
|
output_snr >= minosnr
|
||||||
|
))
|
||||||
Reference in New Issue
Block a user