/
api_core.py
110 lines (88 loc) · 3.33 KB
/
api_core.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
from twisted.python import log
import txredisapi
import rg_lib
import models
import settings
class BizDB:
db_pool = None
redis_conn = None
@classmethod
async def Query(cls, sql_row):
"""
:param sql_row: [sql, args]
:return: rows
"""
return await rg_lib.Sqlite.RunQuery(cls.db_pool, [sql_row])
@classmethod
def Interaction(cls, sql_rows):
return rg_lib.Sqlite.RunInteraction(cls.db_pool, sql_rows)
@classmethod
def Init(cls):
def helper(conn_obj):
conn_obj.execute("BEGIN")
models.ZbModule.Init(conn_obj)
models.ZbDevice.Init(conn_obj)
cls.db_pool = rg_lib.Sqlite.MakeConnPool(settings.BIZ_DB['path'])
cls.redis_conn = txredisapi.lazyConnectionPool(host=settings.REDIS['host'],
port=settings.REDIS['port'],
charset=None,
convertNumbers=False)
return cls.db_pool.runWithConnection(helper)
@classmethod
def Close(cls):
if cls.db_pool:
cls.db_pool.close()
cls.db_pool = None
if cls.redis_conn:
cls.redis_conn.quit()
cls.redis_conn = None
class LogDB:
db_pool = None
@classmethod
def Interaction(cls, sql_rows):
return rg_lib.Sqlite.RunInteraction(cls.db_pool, sql_rows)
@classmethod
async def Query(cls, sql_row):
"""
:param sql_row: [sql, args]
:return: SensorData objs
"""
return await rg_lib.Sqlite.RunQuery(cls.db_pool, [sql_row])
@classmethod
def Init(cls):
def helper(conn_obj):
conn_obj.execute("BEGIN")
models.DeviceOpLog.Init(conn_obj)
cls.db_pool = rg_lib.Sqlite.MakeConnPool(settings.LOG_DB['path'])
return cls.db_pool.runWithConnection(helper)
@classmethod
def Close(cls):
if cls.db_pool:
cls.db_pool.close()
cls.db_pool = None
class DeviceLog:
@classmethod
async def Add(cls, op_logs):
if not isinstance(op_logs, list):
op_logs = [op_logs]
sql_rows = [models.DeviceOpLog.DynInsert(i, True) for i in op_logs]
return await LogDB.Interaction(sql_rows)
@classmethod
def Get(cls, start_ts, stop_ts, deviceid, count=10000):
sql_str = """select * from rxg_device_op_log r1
where r1.deviceid =? and cts>=? and cts<? limit {0}""".format(count)
sql_args = [deviceid, rg_lib.DateTime.dt2ts(start_ts), rg_lib.DateTime.dt2ts(stop_ts)]
return LogDB.Query([sql_str, sql_args])
@classmethod
def GetErrorCount(cls, start_ts, stop_ts, deviceids):
sql_str = rg_lib.Sqlite.GenInSql("""select deviceid, count(1) error_count
from rxg_device_op_log where deviceid in """,
deviceids)
sql_str += " and cts>=? and cts<? group by deviceid"
sql_args = deviceids + [rg_lib.DateTime.dt2ts(start_ts), rg_lib.DateTime.dt2ts(stop_ts)]
return LogDB.Query([sql_str, sql_args])
@classmethod
def RemoveTTL(cls, ts_val):
return LogDB.Interaction([
["delete from rxg_device_op_log where cts < ?", (ts_val,)]
])