mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 02:38:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| """
 | |
| 
 | |
|  This program is used to read in a LANforge Dataplane CSV file and output
 | |
|  a csv file that works with a customer's RvRvO visualization tool.
 | |
| 
 | |
|  Example use case:
 | |
| 
 | |
|  Read in ~/text-csv-0-candela.csv, output is stored at outfile.csv
 | |
|  ./py-scripts/csv_convert.py -i ~/text-csv-0-candela.csv
 | |
| 
 | |
|  Output is csv file with mixxed columns, top part:
 | |
|  Test Run,Position [Deg],Attenuation 1 [dB], Pal Stats Endpoint 1 Control Rssi [dBm],  Pal Stats Endpoint 1 Data Rssi [dBm]
 | |
| 
 | |
|  Second part:
 | |
|  Step Index,Position [Deg],Attenuation [dB],Traffic Pair 1 Throughput [Mbps]
 | |
| """
 | |
| import sys
 | |
| import os
 | |
| import argparse
 | |
| 
 | |
| if sys.version_info[0] != 3:
 | |
|     print("This script requires Python 3")
 | |
|     exit(1)
 | |
| 
 | |
| sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../")))
 | |
| 
 | |
| 
 | |
| class CSVParcer:
 | |
|     def __init__(self, csv_infile=None, csv_outfile=None):
 | |
| 
 | |
|         i_atten = -1
 | |
|         i_rotation = -1
 | |
|         i_rxbps = -1
 | |
|         i_beacon_rssi = -1
 | |
|         i_data_rssi = -1
 | |
|         fpo = open(csv_outfile, "w")
 | |
|         with open(csv_infile) as fp:
 | |
|             line = fp.readline()
 | |
|             if not line:
 | |
|                 exit(1)
 | |
|             # Read in initial line, this is the CSV headers.  Parse it to find the column indices for
 | |
|             # the columns we care about.
 | |
|             x = line.split(",")
 | |
|             cni = 0
 | |
|             for cn in x:
 | |
|                 if cn == "Attenuation [dB]":
 | |
|                     i_atten = cni
 | |
|                 if cn == "Position [Deg]":
 | |
|                     i_rotation = cni
 | |
|                 if cn == "Throughput [Mbps]":
 | |
|                     i_rxbps = cni
 | |
|                 if cn == "Beacon RSSI [dBm]":
 | |
|                     i_beacon_rssi = cni
 | |
|                 if cn == "Data RSSI [dBm]":
 | |
|                     i_data_rssi = cni
 | |
|                 cni += 1
 | |
| 
 | |
|             # Write out out header for the new file.
 | |
|             fpo.write(
 | |
|                 "Test Run,Position [Deg],Attenuation 1 [dB],Pal Stats Endpoint 1 Control Rssi [dBm],Pal Stats Endpoint 1 Data Rssi [dBm]\n")
 | |
| 
 | |
|             # Read rest of the input lines, processing one at a time.  Covert the columns as
 | |
|             # needed, and write out new data to the output file.
 | |
|             line = fp.readline()
 | |
| 
 | |
|             bottom_half = "Step Index,Position [Deg],Attenuation [dB],Traffic Pair 1 Throughput [Mbps]\n"
 | |
| 
 | |
|             test_run = "1"
 | |
| 
 | |
|             step_i = 0
 | |
|             while line:
 | |
|                 x = line.split(",")
 | |
|                 fpo.write("%s,%s,%s,%s,%s" % (test_run, x[i_rotation], x[i_atten], x[i_beacon_rssi], x[i_data_rssi]))
 | |
|                 bottom_half += ("%s,%s,%s,%s\n" % (step_i, x[i_rotation], x[i_atten], x[i_rxbps]))
 | |
|                 line = fp.readline()
 | |
|                 step_i += 1
 | |
| 
 | |
|             # First half is written out now, and second half is stored...
 | |
|             fpo.write("\n\n# RvRvO Data\n\n")
 | |
|             fpo.write(bottom_half)
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(
 | |
|         prog='csv_convert.py',
 | |
|         formatter_class=argparse.RawTextHelpFormatter,
 | |
|         epilog='''\
 | |
|  Useful Information:
 | |
|             ''',
 | |
| 
 | |
|         description='''
 | |
| csv_convert.py:  
 | |
|     converts the candela brief csv into the data for specific customer,
 | |
|         ''')
 | |
| 
 | |
|     parser.add_argument('-i', '--infile', help="input file of csv data", required=True)
 | |
|     parser.add_argument('-o', '--outfile', help="output file in .csv format", default='outfile.csv')
 | |
| 
 | |
|     args = parser.parse_args()
 | |
|     csv_outfile_name = None
 | |
|     csv_infile_name = None
 | |
| 
 | |
|     if args.infile:
 | |
|         csv_infile_name = args.infile
 | |
|     if args.outfile:
 | |
|         csv_outfile_name = args.outfile
 | |
| 
 | |
|     print("infile: %s  outfile: %s" % (csv_infile_name, csv_outfile_name))
 | |
| 
 | |
|     CSVParcer(csv_infile_name, csv_outfile_name)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | 
