-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
109 lines (98 loc) · 4.66 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import http.server
import socketserver
import os
import mysql.connector as mydb
import configparser
import json
PORT=8080
class MyHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(s):
action = s.path.split("/")
if action[1] == 'favicon.ico':
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
return
dbconfig = configparser.ConfigParser()
dbconfig.read('database.conf')
dtb = mydb.connect(
host=os.environ.get("MYSQL_SERVICE_HOST", dbconfig['mysql']['host']),
user=os.environ.get("DATABASE_USER", dbconfig['mysql']['user']),
passwd=os.environ.get("DATABASE_PASSWORD", dbconfig['mysql']['password']),
database=os.environ.get("DATABASE_NAME", dbconfig['mysql']['database'])
)
connection = dtb.cursor()
state = ["init", "running", "done", "error"]
results = ["allow", "deny"]
if action[1] == "check":
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
connection.execute("INSERT INTO results (state) VALUES(0)")
dtb.commit()
connection.execute("SELECT LAST_INSERT_ID()")
taskId = connection.fetchone()[0]
s.wfile.write(bytearray(json.dumps({'taskId': taskId}), "utf-8"))
os.system("python3 check.py -v -t "+ str(taskId) + " " + action[2] + " &")
return
if action[1] == "info":
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
try:
taskId = int(action[2])
connection.execute("SELECT id, nvr, state, safe_nvr, result, start, end, package FROM results WHERE id = %d" % taskId)
res = connection.fetchone()
if res != None and res[0] != None:
answ = {"id": res[0], "package": res[7], "nvr": res[1], "state": state[res[2]], "safe_nvr": res[3], "result": results[res[4]], "start": str(res[5]), "end": str(res[6])}
s.wfile.write(bytearray(json.dumps(answ), "utf-8"))
else:
s.wfile.write(bytearray(json.dumps("No info available."), "utf-8"))
except ValueError:
s.wfile.write(bytearray(json.dumps('ERROR: Task id expected. Passed: ' + action[2]), "utf-8"))
return
if action[1] == "state":
s.send_response(200)
s.send_header("Content-type", "text/plain")
s.end_headers()
try:
taskId = int(action[2])
connection.execute("SELECT state FROM results WHERE id = %d" % taskId)
res = connection.fetchone()
if res != None and res[0] != None:
s.wfile.write(bytearray(state[res[0]], "utf-8"))
else:
s.wfile.write(bytearray("No state available.", "utf-8"))
except ValueError:
s.wfile.write(bytearray('ERROR: Task id expected. Passed: ' + action[2], "utf-8"))
return
if action[1] == "log":
s.send_response(200)
s.send_header("Content-type", "text/plain")
s.end_headers()
try:
taskId = int(action[2])
connection.execute("SELECT log FROM results WHERE id = %d" % taskId)
res = connection.fetchone()
if res != None and res[0] != None:
s.wfile.write(bytearray(res[0].replace("<", "<").replace(">",">").replace("\n","<br>"), "utf-8"))
else:
s.wfile.write(bytearray("No logs available.", "utf-8"))
except ValueError:
s.wfile.write(bytearray('ERROR: Task id expected. Passed: ' + action[2], "utf-8"))
return
if action[1] == "history":
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
connection.execute("SELECT nvr, safe_nvr, result, state, start, end FROM results WHERE package LIKE ('%s') order by start desc" % action[2].replace(";","").replace("%",""))
res = connection.fetchall()
ans = []
for r in res:
ans.append({"nvr": r[0], "safe_nvr": r[1], "result": results[r[2]], "state": state[r[3]], "start": str(r[4]), "end": str(r[5])})
s.wfile.write(bytearray(json.dumps(ans), "utf-8"))
return
Handler = MyHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Serving at port", PORT)
httpd.serve_forever()