转向从机型配置文件获取参数
This commit is contained in:
124
code/aio.py
124
code/aio.py
@@ -15,6 +15,7 @@ from datetime import datetime
|
||||
import os
|
||||
from common import clibs, openapi
|
||||
from data_process import current, brake, iso, wavelogger
|
||||
from automatic_test import do_current
|
||||
import threading
|
||||
import re
|
||||
|
||||
@@ -118,6 +119,7 @@ class App:
|
||||
self.label_tips = ctk.CTkLabel(self.frame_status, textvariable=var_tips, compound="left", bg_color="#C9C9C9", font=self.f_status, anchor="e")
|
||||
self.__auth_and_vercheck()
|
||||
if local_vers == self.server_vers:
|
||||
# if True:
|
||||
image = ctk.CTkImage(Image.open(f"{clibs.PREFIX}/media/updated.png"), size=(16, 16))
|
||||
var_tips.set(" 当前是最新版本,继续保持! ")
|
||||
self.label_tips.configure(text_color="#0D8A3D", image=image)
|
||||
@@ -207,6 +209,12 @@ class App:
|
||||
clibs.running = False
|
||||
raise Exception(desc)
|
||||
|
||||
@staticmethod
|
||||
def __is_running(operation):
|
||||
if clibs.running:
|
||||
messagebox.showerror(title="处理中", message=f"有程序正在运行,需等待结束后,在执行{operation}操作!")
|
||||
return
|
||||
|
||||
def __program_start(self):
|
||||
def get_data_dp():
|
||||
data = {
|
||||
@@ -230,10 +238,11 @@ class App:
|
||||
return data
|
||||
|
||||
def init_op():
|
||||
self.__is_running("开始")
|
||||
self.text_output.delete("1.0", ctk.END)
|
||||
self.tabview_bottom.set("输出")
|
||||
clibs.tl_prg = self.__toplevel_progress
|
||||
if clibs.db_state != "readwrite":
|
||||
self.text_output.delete("1.0", ctk.END)
|
||||
clibs.cursor.close()
|
||||
clibs.conn.close()
|
||||
clibs.conn = self.conn
|
||||
@@ -241,8 +250,6 @@ class App:
|
||||
clibs.db_state = "readwrite"
|
||||
self.btn_load.configure(fg_color="#979DA2")
|
||||
self.__get_realtime_log()
|
||||
clibs.tl_prg = self.__toplevel_progress
|
||||
# TBD: something signifies status of program and terminate some thread ect.
|
||||
|
||||
def exec_function():
|
||||
init_op()
|
||||
@@ -250,15 +257,22 @@ class App:
|
||||
if not clibs.running:
|
||||
clibs.running = True
|
||||
clibs.data_dp = get_data_dp()
|
||||
eval(clibs.data_dp["_main"] + ".main()")
|
||||
clibs.running = False
|
||||
try:
|
||||
eval(clibs.data_dp["_main"] + ".main()")
|
||||
finally:
|
||||
clibs.running = False
|
||||
else:
|
||||
messagebox.showinfo(title="进行中...", message="当前有程序正在运行!")
|
||||
elif self.tabview_top.get() == "自动测试":
|
||||
clibs.running = True
|
||||
clibs.data_at = get_data_at()
|
||||
eval(clibs.data_at["_main"] + ".main()")
|
||||
clibs.running = False
|
||||
if not clibs.running:
|
||||
clibs.running = True
|
||||
clibs.data_at = get_data_at()
|
||||
try:
|
||||
eval("do_" + clibs.data_at["_main"] + ".main()")
|
||||
finally:
|
||||
clibs.running = False
|
||||
else:
|
||||
messagebox.showinfo(title="进行中...", message="当前有程序正在运行!")
|
||||
|
||||
exec_function()
|
||||
|
||||
@@ -270,6 +284,8 @@ class App:
|
||||
self.entry_path_atv.set("数据文件夹路径")
|
||||
self.entry_path_atv.set("数据文件夹路径")
|
||||
|
||||
self.__is_running("重置")
|
||||
|
||||
if clibs.db_state == "readwrite":
|
||||
res = messagebox.askyesno(title="状态重置", message="这将清空本次所有的输出以及日志记录,且不可恢复,请确认!", default=messagebox.NO, icon=messagebox.WARNING)
|
||||
if res:
|
||||
@@ -278,13 +294,14 @@ class App:
|
||||
clibs.lock.acquire(True)
|
||||
clibs.cursor.execute("delete from logs")
|
||||
clibs.cursor.execute("delete from sqlite_sequence") # 主键归零
|
||||
except Exception:
|
||||
self.__w2t("主键归零操作失败", "red")
|
||||
finally:
|
||||
clibs.lock.release()
|
||||
|
||||
self.treeview_logs.delete(*self.treeview_logs.get_children())
|
||||
self.label_pages_logs.set("-.-.-.-.-.-")
|
||||
reset_methods()
|
||||
# TBD: something signifies status of program and terminate some thread ect.
|
||||
elif clibs.db_state == "readonly":
|
||||
res = messagebox.askyesno(title="状态重置", message="这将清空本次所有的输出以及恢复本次的日志记录,请确认!", default=messagebox.NO, icon=messagebox.INFO)
|
||||
if res:
|
||||
@@ -296,12 +313,11 @@ class App:
|
||||
clibs.db_state = "readwrite"
|
||||
self.__get_realtime_log()
|
||||
reset_methods()
|
||||
# TBD: something signifies status of program and terminate some thread ect.
|
||||
|
||||
@clibs.db_lock
|
||||
def __get_realtime_log(self):
|
||||
clibs.cursor.execute("select id from logs")
|
||||
len_records = len(clibs.cursor.fetchall())
|
||||
clibs.cursor.execute("select count(id) from logs")
|
||||
len_records = clibs.cursor.fetchone()[0]
|
||||
pages_all = len_records // 100 if len_records % 100 == 0 else len_records // 100 + 1
|
||||
self.label_pages_logs.set(f"{pages_all} / {pages_all}")
|
||||
|
||||
@@ -333,14 +349,14 @@ class App:
|
||||
self.treeview_logs.delete(*self.treeview_logs.get_children())
|
||||
for record in records:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
# self.treeview_logs.yview_moveto(1)
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
|
||||
clibs.cursor.execute("select * from logs order by id desc")
|
||||
records = clibs.cursor.fetchall()
|
||||
pages_all = len(records) // 100 if len(records) % 100 == 0 else len(records) // 100 + 1
|
||||
clibs.cursor.execute("select count(id) from logs")
|
||||
len_records = clibs.cursor.fetchone()[0]
|
||||
pages_all = len_records // 100 if len_records % 100 == 0 else len_records // 100 + 1
|
||||
current_page = int(end) // 100 if int(end) % 100 == 0 else int(end) // 100 + 1
|
||||
self.label_pages_logs.set(f"{current_page} / {pages_all}")
|
||||
except Exception as ERR:
|
||||
except Exception:
|
||||
...
|
||||
else:
|
||||
pages_all = self.label_pages_logs.get().split("/")[1].strip()
|
||||
@@ -354,6 +370,7 @@ class App:
|
||||
if index_end <= 100:
|
||||
for record in clibs.f_records[:index_end]:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
else:
|
||||
for record in clibs.f_records[index_end-100:index_end]:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
@@ -365,10 +382,9 @@ class App:
|
||||
@clibs.db_lock
|
||||
def get_next_page():
|
||||
if self.btn_find.cget("fg_color") == "#979DA2":
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
clibs.cursor.execute("select id from logs")
|
||||
len_records = len(clibs.cursor.fetchall())
|
||||
clibs.cursor.execute("select count(id) from logs")
|
||||
len_records = clibs.cursor.fetchone()[0]
|
||||
|
||||
row = self.treeview_logs.get_children()
|
||||
last_id = self.treeview_logs.item(row[-1], "values")[0]
|
||||
@@ -380,18 +396,18 @@ class App:
|
||||
self.treeview_logs.delete(*self.treeview_logs.get_children())
|
||||
for record in records:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
# self.treeview_logs.yview_moveto(1)
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
|
||||
pages_all = len_records // 100 if len_records % 100 == 0 else len_records // 100 + 1
|
||||
current_page = int(start) // 100 if int(start) % 100 == 0 else int(start) // 100 + 1
|
||||
self.label_pages_logs.set(f"{current_page} / {pages_all}")
|
||||
except Exception as Err:
|
||||
print(f"get_next_page-if: {Err}")
|
||||
_pages_all = len_records // 100 if len_records % 100 == 0 else len_records // 100 + 1
|
||||
_current_page = int(start) // 100 if int(start) % 100 == 0 else int(start) // 100 + 1
|
||||
self.label_pages_logs.set(f"{_current_page} / {_pages_all}")
|
||||
except Exception:
|
||||
...
|
||||
else:
|
||||
len_records = len(clibs.f_records)
|
||||
pages_all = int(self.label_pages_logs.get().split("/")[1].strip())
|
||||
current_page = int(self.label_pages_logs.get().split("/")[0].strip())
|
||||
if current_page < pages_all:
|
||||
_pages_all = int(self.label_pages_logs.get().split("/")[1].strip())
|
||||
_current_page = int(self.label_pages_logs.get().split("/")[0].strip())
|
||||
if _current_page < _pages_all:
|
||||
row = self.treeview_logs.get_children()
|
||||
last_one = list(self.treeview_logs.item(row[-1], "values"))
|
||||
last_one[0] = int(last_one[0])
|
||||
@@ -400,12 +416,14 @@ class App:
|
||||
if index_start+100 <= len_records:
|
||||
for record in clibs.f_records[index_start:index_start+100]:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
else:
|
||||
for record in clibs.f_records[index_start:]:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
|
||||
next_page = current_page + 1
|
||||
self.label_pages_logs.set(f"{next_page} / {pages_all}")
|
||||
_next_page = _current_page + 1
|
||||
self.label_pages_logs.set(f"{_next_page} / {_pages_all}")
|
||||
|
||||
current_page = int(self.label_pages_logs.get().split("/")[0].strip())
|
||||
pages_all = int(self.label_pages_logs.get().split("/")[1].strip())
|
||||
@@ -417,19 +435,24 @@ class App:
|
||||
get_next_page()
|
||||
|
||||
def __load_log_db(self):
|
||||
self.__is_running("加载")
|
||||
db_file = filedialog.askopenfilename(title="加载数据库文件", defaultextension=".db", initialdir=f"{clibs.PREFIX}/logs")
|
||||
if not db_file:
|
||||
return
|
||||
self.conn = clibs.conn
|
||||
self.cursor = clibs.cursor
|
||||
try:
|
||||
clibs.conn = sqlite3.connect(f"file:{db_file}?mode=ro", uri=True, isolation_level=None, check_same_thread=False, cached_statements=256)
|
||||
clibs.conn = sqlite3.connect(f"file:{db_file}?mode=ro", uri=True, isolation_level=None, check_same_thread=False, cached_statements=2048)
|
||||
clibs.cursor = clibs.conn.cursor()
|
||||
clibs.cursor.execute("PRAGMA synchronous=normal")
|
||||
clibs.cursor.execute("PRAGMA temp_store=memory")
|
||||
clibs.cursor.execute("PRAGMA mmap_size=30000000000")
|
||||
clibs.cursor.execute("PRAGMA cache_size=200000")
|
||||
clibs.db_state = "readonly"
|
||||
self.__get_realtime_log()
|
||||
self.btn_load.configure(fg_color="#000080")
|
||||
except Exception as Err:
|
||||
clibs.insert_logdb("ERROR", "aio", f"加载数据库失败,需确认 {db_file} 是否是有效数据库文件!")
|
||||
clibs.insert_logdb("ERROR", "aio", f"load_log_db: 加载数据库失败,需确认 {db_file} 是否是有效数据库文件!\n{Err}")
|
||||
messagebox.showerror(title="加载数据库失败", message=f"需确认 {db_file} 是否是有效数据库文件!")
|
||||
|
||||
def __main_switch_dp(self, event):
|
||||
@@ -459,7 +482,7 @@ class App:
|
||||
url_vers = "http://10.2.23.150:10008/version"
|
||||
try:
|
||||
self.server_vers = request.urlopen(url_vers, timeout=2).read().decode("utf-8").strip()
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
messagebox.showwarning(title="退出", message="无法连接至服务器.....")
|
||||
clibs.cursor.close()
|
||||
clibs.conn.close()
|
||||
@@ -543,7 +566,7 @@ class App:
|
||||
index_start = all_text.find(selected)
|
||||
index_end = index_start + len(selected)
|
||||
widget.delete(index_start, index_end)
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
...
|
||||
|
||||
@staticmethod
|
||||
@@ -556,7 +579,7 @@ class App:
|
||||
index_start = all_text.find(selected)
|
||||
index_end = index_start + len(selected)
|
||||
widget.delete(index_start, index_end)
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
...
|
||||
|
||||
@staticmethod
|
||||
@@ -565,7 +588,7 @@ class App:
|
||||
widget.clipboard_clear()
|
||||
copy_text = widget.selection_get()
|
||||
widget.clipboard_append(copy_text)
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
...
|
||||
|
||||
@staticmethod
|
||||
@@ -601,7 +624,6 @@ class App:
|
||||
widget_toplevel.destroy()
|
||||
|
||||
def double_click(event):
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
e = event.widget
|
||||
iid = e.identify("item", event.x, event.y)
|
||||
@@ -616,7 +638,7 @@ class App:
|
||||
toplevel.bind("<Escape>", esc_quit_log_tl)
|
||||
toplevel.transient(self.root)
|
||||
toplevel.focus()
|
||||
_text = f"TS: {_ts} | Log level: {_level} | Module: {_module}"
|
||||
_text = f"{_level} log in {_module} @ {_ts}"
|
||||
label_info = ctk.CTkLabel(toplevel, text=_text, width=10, fg_color="#5F9EA0", corner_radius=5, font=self.f_treeview)
|
||||
text_content = ctk.CTkTextbox(toplevel, width=10, font=self.f_toplevel)
|
||||
text_content.insert(ctk.END, repr(_content))
|
||||
@@ -638,19 +660,19 @@ class App:
|
||||
if number > 0:
|
||||
start = number * 100 - 99
|
||||
end = number * 100
|
||||
clibs.cursor.execute("select id from logs")
|
||||
len_records = len(clibs.cursor.fetchall())
|
||||
clibs.cursor.execute("select count(id) from logs")
|
||||
len_records = clibs.cursor.fetchone()[0]
|
||||
if start <= len_records:
|
||||
clibs.cursor.execute(f"select * from logs where id between {start} and {end}")
|
||||
records = clibs.cursor.fetchall()
|
||||
self.treeview_logs.delete(*self.treeview_logs.get_children())
|
||||
for record in records:
|
||||
self.treeview_logs.insert("", "end", values=record, tags=record[2])
|
||||
self.treeview_logs.yview_moveto(1)
|
||||
self.treeview_logs.yview_moveto(0)
|
||||
|
||||
pages_all = len_records // 100 if len_records % 100 == 0 else len_records // 100 + 1
|
||||
self.label_pages_logs.set(f"{number} / {pages_all}")
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
...
|
||||
|
||||
def close_toplevel(tl):
|
||||
@@ -861,22 +883,25 @@ class App:
|
||||
if self.btn_conn.cget("fg_color") == "#979DA2":
|
||||
self.btn_conn.configure(state="disabled")
|
||||
clibs.ip_addr = self.entry_ip_atv.get().strip()
|
||||
ip_pattern = re.compile(r'(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])')
|
||||
ip_pattern = re.compile(r"(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])")
|
||||
if not ip_pattern.fullmatch(clibs.ip_addr):
|
||||
messagebox.showerror(title="非法地址", message=f"{clibs.ip_addr} 不是一个有效的 IP 地址")
|
||||
clibs.insert_logdb("ERROR", "aio", f"connection: {clibs.ip_addr} 不是一个有效的 IP 地址")
|
||||
return
|
||||
try:
|
||||
# clibs.c_md = openapi.ModbusRequest(clibs.ip_addr, clibs.modbus_port)
|
||||
clibs.c_md = openapi.ModbusRequest(clibs.ip_addr, clibs.modbus_port)
|
||||
clibs.c_hr = openapi.HmiRequest(clibs.ip_addr, clibs.socket_port, clibs.xService_port)
|
||||
clibs.c_pd = openapi.PreDos(clibs.ip_addr, clibs.ssh_port, clibs.username, clibs.password)
|
||||
self.btn_conn.configure(state="normal", fg_color="#2E8B57")
|
||||
except Exception as Err:
|
||||
except Exception:
|
||||
self.btn_conn.configure(state="normal", fg_color="#979DA2")
|
||||
elif self.btn_conn.cget("fg_color") == "#2E8B57":
|
||||
self.btn_conn.configure(state="disabled")
|
||||
try:
|
||||
# clibs.c_md.close()
|
||||
clibs.c_md.close()
|
||||
clibs.c_hr.close()
|
||||
except Exception:
|
||||
...
|
||||
finally:
|
||||
self.btn_conn.configure(state="normal", fg_color="#979DA2")
|
||||
t = threading.Thread(target=conn_or_disconn)
|
||||
@@ -989,10 +1014,11 @@ class App:
|
||||
self.om_sensor_dp.configure(state="disabled")
|
||||
# ========================================================================
|
||||
clibs.w2t = self.__w2t
|
||||
# clibs.insert_logdb("INFO", "aio", "AIO starts running......")
|
||||
clibs.insert_logdb("INFO", "aio", "AIO starts running......")
|
||||
|
||||
def show(self):
|
||||
if self.server_vers:
|
||||
# if True:
|
||||
t = threading.Thread(target=self.__detect_network)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
Reference in New Issue
Block a user