a396c1d6eeb298a1a17b4b20ebc0cafe07dab49a
max
  Mon Aug 9 03:57:39 2021 -0700
small addition to browserrace tool, no redmine

diff --git src/utils/browserRace src/utils/browserRace
index 85dad70..f0602c2 100755
--- src/utils/browserRace
+++ src/utils/browserRace
@@ -1,88 +1,89 @@
 #!/usr/bin/env python3
 
 import logging, sys, optparse, time, os, random
 #from collections import defaultdict
 from os.path import join, basename, dirname, isfile
 import requests
 
 # ==== functions =====
     
 def parseArgs():
     " setup logging, parse command line arguments and options. -h shows auto-generated help page "
     parser = optparse.OptionParser("""usage: %prog [options] hgcentralname server1 server2 outFname - measure timing of a browser
 
     Gets all public sessions, loads all of them on two servers, shows total time spent for each server.
 
     Example:
        browserRace hgcentraltest hgwdev hgwdev-demo7 laps.tsv
             """)
 
     parser.add_option("-d", "--debug", dest="debug", action="store_true", help="show debug messages")
     #parser.add_option("-f", "--file", dest="file", action="store", help="run on file") 
     #parser.add_option("", "--test", dest="test", action="store_true", help="do something") 
     (options, args) = parser.parse_args()
 
     if args==[]:
         parser.print_help()
         exit(1)
 
     if options.debug:
         logging.basicConfig(level=logging.DEBUG)
         logging.getLogger().setLevel(logging.DEBUG)
     else:
         logging.basicConfig(level=logging.INFO)
         logging.getLogger().setLevel(logging.INFO)
 
     return args, options
 
 def readSessions(centralName):
     " return list of username, sessionname "
     logging.info("Getting hubUrls from db %s" % centralName)
     cmd = 'hgsql %s -se "select userName,sessionName from namedSessionDb where shared=1"' % centralName
     lines = os.popen(cmd).read().splitlines() # please do not suggest using subprocess in code review. Thx.
     rows = [l.split("\t") for l in lines]
     logging.info("Got %d public sessions" % len(rows))
     return rows
 
 def timeWeb(url):
     t = time.process_time()
     requests.get(url)
     elapsed_time = time.process_time() - t
     return elapsed_time
         
 def timeSessions(sessions, server1, server2, outFname):
     sum1 = 0
     sum2 = 0
     ofh = open(outFname, "w")
+    ofh.write("#user\tsession\ttime1\ttime2\n")
     for user, session in sessions:
         logging.info("Session: %s %s" % (user, session))
         path = "cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s"% (user, session)
         url1 = "http://%s.gi.ucsc.edu/%s" % (server1, path)
         url2 = "http://%s.gi.ucsc.edu/%s" % (server2, path)
         # the second call always has an advantage due to warm caches so flip the order
         if random.random() < 0.5:
             time1 = timeWeb(url1)
             time2 = timeWeb(url2)
         else:
             time2 = timeWeb(url2)
             time1 = timeWeb(url1)
 
         sum1 += time1
         sum2 += time2
         diff = 100*((sum2/sum1)-1.0)
         logging.info("%f versus %f. Sum: %f versus %f, difference: %.1f%%" % (time1, time2, sum1, sum2, diff))
         row = [user, session, str(time1), str(time2)]
         ofh.write("%s\n" % ("\t".join(row)))
     logging.info("Total time %s: %f" % (server1, sum1))
     logging.info("Total time %s: %f" % (server2, sum2))
     ofh.close()
 
 # ----------- main --------------
 def main():
     args, options = parseArgs()
 
     centralName, server1, server2, outFname = args
     sessions = readSessions(centralName)
     timeSessions(sessions, server1, server2, outFname)
 
 main()