mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-11 13:08:34 +03:00
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import asyncio
|
|
import logging
|
|
import alembic.config
|
|
from fastapi import FastAPI
|
|
from contextlib import asynccontextmanager
|
|
from fastapi_utils.tasks import repeat_every
|
|
from loguru import logger
|
|
|
|
from db import crud, models
|
|
from db.database import get_db, make_engine
|
|
from shared.settings import get_settings
|
|
from utils.metrics import measure_regular_metrics, redis_subscribe_worker_exceptions
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# see https://fastapi.tiangolo.com/advanced/events/#lifespan
|
|
|
|
# STARTUP
|
|
engine = make_engine(get_settings().DATABASE_PATH)
|
|
models.Base.metadata.create_all(bind=engine)
|
|
alembic.config.main(argv=['--raiseerr', 'upgrade', 'head'])
|
|
# disabling uvicorn logger since we use loguru in logging_middleware
|
|
logging.getLogger("uvicorn.access").disabled = True
|
|
asyncio.create_task(redis_subscribe_worker_exceptions(get_settings().REDIS_EXCEPTIONS_CHANNEL, get_settings().CELERY_BROKER_URL))
|
|
asyncio.create_task(refresh_user_groups())
|
|
asyncio.create_task(repeat_measure_regular_metrics())
|
|
|
|
yield # separates startup from shutdown instructions
|
|
|
|
# SHUTDOWN
|
|
logger.info("shutting down")
|
|
|
|
|
|
# CRON JOBS
|
|
|
|
@repeat_every(seconds=60 * 60) # 1 hour
|
|
async def refresh_user_groups():
|
|
with get_db() as db:
|
|
crud.upsert_user_groups(db)
|
|
|
|
|
|
@repeat_every(seconds=get_settings().REPEAT_COUNT_METRICS_SECONDS)
|
|
async def repeat_measure_regular_metrics():
|
|
await measure_regular_metrics(get_settings().DATABASE_PATH, get_settings().REPEAT_COUNT_METRICS_SECONDS)
|