netuttki 10 months ago
parent
commit
af0e38fbc7
1 changed files with 24 additions and 74 deletions
  1. 24 74
      tools/callvalidator.py

+ 24 - 74
tools/callvalidator.py

@@ -1,6 +1,6 @@
 #!/usr/bin/env python
-# usage: txtmerge.py <input_dir> <output_file_name> 
-# does the exact opposite of txtsplit.py
+# usage:callvalidator.py source=<src_input_dir> [file=<filename> | list=<listfilename>] [folder=<folder>]
+# tries to determine whether calls like gt 'location', 'event' are valid or not.
 
 from os import listdir
 from os.path import isfile, join
@@ -29,6 +29,7 @@ def loadValidationList(validationListFile):
     except:
         pass
     #endtry
+
     try: 
         with io.open(validationListFile, 'r', encoding='utf-8') as ifile:
             lines = ifile.readlines()
@@ -46,8 +47,6 @@ def loadValidationList(validationListFile):
             return result
     except SyntaxError as e:
         raise SystemExit("Invalid list filed: %s" % e.msg)
-#        except Exception as e:
-#            raise SystemExit()
     #endtry
 #enddef
 
@@ -121,7 +120,9 @@ def validateCalls(lines):
         #endif
     #endfor
 #enddef
-
+runtime = [0,1,2,3,4,5,6,7,8,9,10,11,12]
+runtime[0] = time.perf_counter_ns()
+runtime_text = ["Setup","Build callfile","Build call list","Index call list","Validate calls","Validation finished","Build report [invalid calls]","Sort invalid calls","Build report [location list]","Sort location list","Generate report file","Build report file","Report finished, all done"]
 
 assert (len(sys.argv) == 2 or len(sys.argv) == 3 or len(sys.argv) == 4), "usage:\ncallvalidator.py source=<src_input_dir> [file=<filename> | list=<listfilename>] [folder=<folder>]"
 
@@ -133,7 +134,7 @@ else:
     vdir = idir
 
 validationTarget = ''
-
+runtime[1] = time.perf_counter_ns()
 if len(sys.argv) > 2 and "file=" in str(sys.argv[2]):
     validationTarget = sys.argv[2].replace("file=", "")
     callFileList = [join(vdir, sys.argv[2].replace("file=", ""))]
@@ -148,25 +149,19 @@ if validate == 'all':
     validationTarget = idir
     callFileList = [join(idir,f) for f in listdir(idir) if ".qsrc" in f]
 
-print("Start building call list: %s" % time.strftime("%H:%M:%S", time.localtime()))
-
-# grab the location files
-
-
-buildlist_start = time.time()
 # build a list of all the calls happening
+runtime[2] = time.perf_counter_ns()
 for file in callFileList:
     with io.open(file, 'rt', encoding='utf-8') as ifile:
         lines = ifile.readlines()
         processLines(lines, ifile.name)
     #endwith
 #endfor
-
+runtime[3] = time.perf_counter_ns()
 for call in callList:
         call['callId'] = callList.index(call)
 
-print("Finished building call list: %s" % time.strftime("%H:%M:%S", time.localtime()))
-
+runtime[4] = time.perf_counter_ns()
 # validating that all the calls are for valid locations
 for file in calledFileList:
     if file not in ['boyStat.qsrc', 'exp_gain.qsrc']:
@@ -180,8 +175,7 @@ for file in calledFileList:
     #endif
 #endfor
 
-print("Finished validation %s" % time.strftime("%H:%M:%S", time.localtime()))
-
+runtime[5] = time.perf_counter_ns()
 # create the call validity file and a list of files that call invalid locations
 timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 txtname = 'call_validity [%s] - %s.txt' % (validationTarget, time.strftime('%Y%m%d%H%M%S', time.localtime()))
@@ -196,6 +190,7 @@ noInvFun = 0
 noInvCall = 0
 noLocNeverCalled = len(neverCalledLocations)
 
+runtime[6] = time.perf_counter_ns()
 currLoc = ''
 for call in callList:
     if call['valid'] == 0:
@@ -207,9 +202,11 @@ for call in callList:
         invalidCalls.append(call)
     #enfif
 #endfor
+runtime[7] = time.perf_counter_ns()
 invalidCalls = sorted(invalidCalls, key=lambda k: (k['location'].lower(), k['function'].lower()))
 noInvFun = len(invalidCalls)
 
+runtime[8] = time.perf_counter_ns()
 for locationCall in locationCallList:
     calls = locationCall['calls']
     Ids = [call['callId'] for call in calls] 
@@ -218,49 +215,35 @@ for locationCall in locationCallList:
         callheads.append(locationCall)
     #endfor
 #endfor
+
+runtime[9] = time.perf_counter_ns()
 callheads = sorted(callheads, key=lambda k: (k['calllocation'].lower()))
 noInvCall = len(callheads)
 
+runtime[10] = time.perf_counter_ns()
 location = ''
 txtInvalidLines = []
-#htmlInvalidLines = []
 for call in invalidCalls:
     if location != '' and location.lower() != call['location'].lower():
         txtInvalidLines.append('\n')
-#    if location == '' or location.lower() != call['location'].lower():
-#        htmlInvalidLines.append('\t\t\t<tr><td span="3"><h3>%s</td></tr>\n' % call['location'])
 
     txtInvalidLines.append("    '%s', '%s' : %s\n" % (call['location'], call['function'], call['reason']))
-#    htmlInvalidLines.append('\t\t\t<tr><td style="border: 1px solid black; padding: 5px;">\'%s\'</td><td style="border: 1px solid black; padding: 5px;">%s</td></tr>\n' % (call['function'], call['reason']))
     location = call['location']
 #endfor
 
 txtLocationLines = []
-#htmlLocationLines = []
 for head in callheads:            
     txtLocationLines.append("  ---- %s [%s]:\n" % (head["calllocation"], head["fileName"]))
-
-#    htmlLocationLines.append("\t\t<h3>%s</h3>\n" % head["calllocation"])
-#    htmlLocationLines.append('\t<table style="border: 2px solid black;>\n')
-#    htmlLocationLines.append('\t\t<thead>\n')
-##    htmlLocationLines.append('\t\t\t<tr><td style="border: 1px solid black; padding: 5px;">Line</td><td style="border: 1px solid black; padding: 5px;">Call</td><td style="border: 1px solid black; padding: 5px;">Reason</td></tr>')
-#    htmlLocationLines.append('\t\t</thead>\n')
-#    htmlLocationLines.append('\t\t<tbody>\n')
-
     for call in head['calls']:
         if call['callId'] in callIds:
             target = callList[call['callId']]
             txtLocationLines.append("    invalid call on line %04d: %s '%s', '%s'\t: %s\n" % (call['lineNo'], call['calltype'], target['location'], target['function'], target['reason']))
- #           htmlLocationLines.append('\t\t\t<tr><td style="border: 1px solid black; padding: 5px;">%d</td><td style="border: 1px solid black; padding: 5px;">%s \'%s\', \'%s\'</td><td style="border: 1px solid black; padding: 5px;">%s</td></tr>\n' % (call['lineNo'], call['calltype'], target['location'], target['function'], target['reason']) )    
         #endif
     #endfor
     txtLocationLines.append('\n')
-
-#    htmlLocationLines.append('\t\t</tbody>\n')
-#    htmlLocationLines.append('\t</table>\n')
-#    htmlLocationLines.append('<br/>')
 #endfor        
 
+runtime[11] = time.perf_counter_ns()
 try:
     with io.open(txtname, 'w', encoding='utf-8') as ofile: 
         ofile.write("----- Summary -----\n")
@@ -307,44 +290,11 @@ except IOError as e:
     raise SystemExit("ERROR: call validity file was not created! REASON: %s" % e.strerror)
 #endtry_except
 
-print("File saved finish: %s" % time.strftime("%H:%M:%S", time.localtime()))
-
-#### Create HTML
-
-"""     with io.open(htmlname, 'w', encoding='utf-8') as hfile:         
-        hfile.write('<!DOCTYPE html>\n')
-        hfile.write('<html lang="en">\n')
-        hfile.write('\t<head>\n')
-        hfile.write('\t\t<title>Invalid Call Report</title>\n')
-        hfile.write('\t</head>\n')
-        
-        hfile.write('\t<body>\n')
-       
-        hfile.write("\t\t<h2>List of Invalid calls</h2>\n")
-        hfile.write('<br/>\n')
-        
-        hfile.write('\t<table style="border: 2px solid black;>\n')
-        hfile.write('\t\t<thead>\n')
-        hfile.write('\t\t\t<tr><td style="border: 1px solid black; padding: 5px;">Function</td><td style="border: 1px solid black; padding: 5px;">Reason</td></tr>')
-        hfile.write('\t\t</thead>\n')
-        hfile.write('\t\t<tbody>\n')
-
-        for line in htmlInvalidLines: 
-            hfile.write(line)
-        
-        hfile.write('\t\t</tbody>\n')
-        hfile.write('\t\t</table>\n')
-        hfile.write('<br/>\n')
+runtime[12] = time.perf_counter_ns()
 
-        hfile.write("<h2>List of Locations and invalid calls they make</h2>\n")
-        hfile.write('<br/>\n')
-        
-        for line in htmlLocationLines:
-            hfile.write(line)
-
-        hfile.write('\t</body>\n')
-        hfile.write('</html>\n') """
-    
-    #endwith
-    
+max = len(runtime)
+index = 0
+while index < max:
+    print("%s: %s" % (runtime_text[index], runtime[index]))
+    index += 1