77 lines
2.6 KiB
Python
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() |