full peresobral
This commit is contained in:
65
main.py
Normal file
65
main.py
Normal 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)
|
||||
Reference in New Issue
Block a user