full peresobral

This commit is contained in:
2025-07-21 16:59:26 +03:00
parent a6e21a7e59
commit c677e4f8af
11 changed files with 742 additions and 484 deletions

65
main.py Normal file
View File

@@ -0,0 +1,65 @@
# 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)