rokae xcore protocol scriptly re-made
This commit is contained in:
0
rokae/codes/__init__.py
Normal file
0
rokae/codes/__init__.py
Normal file
101
rokae/codes/clibs.py
Normal file
101
rokae/codes/clibs.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
import threading
|
||||
import time
|
||||
import atexit
|
||||
|
||||
|
||||
def init_logdb():
|
||||
conn = sqlite3.connect(":memory:", isolation_level=None, check_same_thread=False, cached_statements=2048)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("PRAGMA journal_mode=wal")
|
||||
cursor.execute("PRAGMA wal_checkpoint=TRUNCATE")
|
||||
cursor.execute("PRAGMA synchronous=normal")
|
||||
cursor.execute("PRAGMA temp_store=memory")
|
||||
cursor.execute("PRAGMA mmap_size=30000000000")
|
||||
cursor.execute("PRAGMA cache_size=200000")
|
||||
cursor.execute(
|
||||
"""
|
||||
create table if not exists logs(
|
||||
id integer primary key autoincrement,
|
||||
timestamp DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW', 'localtime')),
|
||||
level text,
|
||||
module text,
|
||||
content text
|
||||
)
|
||||
"""
|
||||
)
|
||||
return conn, cursor
|
||||
|
||||
|
||||
def db_lock(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
lock.acquire(True)
|
||||
ret = func(*args, **kwargs)
|
||||
finally:
|
||||
lock.release()
|
||||
return ret
|
||||
return wrapper
|
||||
|
||||
|
||||
def detect_db_size():
|
||||
@db_lock
|
||||
def release_memory():
|
||||
line_number = 20000
|
||||
leftover = 4000 # 200s
|
||||
cursor.execute("SELECT COUNT(id) FROM logs")
|
||||
len_records = cursor.fetchone()[0]
|
||||
if len_records > line_number:
|
||||
del_num = len_records - leftover + 1
|
||||
cursor.execute(f"DELETE FROM logs WHERE id < {del_num}")
|
||||
cursor.execute(f"UPDATE logs SET id=(id-{del_num - 1}) WHERE id > {del_num - 1}")
|
||||
cursor.execute(f"UPDATE sqlite_sequence SET seq = {leftover + 1} WHERE name = 'logs' ")
|
||||
cursor.execute("VACUUM")
|
||||
|
||||
while True:
|
||||
release_memory()
|
||||
time.sleep(interval*30)
|
||||
|
||||
|
||||
@db_lock
|
||||
def to_logdb(level="", module="", content=""):
|
||||
if "move.monitor" in content:
|
||||
return
|
||||
cursor.execute(f"INSERT INTO logs (level, module, content) VALUES (?, ?, ?)", (level.upper(), module, content))
|
||||
|
||||
|
||||
def save_logdb():
|
||||
db_file = str(Path.home()) + "\\Downloads\\aio.db"
|
||||
disk_db = sqlite3.connect(db_file)
|
||||
conn.backup(disk_db)
|
||||
disk_db.close()
|
||||
conn.close()
|
||||
|
||||
|
||||
# ===========================================================================
|
||||
base_path = Path(__file__).parent.parent
|
||||
with open(f"{base_path}/assets/confs/configs.json", mode="r", encoding="utf-8") as f_cfg:
|
||||
cfg = json.load(f_cfg)
|
||||
ip_addr = cfg["ip_addr"]
|
||||
ssh_port = cfg["ssh_port"]
|
||||
socket_port = cfg["socket_port"]
|
||||
xService_port = cfg["xService_port"]
|
||||
external_port = cfg["external_port"]
|
||||
modbus_port = cfg["modbus_port"]
|
||||
upgrade_port = cfg["upgrade_port"]
|
||||
interval = cfg["interval"]
|
||||
max_frame_size = cfg["max_frame_size"]
|
||||
MAX_RECEIVED_SIZE = cfg["MAX_RECEIVED_SIZE"]
|
||||
suffix = cfg["suffix"]
|
||||
username = cfg["username"]
|
||||
password = cfg["password"]
|
||||
retry_time = cfg["retry_time"]
|
||||
|
||||
lock = threading.Lock()
|
||||
conn, cursor = init_logdb()
|
||||
atexit.register(save_logdb)
|
||||
t = threading.Thread(target=detect_db_size)
|
||||
t.daemon = True
|
||||
t.start()
|
1041
rokae/codes/openapi.py
Normal file
1041
rokae/codes/openapi.py
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user