This repository has been archived on 2025-03-27. You can view files and clone it, but cannot push or open issues or pull requests.

126 lines
4.0 KiB
Python

import os
import os.path
import sqlite3
import threading
def traversal_files(_path, _w2t):
# 功能:以列表的形式分别返回指定路径下的文件和文件夹,不包含子目录
# 参数:路径
# 返回值:路径下的文件夹列表 路径下的文件列表
if not os.path.exists(_path):
_w2t(f"数据文件夹{_path}不存在,请确认后重试......", "red", "PathNotExistError")
else:
dirs, files = [], []
for item in os.scandir(_path):
if item.is_dir():
dirs.append(item.path.replace("\\", "/"))
elif item.is_file():
files.append(item.path.replace("\\", "/"))
return dirs, files
def init_logdb(conn, cursor):
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,
time 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
@db_lock
def insert_logdb(_level, _module, _content):
if db_state == "readwrite":
global conn, cursor, lock
if "move.monitor" in _content:
return
data = [_level, _module, _content]
cursor.execute("insert into logs (level, module, content) values (?, ?, ?)", data)
def insert_logdb_multi(data):
if db_state == "readwrite":
global conn, cursor, lock
# data = [_level, _module, repr(_content)]
# cursor.execute("insert into logs (level, module, content) values (?, ?, ?)", data)
try:
lock.acquire(True)
cursor.executemany("insert into logs (level, module, content) values (?, ?, ?)", data)
finally:
lock.release()
class GetThreadResult(threading.Thread):
def __init__(self, func, args=()):
super(GetThreadResult, self).__init__()
self.func = func
self.args = args
self.result = None
def run(self):
self.result = self.func(*self.args)
def get_result(self):
threading.Thread.join(self) # 等待线程执行完毕
try:
return self.result
except Exception:
return None
# PREFIX = 'assets' # for pyinstaller packaging
PREFIX = '../assets' # for source code testing and debug
log_path = f"{PREFIX}/logs"
levels = ["DEBUG", "INFO", "WARNING", "ERROR"]
db_state = "readwrite"
data_dp, data_at = {}, {}
conn, cursor, w2t, tl_prg, f_records, stop, running = None, None, None, None, None, True, False
ip_addr = "192.168.0.160"
ssh_port, socket_port, xService_port, external_port, modbus_port, upgrade_port = 22, 5050, 6666, 8080, 502, 4567
username, password = "luoshi", "luoshi2019"
interval, RADIAN, MAX_FRAME_SIZE, count = 0.5, 57.3, 1024, 0
c_md, c_hr, c_ec, c_pd = None, None, None, None
lock = threading.Lock()
conn, cursor = init_logdb(conn, cursor)
# ============== ↓↓↓DEBUG CODE↓↓↓ ==============
# for i in range(100):
# insert_logdb("DEBUG", "clibs", 'running')
# insert_logdb("INFO", "clibs", 'running')
# insert_logdb("WARNING", "clibs", 'running')
# insert_logdb("ERROR", "clibs", 'running')
# with open(f"{log_path}/response.txt", mode="w", encoding="utf-8") as f_res:
# f_res.write("")
# with open(f"{log_path}/logs.txt", mode="w", encoding="utf-8") as f_res:
# f_res.write("")