65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
# 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) |