mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	 894e64e3d3
			
		
	
	894e64e3d3
	
	
	
		
			
			Tested this against a newly created .csv, seems to work. Signed-off-by: Ben Greear <greearb@candelatech.com>
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.9 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)
 | |
| 
 | |
| if 'py-json' not in sys.path:
 | |
|     sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
 | |
| 
 | |
| class CSVParcer():
 | |
|     def __init__(self,csv_infile=None,csv_outfile=None):
 | |
| 
 | |
|         idx = 0
 | |
|         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(",")
 | |
|                 #print(x)
 | |
|                 #print([test_run, x[i_rotation], x[i_atten], x[i_beacon_rssi], x[i_data_rssi]])
 | |
|                 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():
 | |
| 
 | |
|     #debug_on = False
 | |
|     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,
 | |
|         ''')
 | |
| 
 | |
|     # for testing parser.add_argument('-i','--infile', help="input file of csv data", default='text-csv-0-candela.csv')
 | |
|     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
 | |
| 
 | |
|     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()
 |