mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	 44857107a0
			
		
	
	44857107a0
	
	
	
		
			
			Original interpretation of their request was incorrect, so this is another attempt. It will take input of the 'brief' csv output for dataplane, already mostly converted to the customer's data format, so less conversion is needed. Un-tested as of now...
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.8 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]")
 | |
| 
 | |
|             # 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\n" % (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()
 |