source: 2011/26/write_report.py @ 2424

Revision 2393, 3.2 KB checked in by tekrjant, 8 years ago (diff)

Pong-pelit saa piiloon raportista.

Line 
1"""
2Writes a html report of the build results. build_games.py
3should be run first.
4
5The report is written continuously. Hit Ctrl-c to stop.
6"""
7from __future__ import with_statement
8import sys
9import os
10from xml.dom.minidom import Document
11from os.path import *
12import shutil
13from shutil import *
14from glob import *
15from subprocess import *
16from datetime import *
17import time
18import re
19
20
21hide_pong_games = False
22
23report_location = "\\\\eppu.it.jyu.fi\\kurssit\\npo\\temp"
24report = None
25table = None
26
27
28CSS = """
29tr {
30  color: white;
31}
32
33.success {
34  background-color: green;
35}
36
37.fail {
38  background-color: red;
39}
40"""
41
42
43def check_requirements():
44        if not exists("build"):
45                raise Exception("Directory build not found. Run build_games.py first!")
46
47def addElement(parent, name):
48        node = report.createElement(name)
49        parent.appendChild(node)
50        return node
51
52
53def addTextElement(parent, name, value):
54        node = report.createElement(name)
55        parent.appendChild(node)
56        node.appendChild(report.createTextNode(str(value)))
57        return node
58
59
60def initialize_report():
61        global report
62
63        report = Document()
64        html = addElement(report, "html")
65
66        refresh_tag = addElement(html, "meta")
67        refresh_tag.setAttribute("http-equiv", "refresh")
68        refresh_tag.setAttribute("content", "10")
69
70        head = addElement(html, "head")
71        style = addTextElement(head, "style", CSS)
72        style.setAttribute("type", "text/css")
73        addTextElement(head, "title", "Build")
74
75        body = addElement(html, "body")
76        global table
77        table = addElement(body, "table")
78
79
80def write_results():
81    for d in os.listdir("build"):
82            with open(join("build", d), "r") as f:
83                    lines = f.readlines()
84                    author = lines[0].strip()
85                    name = lines[1].strip()
86                    result = lines[2].strip()
87                    time_of_update = lines[3].strip()
88
89                    if hide_pong_games and re.search("pong", name, flags=re.IGNORECASE):
90                            continue
91
92                    success = (result == "success")
93
94                    style = "success"
95                    if not success:
96                            style = "fail"
97                    tr = addElement(table, "tr")
98                    tr.setAttribute("class", style)
99                    addTextElement(tr, "td", author)
100                    addTextElement(tr, "td", name)
101                    addTextElement(tr, "td", time_of_update)
102
103
104def write_report():
105        with open(join(report_location, "build_report.html"), "w") as f:
106                f.write(report.toprettyxml())
107
108
109def main():
110        if "--hide-pong" in sys.argv:
111                global hide_pong_games
112                hide_pong_games = True
113
114        try:
115                while True:
116                        check_requirements()
117                        initialize_report()
118                        write_results()
119                        write_report()
120                        print "report written"
121                        time.sleep(10)
122        except KeyboardInterrupt:
123                print "cancelled"
124        except Exception, e:
125                print
126                print "NOT SUCCESSFUL:", e
127                return 1
128
129
130if __name__ == '__main__':
131        sys.exit(main())
132
Note: See TracBrowser for help on using the repository browser.