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:
2025-02-16 03:31:32 +03:00
parent 3126811f09
commit a252a0f153
2 changed files with 27 additions and 28 deletions

View File

@@ -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)

View File

@@ -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: