Files
can_sniffer/can_sniffer/src/main.py
2026-01-06 18:08:45 +03:00

77 lines
2.6 KiB
Python

"""
Главный модуль CAN Sniffer приложения.
Только код запуска приложения. Вся логика обработки сообщений
автоматически применяется в модуле socket_can.
"""
import signal
import sys
import time
from config import config
from logger import get_logger
from socket_can import CANSniffer
# Инициализация логгера
logger = get_logger(__name__)
# Глобальная переменная для graceful shutdown
sniffer: CANSniffer = None
def signal_handler(sig, frame):
"""Обработчик сигналов для graceful shutdown."""
logger.info("Received shutdown signal, stopping gracefully...")
if sniffer:
sniffer.stop()
sys.exit(0)
def main():
"""Главная функция приложения - только запуск."""
global sniffer
# Регистрируем обработчики сигналов для graceful shutdown
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
logger.info("CAN Sniffer application starting", extra={
"interfaces": config.can.interfaces,
"bitrate": config.can.bitrate,
"listen_only": config.can.listen_only
})
logger.info("Configuration loaded", extra={
"influxdb_enabled": config.influxdb.enabled,
"influxdb_url": config.influxdb.url if config.influxdb.enabled else None,
"storage_path": config.storage.database_path
})
try:
# Создаем и запускаем CAN Sniffer
# MessageProcessor автоматически инициализируется и используется внутри CANSniffer
sniffer = CANSniffer()
sniffer.start()
logger.info("Application initialized successfully. Reading CAN messages...")
logger.info("Press Ctrl+C to stop")
# Основной цикл - периодически выводим статистику
while True:
time.sleep(10) # Выводим статистику каждые 10 секунд
stats = sniffer.get_stats()
logger.info("Statistics", extra=stats)
except KeyboardInterrupt:
logger.info("Keyboard interrupt received")
except Exception as e:
logger.error(f"Unexpected error: {e}", exc_info=True)
finally:
if sniffer:
sniffer.stop()
logger.info("Application stopped")
if __name__ == '__main__':
main()