Prevent duplicate TFTP server log messages and improve state tracking
- Add filtering mechanism to prevent repeated server start/stop log entries - Implement state tracking flags to manage server status - Remove redundant log messages in both ComConfigCopy.py and TFTPServer.py - Enhance log callback to avoid unnecessary logging of server state changes
This commit is contained in:
@@ -924,7 +924,20 @@ class SerialAppGUI(tk.Tk):
|
|||||||
|
|
||||||
# Устанавливаем callback для логирования
|
# Устанавливаем callback для логирования
|
||||||
def log_callback(message):
|
def log_callback(message):
|
||||||
|
# Фильтруем дублирующиеся сообщения о запуске/остановке сервера
|
||||||
|
if "[INFO] TFTP сервер запущен" in message and hasattr(self, '_server_started'):
|
||||||
|
return
|
||||||
|
if "[INFO] TFTP сервер остановлен" in message and hasattr(self, '_server_stopped'):
|
||||||
|
return
|
||||||
|
|
||||||
self.append_tftp_log(message)
|
self.append_tftp_log(message)
|
||||||
|
|
||||||
|
# Устанавливаем флаги для отслеживания состояния
|
||||||
|
if "[INFO] TFTP сервер запущен" in message:
|
||||||
|
self._server_started = True
|
||||||
|
elif "[INFO] TFTP сервер остановлен" in message:
|
||||||
|
self._server_stopped = True
|
||||||
|
|
||||||
# Обновляем информацию о передачах
|
# Обновляем информацию о передачах
|
||||||
self.update_transfers_info()
|
self.update_transfers_info()
|
||||||
|
|
||||||
@@ -944,8 +957,6 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.tftp_ip_entry.config(state="disabled")
|
self.tftp_ip_entry.config(state="disabled")
|
||||||
self.tftp_port_entry.config(state="disabled")
|
self.tftp_port_entry.config(state="disabled")
|
||||||
|
|
||||||
self.append_tftp_log(f"[INFO] TFTP сервер запущен на {ip}:{port}")
|
|
||||||
|
|
||||||
# Запускаем периодическое обновление информации о передачах
|
# Запускаем периодическое обновление информации о передачах
|
||||||
self.update_transfers_periodically()
|
self.update_transfers_periodically()
|
||||||
|
|
||||||
@@ -968,6 +979,12 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.start_tftp_button.config(state="disabled")
|
self.start_tftp_button.config(state="disabled")
|
||||||
self.stop_tftp_button.config(state="disabled")
|
self.stop_tftp_button.config(state="disabled")
|
||||||
|
|
||||||
|
# Сбрасываем флаги состояния
|
||||||
|
if hasattr(self, '_server_started'):
|
||||||
|
delattr(self, '_server_started')
|
||||||
|
if hasattr(self, '_server_stopped'):
|
||||||
|
delattr(self, '_server_stopped')
|
||||||
|
|
||||||
# Останавливаем сервер
|
# Останавливаем сервер
|
||||||
self.tftp_server.stop_server()
|
self.tftp_server.stop_server()
|
||||||
|
|
||||||
@@ -987,8 +1004,6 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.tftp_ip_entry.config(state="normal")
|
self.tftp_ip_entry.config(state="normal")
|
||||||
self.tftp_port_entry.config(state="normal")
|
self.tftp_port_entry.config(state="normal")
|
||||||
|
|
||||||
self.append_tftp_log("[INFO] TFTP сервер остановлен")
|
|
||||||
|
|
||||||
# Очищаем таблицу передач
|
# Очищаем таблицу передач
|
||||||
for item in self.transfers_tree.get_children():
|
for item in self.transfers_tree.get_children():
|
||||||
self.transfers_tree.delete(item)
|
self.transfers_tree.delete(item)
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ class TFTPServer:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
self.server_socket = None
|
self.server_socket = None
|
||||||
self.log("[INFO] TFTP сервер остановлен.")
|
|
||||||
|
|
||||||
def stop_server(self):
|
def stop_server(self):
|
||||||
"""
|
"""
|
||||||
@@ -160,7 +159,7 @@ class TFTPServer:
|
|||||||
self.log(f"[ERROR] Ошибка при остановке сервера: {str(e)}")
|
self.log(f"[ERROR] Ошибка при остановке сервера: {str(e)}")
|
||||||
finally:
|
finally:
|
||||||
self.running = False # Гарантируем, что флаг running будет False
|
self.running = False # Гарантируем, что флаг running будет False
|
||||||
self.log("[INFO] TFTP сервер остановлен.")
|
self.log("[INFO] TFTP сервер остановлен")
|
||||||
|
|
||||||
def handle_request(self, data, client_addr):
|
def handle_request(self, data, client_addr):
|
||||||
"""
|
"""
|
||||||
@@ -223,17 +222,6 @@ class TFTPServer:
|
|||||||
def send_file(self, file_path, client_addr):
|
def send_file(self, file_path, client_addr):
|
||||||
"""
|
"""
|
||||||
Передача файла клиенту по протоколу TFTP.
|
Передача файла клиенту по протоколу TFTP.
|
||||||
|
|
||||||
В процессе передачи обновляется состояние активной передачи, которое логируется с информацией:
|
|
||||||
- адрес клиента,
|
|
||||||
- имя файла,
|
|
||||||
- размер файла,
|
|
||||||
- количество переданных байт,
|
|
||||||
- оставшиеся байты,
|
|
||||||
- время передачи.
|
|
||||||
|
|
||||||
:param file_path: Полный путь к файлу для передачи.
|
|
||||||
:param client_addr: Адрес клиента.
|
|
||||||
"""
|
"""
|
||||||
BLOCK_SIZE = 512
|
BLOCK_SIZE = 512
|
||||||
transfer_socket = None
|
transfer_socket = None
|
||||||
@@ -356,15 +344,11 @@ class TFTPServer:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
if not self.running:
|
if not self.running:
|
||||||
self.log(f"[INFO] Передача файла '{file_basename}' клиенту {client_addr} прервана: сервер остановлен")
|
self.log(f"[INFO] Передача файла '{file_basename}' клиенту {client_addr} прервана: сервер остановлен")
|
||||||
else:
|
|
||||||
self.log(f"[ERROR] Ошибка при передаче файла '{file_basename}' "
|
|
||||||
f"клиенту {client_addr}: {str(e)}")
|
|
||||||
raise
|
raise
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if not self.running:
|
if not self.running:
|
||||||
self.log(f"[INFO] Передача файла прервана: сервер остановлен")
|
return # Не логируем повторно о прерывании передачи
|
||||||
else:
|
|
||||||
self.log(f"[ERROR] Ошибка при передаче файла '{os.path.basename(file_path)}' "
|
self.log(f"[ERROR] Ошибка при передаче файла '{os.path.basename(file_path)}' "
|
||||||
f"клиенту {client_addr}: {str(e)}")
|
f"клиенту {client_addr}: {str(e)}")
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user