61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
# daily_availability.py
|
|
|
|
import logging
|
|
from datetime import date
|
|
import httpx
|
|
from apscheduler.schedulers.blocking import BlockingScheduler
|
|
from apscheduler.triggers.cron import CronTrigger
|
|
from config import *
|
|
|
|
# ====== CONFIGURATION ======
|
|
API_BASE = "http://127.0.0.1:8000"
|
|
TIMEOUT = httpx.Timeout(connect=5.0, read=30.0, write=5.0, pool=5.0)
|
|
|
|
# ====== LOGGING SETUP ======
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s | %(levelname)s | %(message)s',
|
|
handlers=[logging.FileHandler("daily_availability.log", encoding="utf-8")]
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# ====== JOB FUNCTION ======
|
|
def check_availability():
|
|
today = date.today().isoformat()
|
|
url = f"{API_BASE}/availability_group"
|
|
headers = {
|
|
"X-API-KEY": API_KEY,
|
|
"Content-Type": "application/json" # хотя httpx сам проставит, но можно явно
|
|
}
|
|
payload = {"dates": [today]}
|
|
|
|
logger.info(f"Запрос создания доступности групп на {today}")
|
|
try:
|
|
with httpx.Client(timeout=TIMEOUT) as client:
|
|
response = client.post(url, headers=headers, json=payload)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
logger.info(f"Успешно создана доступность: {data}")
|
|
except httpx.HTTPStatusError as e:
|
|
allow = e.response.headers.get("Allow")
|
|
logger.error(f"Метод не разрешён (status={e.response.status_code}), Allow={allow}")
|
|
except Exception as e:
|
|
logger.error(f"Ошибка при запросе доступности: {e}")
|
|
|
|
|
|
# ====== SCHEDULER SETUP ======
|
|
if __name__ == "__main__":
|
|
scheduler = BlockingScheduler(timezone="Asia/Yerevan")
|
|
# Запускаем задачу каждый день в 00:01
|
|
scheduler.add_job(
|
|
check_availability,
|
|
trigger=CronTrigger(hour=0, minute=1),
|
|
name="daily_availability_check"
|
|
)
|
|
logger.info("Scheduler запущен. Ожидание выполнения задачи в 00:01...")
|
|
try:
|
|
scheduler.start()
|
|
except (KeyboardInterrupt, SystemExit):
|
|
logger.info("Scheduler остановлен пользователем")
|