37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.mariadb.monitoring import Alert, AlertRule
|
|
from app.repositories.base import BaseRepository
|
|
|
|
|
|
class AlertRuleRepository(BaseRepository[AlertRule]):
|
|
def __init__(self, session: AsyncSession):
|
|
super().__init__(AlertRule, session)
|
|
|
|
async def get_enabled_rules(self) -> list[AlertRule]:
|
|
stmt = select(AlertRule).where(AlertRule.is_enabled == True) # noqa: E712
|
|
result = await self.session.execute(stmt)
|
|
return list(result.scalars().all())
|
|
|
|
|
|
class AlertRepository(BaseRepository[Alert]):
|
|
def __init__(self, session: AsyncSession):
|
|
super().__init__(Alert, session)
|
|
|
|
async def get_unacknowledged(self, skip: int = 0, limit: int = 50) -> list[Alert]:
|
|
stmt = (
|
|
select(Alert)
|
|
.where(Alert.is_acknowledged == False) # noqa: E712
|
|
.order_by(Alert.created_at.desc())
|
|
.offset(skip)
|
|
.limit(limit)
|
|
)
|
|
result = await self.session.execute(stmt)
|
|
return list(result.scalars().all())
|
|
|
|
async def count_active(self) -> int:
|
|
return await self.count(filters={"is_acknowledged": False})
|