Now (sortof) generates .html files to display results in a prettiful manner.
+ THIS FILE IS TERRIBLE
author Sam Moore (matches) [SZM]
website http://matches.ucc.asn.au/stratego
print "Preparing .html results files..."
+if os.path.exists(resultsDirectory + "index.html") == True:
+ os.remove(resultsDirectory + "index.html") #Delete the file
+totalFile = open(resultsDirectory + "index.html", "w")
+totalFile.write("<html>\n<head>\n <title> Round in progress... </title>\n</head>\n<body>\n")
+if nRounds > 1:
+ totalFile.write("<h1> Rounds " + str(totalRounds) + " to " + str(totalRounds + nRounds-1) + " in progress...</h1>\n")
+else:
+ totalFile.write("<h1> Round " + str(totalRounds) + " in progress...</h1>\n")
+totalFile.write("<p> Please wait for the rounds to finish. You can view the current progress by watching the <a href = \"../log\"/>Log Files</a> </p>")
+if totalRounds > 1:
+ totalFile.write("<h2> Round Summaries </h2>\n")
+ totalFile.write("<table border=\"0\" cellpadding=\"10\">\n")
+ for i in range(1, totalRounds):
+ totalFile.write("<tr> <td> <a href=round"+str(i)+".html>Round " + str(i) + "</a> </td> </tr>\n")
+ totalFile.write("</table>\n")
+
+totalFile.write("</body>\n<!-- Total Results file autogenerated by \"" + sys.argv[0] + "\" at time " + str(time()) + " -->\n</html>\n\n")
+totalFile.close()
+
+
for agent in agents:
if os.path.exists(resultsDirectory+agent["name"] + ".html") == False:
agentFile = open(resultsDirectory+agent["name"] + ".html", "w")
while line != "":
#if verbose:
# print "Interpreting line \"" + line.strip() + "\""
- if line.strip() == "</body>":
+ if line.strip() == "</body>" or line.strip() == "<!--end-->":
break
- elif line == "<tr> <th> Score </th> <th> Wins </th> <th> Losses </th> <th> Draws </th> <th> Illegal </th> <th> Errors </th></tr>\n":
+ elif line == "<h3> Round Overview </h3>\n":
agentFile.write(line)
line = oldFile.readline()
-
- values = line.split(' ')
- agent["totalScore"] += int(values[2].strip())
- agent["Wins"] += int(values[5].strip())
- agent["Losses"] += int(values[8].strip())
- agent["Draws"] += int(values[11].strip())
- agent["Illegal"] += int(values[14].strip())
- agent["Errors"] += int(values[17].strip())
+ agentFile.write(line)
+ line = oldFile.readline()
+ if line == "<tr> <th> Score </th> <th> Wins </th> <th> Losses </th> <th> Draws </th> <th> Illegal </th> <th> Errors </th></tr>\n":
+ #sys.stdout.write("Adding scores... " + line + "\n")
+ agentFile.write(line)
+ line = oldFile.readline()
+ values = line.split(' ')
+ agent["totalScore"] += int(values[2].strip())
+ agent["Wins"] += int(values[5].strip())
+ agent["Losses"] += int(values[8].strip())
+ agent["Draws"] += int(values[11].strip())
+ agent["Illegal"] += int(values[14].strip())
+ agent["Errors"] += int(values[17].strip())
agentFile.write(line)
line = oldFile.readline()
errorLog = [logDirectory + "error/" + red["name"] + "."+str(gameID), logDirectory + "error/" + blue["name"] + "."+str(gameID)]
#Run the game, outputting to logFile; stderr of (both) AI programs is directed to logFile.stderr
outline = os.popen(managerPath + " -o " + logFile + " -T " + str(timeoutValue) + " \"" + red["path"] + "\" \"" + blue["path"] + "\" 2>> " + logFile+".stderr", "r").read()
+ #os.system("mv tmp.mp4 " + logFile + ".mp4")
#If there were no errors, get rid of the stderr file
if os.stat(logFile+".stderr").st_size <= 0:
otherColour["score"].insert(0, otherColour["score"][0] + scores[results[2]][1])
otherColour[scores[results[2]][2]].append((endColour["name"], gameID, scores[results[2]][1]))
otherColour["ALL"].append((endColour["name"], gameID, scores[results[2]][1], scores[results[2]][2], otherStr))
+ #Write scores to raw text files
+ for agent in [endColour, otherColour]:
+ scoreFile = open(resultsDirectory + agent["name"] + ".scores", "a")
+ scoreFile.write(str(agent["totalScore"] + agent["score"][0]) + "\n")
+ scoreFile.close()
+
+
if verbose:
agentFile.write("</table>\n")
+
+
+
agentFile.close()
#Update round file
for agent in agents:
roundFile.write("<tr> <td> <a href="+agent["name"]+".html>"+agent["name"] + " </a> </td> <td> " + str(agent["score"][0]) + " </td> <td> " + str(agent["totalScore"]) + " </td> </tr>\n")
roundFile.write("</table>\n")
- roundFile.write("<p> <a href=total.html>Current Scoreboard</a></p>\n")
+
+ command = "cp scores.plt " + resultsDirectory + "scores.plt;"
+ os.system(command)
+
+ scorePlot = open(resultsDirectory + "scores.plt", "a")
+ scorePlot.write("plot ")
+ for i in range(0, len(agents)):
+ if i > 0:
+ scorePlot.write(", ")
+ scorePlot.write("\""+agents[i]["name"]+".scores\" using ($0+1):1 with linespoints title \""+agents[i]["name"]+"\"")
+
+ scorePlot.write("\nexit\n")
+ scorePlot.close()
+
+ command = "d=$(pwd); cd " + resultsDirectory + ";"
+ command += "gnuplot scores.plt;"
+ command += "rm -f scores.plt;"
+ command += "mv scores.png round"+str(roundNumber)+".png;"
+ command += "cd $d;"
+ os.system(command)
+
+ roundFile.write("<h2> Accumulated Scores - up to Round " + str(roundNumber)+" </h2>\n")
+ roundFile.write("<img src=\"round"+str(roundNumber)+".png\" alt = \"round"+str(roundNumber)+".png\" title = \"round"+str(roundNumber)+".png\" width = \"640\" height = \"480\"/>\n")
+
+ roundFile.write("<p> <a href=index.html>Current Scoreboard</a></p>\n")
roundFile.write("</body>\n<!-- Results file for Round " + str(roundNumber) + " autogenerated by \"" + sys.argv[0] + "\" at time " + str(time()) + " -->\n</html>\n\n")
roundFile.close()
print "Finalising .html files... "
for agent in agents:
agentFile = open(resultsDirectory + agent["name"]+".html", "a")
-
- #Write the "total" statistics
+ agentFile.write("<!--end-->\n")
+ #Write a graph
+ #Comment out if you don't have gnuplot
+
+ command = "rm -f " + agent["name"] + ".png;"
+ command += "cp template.plt " + resultsDirectory + agent["name"] + ".plt;"
+ command += "d=$(pwd); cd " + resultsDirectory + ";"
+ command += "sed -i \"s:\[NAME\]:"+agent["name"]+":g\" " +resultsDirectory + agent["name"]+".plt;"
+ command += "gnuplot " + resultsDirectory + agent["name"]+".plt;"
+ command += "rm -f " + resultsDirectory + agent["name"] + ".plt;"
+ command += "cd $d;"
+ os.system(command)
+ agentFile.write("<!--end-->\n")
+ agentFile.write("<h3> Score Graph </h3>\n")
+ agentFile.write("<img src=\""+agent["name"]+".png\" alt=\""+agent["name"]+".png\" title=\""+agent["name"]+".png\" width=\"640\" height=\"480\"/>\n")
+
+ #Link to main file
+ agentFile.write("<p> <a href=\"index.html\"/>Total Statistics</a> </p>\n")
agentFile.write("</body>\n<!-- Results file for \"" + agent["name"] + "\" autogenerated by \"" + sys.argv[0] + "\" at time " + str(time()) + " -->\n</html>\n\n")
agentFile.close()
- if os.path.exists(resultsDirectory + "total.html") == True:
- os.remove(resultsDirectory + "total.html") #Delete the file
+if os.path.exists(resultsDirectory + "index.html") == True:
+ os.remove(resultsDirectory + "index.html") #Delete the file
-totalFile = open(resultsDirectory + "total.html", "w")
+totalFile = open(resultsDirectory + "index.html", "w")
totalFile.write("<html>\n<head>\n <title> Total Overview </title>\n</head>\n<body>\n")
totalFile.write("<h1> Total Overview </h1>\n")
totalFile.write("<table border=\"0\" cellpadding=\"10\">\n")
totalFile.write("<tr> <td> <a href="+agent["name"]+".html>"+agent["name"] + " </a> </td> <td> " + str(agent["totalScore"]) + " </td> </tr>\n")
totalFile.write("</table>\n")
+totalFile.write("<h2> Score Graph </h2>\n")
+
+
+command = "d=$(pwd);"
+command += "cd " + resultsDirectory + ";"
+command += "rm -f scores.png;"
+command += "cp round"+str(roundNumber)+".png scores.png;"
+command += "cd $d;"
+os.system(command)
+
+totalFile.write("<img src=\"scores.png\" alt=\"scores.png\" title=\"scores.png\" width=\"640\" height=\"480\"/>\n")
+
+
totalFile.write("<h2> Round Summaries </h2>\n")
totalFile.write("<table border=\"0\" cellpadding=\"10\">\n")
for i in range(1, totalRounds+1):
totalFile.write("</body>\n<!-- Total Results file autogenerated by \"" + sys.argv[0] + "\" at time " + str(time()) + " -->\n</html>\n\n")
totalFile.close()
+#Write results to a raw text file as well
+textResults = open(resultsDirectory + "total.txt", "w")
+for agent in agents:
+ textResults.write(agent["name"] + " " + str(agent["totalScore"]) + "\n")
+textResults.close()
if verbose:
print "Done!"