Files
MHservice/main.py
2025-07-21 16:59:26 +03:00

65 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# main.py
import sys
import time
import logging
import schedule
import config
from database import DatabaseManager
from sd_api import ServiceDeskClient
from sync_logic import Synchronizer
def setup_logging():
"""Настраивает базовую конфигурацию логирования."""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
stream=sys.stdout, # Вывод логов в stdout
)
# Отключаем слишком "болтливые" логи от сторонних библиотек
logging.getLogger("requests").setLevel(logging.WARNING)
logging.getLogger("urllib3").setLevel(logging.WARNING)
def job():
"""
Основная задача, которую будет выполнять планировщик.
"""
log = logging.getLogger(__name__)
log.info("Запуск задачи синхронизации...")
try:
# Инициализация всех компонентов
db_manager = DatabaseManager(config.DB_FULL_PATH)
sd_client = ServiceDeskClient(config.SD_ACCESS_KEY, config.SD_BASE_URL)
# Контекстный менеджер для БД гарантирует открытие/закрытие соединения
with db_manager as db:
# Перед первым запуском создаем таблицы, если их нет
db.setup_tables()
synchronizer = Synchronizer(db, sd_client)
synchronizer.run_full_sync()
except Exception as e:
log.critical(f"Произошла непредвиденная ошибка на верхнем уровне: {e}", exc_info=True)
if __name__ == '__main__':
setup_logging()
main_log = logging.getLogger(__name__)
# --- Первоначальный запуск ---
# Можно запустить один раз при старте, чтобы не ждать первого интервала
main_log.info("Первый запуск сервиса...")
job()
# --- Настройка расписания ---
# В вашем коде было 3 минуты, можно настроить как угодно
sync_interval_minutes = 15
main_log.info(f"Сервис запущен. Синхронизация будет выполняться каждые {sync_interval_minutes} минут.")
schedule.every(sync_interval_minutes).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)