-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathquery_thread.py
50 lines (43 loc) · 2.11 KB
/
query_thread.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
import threading
import logginghelper
import datetime
import traceback
from jsonhelper import JsonHelper
class QueryThread (threading.Thread):
def __init__(self, interface, database, state):
threading.Thread.__init__(self)
self.threadID = interface.server.id
self.interface = interface
self.database = database
self.state = state
def run(self):
self.__process_server()
def __process_server(self):
try:
stats = self.interface.do_query()
logginghelper.log_debug('Received stats from ' + self.interface.server.name)
if stats is None:
return
except Exception as ex:
logginghelper.log_error("Error trying to query server " + self.interface.server.name + ": " + ex.message)
return
try:
with self.database.connect() as db_session:
db_session.begin()
restore_point = self.state.copy()
try:
self.state.update(db_session, stats)
db_session.commit()
logginghelper.log_debug('Updated database for ' + self.interface.server.name)
except Exception as ex:
db_session.rollback()
logginghelper.log_error("Error updating database from query " + self.interface.server.name + ": " + ex.message)
JsonHelper.to_json_file({
'error': traceback.format_exc(),
'company_info': self.state.last_snapshot.company_info,
'game_info': self.state.last_snapshot.game_info,
'client_info': self.state.last_snapshot.client_info
}, "ERROR_" +datetime.datetime.now().strftime("%Y-%m-%d_%H.%M.%S") + "_snapshot_sid" + str(self.state.server_id) + ".json")
self.state.restore(restore_point)
except Exception as ex:
logginghelper.log_error("Error connecting to db while trying to update " + self.interface.server.name + ": " + ex.message)