Added prometheus client

Added scheduler for compute current spool metrics and info
This commit is contained in:
Dmitry Belousov
2024-04-09 15:25:09 +03:00
parent 29f54358d6
commit 28b2bfec50
6 changed files with 776 additions and 768 deletions

View File

@@ -1,5 +1,5 @@
"""SQLAlchemy database setup."""
import asyncio
import datetime
import logging
import shutil
@@ -15,6 +15,8 @@ from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
from spoolman import env
from spoolman.prometheus.metrics import filament_metrics, spool_metrics
logger = logging.getLogger(__name__)
@@ -183,6 +185,15 @@ async def _backup_task() -> Optional[Path]:
return __db.backup_and_rotate(env.get_backups_dir(), num_backups=5)
async def _metrics() -> None:
"""Create some useful prometheus metrics"""
logger.info("Start metrics collection")
if __db is None:
raise RuntimeError("DB is not setup.")
await asyncio.gather(*[filament_metrics(__db.session_maker()), spool_metrics(__db.session_maker())])
logger.info("End metrics collection")
def schedule_tasks(scheduler: Scheduler) -> None:
"""Schedule tasks to be executed by the provided scheduler.
@@ -197,6 +208,9 @@ def schedule_tasks(scheduler: Scheduler) -> None:
logger.info("Scheduling automatic database backup for midnight.")
# Schedule for midnight
scheduler.daily(datetime.time(hour=0, minute=0, second=0), _backup_task) # type: ignore[arg-type]
logger.info("Scheduling automatic metric collection.")
logger.info("%s", datetime.time(minute=1))
scheduler.minutely(datetime.time(second=0), _metrics)
async def get_db_session() -> AsyncGenerator[AsyncSession, None]: