Add pet and wildlife counts to daily digest
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,7 @@ import time
|
||||
from sqlalchemy import func, select
|
||||
from sqlalchemy.engine import Engine
|
||||
|
||||
from vigilar.storage.schema import events, recordings
|
||||
from vigilar.storage.schema import events, pet_sightings, recordings, wildlife_sightings
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@@ -36,6 +36,29 @@ def build_digest(engine: Engine, data_dir: str, since_hours: int = 12) -> dict:
|
||||
.where(recordings.c.started_at >= since_ts // 1000)
|
||||
).scalar() or 0
|
||||
|
||||
pet_count = conn.execute(
|
||||
select(func.count()).select_from(pet_sightings)
|
||||
.where(pet_sightings.c.ts >= since_ts / 1000)
|
||||
).scalar() or 0
|
||||
|
||||
wildlife_predator_count = conn.execute(
|
||||
select(func.count()).select_from(wildlife_sightings)
|
||||
.where(wildlife_sightings.c.ts >= since_ts / 1000,
|
||||
wildlife_sightings.c.threat_level == "PREDATOR")
|
||||
).scalar() or 0
|
||||
|
||||
wildlife_nuisance_count = conn.execute(
|
||||
select(func.count()).select_from(wildlife_sightings)
|
||||
.where(wildlife_sightings.c.ts >= since_ts / 1000,
|
||||
wildlife_sightings.c.threat_level == "NUISANCE")
|
||||
).scalar() or 0
|
||||
|
||||
wildlife_passive_count = conn.execute(
|
||||
select(func.count()).select_from(wildlife_sightings)
|
||||
.where(wildlife_sightings.c.ts >= since_ts / 1000,
|
||||
wildlife_sightings.c.threat_level == "PASSIVE")
|
||||
).scalar() or 0
|
||||
|
||||
usage = shutil.disk_usage(data_dir)
|
||||
disk_pct = usage.used / usage.total * 100
|
||||
disk_gb = usage.used / (1024**3)
|
||||
@@ -47,15 +70,31 @@ def build_digest(engine: Engine, data_dir: str, since_hours: int = 12) -> dict:
|
||||
"disk_used_gb": round(disk_gb, 1),
|
||||
"disk_used_pct": round(disk_pct, 0),
|
||||
"since_hours": since_hours,
|
||||
"pet_sightings": pet_count,
|
||||
"wildlife_predators": wildlife_predator_count,
|
||||
"wildlife_nuisance": wildlife_nuisance_count,
|
||||
"wildlife_passive": wildlife_passive_count,
|
||||
}
|
||||
|
||||
|
||||
def format_digest(data: dict) -> str:
|
||||
return (
|
||||
f"Vigilar Daily Summary\n"
|
||||
lines = [
|
||||
"Vigilar Daily Summary",
|
||||
f"Last {data['since_hours']}h: "
|
||||
f"{data['person_detections']} person detections, "
|
||||
f"{data['unknown_vehicles']} unknown vehicles, "
|
||||
f"{data['recordings']} recordings\n"
|
||||
f"Storage: {data['disk_used_gb']} GB ({data['disk_used_pct']:.0f}%)"
|
||||
)
|
||||
f"{data['recordings']} recordings",
|
||||
]
|
||||
if data.get("pet_sightings", 0) > 0:
|
||||
lines.append(f"Pets: {data['pet_sightings']} pet sightings")
|
||||
wildlife_parts = []
|
||||
if data.get("wildlife_predators", 0) > 0:
|
||||
wildlife_parts.append(f"{data['wildlife_predators']} predator")
|
||||
if data.get("wildlife_nuisance", 0) > 0:
|
||||
wildlife_parts.append(f"{data['wildlife_nuisance']} nuisance")
|
||||
if data.get("wildlife_passive", 0) > 0:
|
||||
wildlife_parts.append(f"{data['wildlife_passive']} passive")
|
||||
if wildlife_parts:
|
||||
lines.append(f"Wildlife: {', '.join(wildlife_parts)}")
|
||||
lines.append(f"Storage: {data['disk_used_gb']} GB ({data['disk_used_pct']:.0f}%)")
|
||||
return "\n".join(lines)
|
||||
|
||||
Reference in New Issue
Block a user