efc8d392dc65e9e347e5c7464d66a884022b075d
lrnassar
  Thu Jun 8 17:12:18 2023 -0700
Updated the script to support checking multiple sessions at once, and added a few more display types to test, refs #31237

diff --git src/utils/qa/imageComp.py src/utils/qa/imageComp.py
index 8297ba6..f28963d 100755
--- src/utils/qa/imageComp.py
+++ src/utils/qa/imageComp.py
@@ -57,97 +57,100 @@
         if not os.listdir(serverDir1):
             print("No server one images found, populating directory")
             createImageFromSession(userName,sessionName,serverDir1,serverUrl1)
         else:
             print("Archive images found")
     else:
         sys.exit("Sever one directory given does not exist")
 
 def populateServerDir1(userName,sessionName,serverDir1,serverUrl1):
     '''Creates all the image files for server 1 regardless of existence or not'''
     if os.path.exists(serverDir1) and os.path.isdir(serverDir1):
         createImageFromSession(userName,sessionName,serverDir1,serverUrl1)
     else:
         sys.exit("Sever one directory given does not exist")
 
-def imageCompare(imageFiles,serverDir2,serverDir1,diffImagesDir):
+def imageCompare(imageFiles,serverDir2,serverDir1,diffImagesDir,user1,sessName1):
     '''Compare server1 and server2 generated images'''
+    firstImageName = serverDir1+"/"+user1+"."+sessName1+"-"+str(date.today())+".png"
     emptyFiles = 0
     imagesCompared = 0
     differentImages = 0
     diffImages = []
     noDiffImages = []
     for image in imageFiles:
         if os.path.getsize(serverDir2+"/"+image) == 0:
             emptyFiles+=1
-        elif os.path.getsize(serverDir1+"/"+image) == 0:
+        elif os.path.getsize(firstImageName) == 0:
             emptyFiles+=1
         else:
             imagesCompared+=1
-            previousImage = Image.open(serverDir1+"/"+image).convert('RGB')
+            previousImage = Image.open(firstImageName).convert('RGB')
             newImage = Image.open(serverDir2+"/"+image).convert('RGB')
             diff = ImageChops.difference(previousImage, newImage)
             if diff.getbbox():
                 differentImages+=1
                 diff.save(diffImagesDir+image)
                 diffImages.append(image)
             else:
                 noDiffImages.append(image)
     return(emptyFiles,imagesCompared,differentImages,diffImages,noDiffImages)
 
 def reportOutput(emptyFiles,imagesCompared,differentImages,diffImages,noDiffImages,\
                  diffImagesDir,publicHtmlDirToSave,publicHtmlDirToView,serverUrl1,\
                  sessionUser1,sessionName1,serverUrl2,sessionUser2,sessionName2):
     '''Report findings, if differences found create symlinks to public html'''
     if noDiffImages != []:
         print("No differences seen in the following session(s):")
         for image in noDiffImages:
             print(image)
     if diffImages != []:
         print("\nDifferences were observed in the following session(s):")
         for image in diffImages:
             print(image)
             run(["ln", "-sf", diffImagesDir+image, publicHtmlDirToSave+image])
             print("Link: "+publicHtmlDirToView+image)
             print("session 1: %s/cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s"
                    %(serverUrl1,sessionUser1,sessionName1))
-            print("session 1: %s/cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s" 
+            print("session 2: %s/cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s"
                    %(serverUrl2,sessionUser2,sessionName2))
     print("\nNumber of empty session files created: %s" % emptyFiles)
     print("Total number of images compared: %s" % imagesCompared)
     print("Different images found: %s" % differentImages)
 
 ###########
 #To be used when extracting all session data
 #sessionData = run(["hgsql", "-e", "select userName,sessionName from namedSessionDb", "hgcentraltest"], stdout=subprocess.PIPE)
 ##########
 
 def main():
     user = getpass.getuser()
     #Define cars
     serverUrl1 = "https://hgwdev.gi.ucsc.edu/"
     serverUrl2 = "https://hgwbeta.soe.ucsc.edu/"
-    sessionUser1 = "lou"
-    sessionUser2 = "lou"
-    sessionName1 = "imageCompCron1.2"
-    sessionName2 = "imageCompCron1.2"
+    # If you want to add more sessions, do so in the next 4 lines. Add the user and session name to the list
+    sessionUser1 = ["lou","lou","lou","lou"]
+    sessionUser2 = ["lou","lou","lou","lou"]
+    sessionName1 = ["imageCompCron1.2","bigLollyAndTrioDisplayExample","logoDisplayWithWeirdConfigurations","snakesDisplayExample"]
+    sessionName2 = ["imageCompCron1.2","bigLollyAndTrioDisplayExample","logoDisplayWithWeirdConfigurations","snakesDisplayExample"]
     serverDir1 = "/hive/users/"+user+"/imageTest/cronImages/server1Images"
     serverDir2 = "/hive/users/"+user+"/imageTest/cronImages/server2Images"
     diffImagesDir = "/hive/users/"+user+"/imageTest/cronImages/diffImages/"
     publicHtmlDirToSave = "/cluster/home/"+user+"/public_html/images/"
     publicHtmlDirToView = "https://hgwdev.gi.ucsc.edu/~"+user+"/images/"
+    for (user1, sessName1, user2, sessName2) in zip(sessionUser1, sessionName1, sessionUser2, sessionName2):
         #Create first set of image file(s)
-    populateServerDir1(sessionUser1,sessionName1,serverDir1,serverUrl1)
+        populateServerDir1(user1,sessName1,serverDir1,serverUrl1)
         #Create second set of image file(s)
         imageFiles = []
-    imageFiles.append(createImageFromSession(sessionUser2,sessionName2,serverDir2,serverUrl2))
+        imageFiles.append(createImageFromSession(user2,sessName2,serverDir2,serverUrl2))
         #Compare images
-    emptyFiles,imagesCompared,differentImages,diffImages,noDiffImages = imageCompare(imageFiles,serverDir2,serverDir1,diffImagesDir)
+        emptyFiles,imagesCompared,differentImages,diffImages,noDiffImages = imageCompare(imageFiles,serverDir2,serverDir1,diffImagesDir,user1,sessName1)
         #Report findings
         if diffImages == []: #Check if there is anything to report - that way cron does not output
             pass
         else:
             reportOutput(emptyFiles,imagesCompared,differentImages,diffImages,noDiffImages,\
                      diffImagesDir,publicHtmlDirToSave,publicHtmlDirToView,serverUrl1,\
-                     sessionUser1,sessionName1,serverUrl2,sessionUser2,sessionName2)
+                     user1,sessName1,serverUrl2,user2,sessName2)
 
 main()