fix: dashboard and hosts count SSH and RDP daily reports

analytics-a4: daily_reports_24h uses report.daily.*; sac-deploy enables timers
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-29 16:31:09 +10:00
parent 415d863b3b
commit 42f31b3bb5
7 changed files with 50 additions and 7 deletions
+2 -2
View File
@@ -10,7 +10,7 @@ from app.config import get_settings
from app.database import get_db
from app.models import Event, Host, Problem
from app.schemas.list_models import EventSummary
from app.services.host_health import DAILY_REPORT_SSH, HEARTBEAT_TYPE, count_stale_hosts
from app.services.host_health import DAILY_REPORT_TYPES, HEARTBEAT_TYPE, count_stale_hosts
router = APIRouter(prefix="/dashboards", tags=["dashboards"])
@@ -89,7 +89,7 @@ def dashboard_summary(
daily_reports_24h = db.scalar(
select(func.count())
.select_from(Event)
.where(Event.received_at >= since, Event.type == DAILY_REPORT_SSH)
.where(Event.received_at >= since, Event.type.in_(DAILY_REPORT_TYPES))
) or 0
problems_open = (
db.scalar(select(func.count()).select_from(Problem).where(Problem.status == "open")) or 0
+2 -2
View File
@@ -8,9 +8,9 @@ from app.database import get_db
from app.models import Event, Host
from app.schemas.list_models import HostListResponse, HostSummary
from app.services.host_health import (
DAILY_REPORT_SSH,
HEARTBEAT_TYPE,
agent_status,
max_daily_report_time_by_host,
max_event_time_by_host,
)
@@ -47,7 +47,7 @@ def list_hosts(
settings = get_settings()
hb_map = max_event_time_by_host(db, HEARTBEAT_TYPE)
report_map = max_event_time_by_host(db, DAILY_REPORT_SSH)
report_map = max_daily_report_time_by_host(db)
items: list[HostSummary] = []
for host in rows:
+2 -2
View File
@@ -11,7 +11,7 @@ from app.auth.jwt_auth import verify_access_token
from app.database import SessionLocal
from app.models import Event, Problem
from app.config import get_settings
from app.services.host_health import DAILY_REPORT_SSH, HEARTBEAT_TYPE, count_stale_hosts
from app.services.host_health import DAILY_REPORT_TYPES, HEARTBEAT_TYPE, count_stale_hosts
from app.version import APP_VERSION
router = APIRouter(prefix="/stream", tags=["stream"])
@@ -43,7 +43,7 @@ def _dashboard_snapshot(db: Session) -> dict:
"daily_reports_24h": db.scalar(
select(func.count())
.select_from(Event)
.where(Event.received_at >= since, Event.type == DAILY_REPORT_SSH)
.where(Event.received_at >= since, Event.type.in_(DAILY_REPORT_TYPES))
)
or 0,
"problems_open": problems_open,
+11
View File
@@ -9,6 +9,8 @@ from app.models import Event, Host
HEARTBEAT_TYPE = "agent.heartbeat"
DAILY_REPORT_SSH = "report.daily.ssh"
DAILY_REPORT_RDP = "report.daily.rdp"
DAILY_REPORT_TYPES = (DAILY_REPORT_SSH, DAILY_REPORT_RDP)
def max_event_time_by_host(db: Session, event_type: str) -> dict[int, datetime]:
@@ -20,6 +22,15 @@ def max_event_time_by_host(db: Session, event_type: str) -> dict[int, datetime]:
return {int(host_id): ts for host_id, ts in rows if ts is not None}
def max_daily_report_time_by_host(db: Session) -> dict[int, datetime]:
rows = db.execute(
select(Event.host_id, func.max(Event.received_at))
.where(Event.type.in_(DAILY_REPORT_TYPES))
.group_by(Event.host_id)
).all()
return {int(host_id): ts for host_id, ts in rows if ts is not None}
def agent_status(
last_heartbeat_at: datetime | None,
*,