chore: update core to v1.1.0 (hooks plugin system)
This commit is contained in:
@@ -8,6 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.models.alarm import AlarmRule, AlarmEvent
|
||||
from app.models.energy import EnergyData
|
||||
from app.models.device import Device
|
||||
from app.hooks import get_hooks
|
||||
|
||||
logger = logging.getLogger("alarm_checker")
|
||||
|
||||
@@ -233,6 +234,16 @@ async def check_alarms(session: AsyncSession):
|
||||
triggered_at=now,
|
||||
)
|
||||
session.add(event)
|
||||
await session.flush() # Ensure event has id
|
||||
|
||||
# Customer hook: on_alarm_created
|
||||
try:
|
||||
_dev = await session.execute(select(Device).where(Device.id == device_id))
|
||||
_device = _dev.scalar_one_or_none()
|
||||
await get_hooks().on_alarm_created(event, _device, rule, session)
|
||||
except Exception as _he:
|
||||
logger.error(f"Hook on_alarm_created error: {_he}")
|
||||
|
||||
logger.info(
|
||||
f"Alarm triggered: {rule.name} | device={device_id} | "
|
||||
f"value={dp.value} threshold={threshold_str}"
|
||||
@@ -246,6 +257,14 @@ async def check_alarms(session: AsyncSession):
|
||||
active_event.status = "resolved"
|
||||
active_event.resolved_at = now
|
||||
active_event.resolve_note = "自动恢复"
|
||||
|
||||
# Customer hook: on_alarm_resolved
|
||||
try:
|
||||
_dev2 = await session.execute(select(Device).where(Device.id == device_id))
|
||||
_device2 = _dev2.scalar_one_or_none()
|
||||
await get_hooks().on_alarm_resolved(active_event, _device2, session)
|
||||
except Exception as _he2:
|
||||
logger.error(f"Hook on_alarm_resolved error: {_he2}")
|
||||
logger.info(
|
||||
f"Alarm auto-resolved: {rule.name} | device={device_id}"
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.models.quota import EnergyQuota, QuotaUsage
|
||||
from app.models.alarm import AlarmEvent
|
||||
from app.models.energy import EnergyDailySummary
|
||||
from app.hooks import get_hooks
|
||||
|
||||
logger = logging.getLogger("quota_checker")
|
||||
|
||||
@@ -34,6 +35,7 @@ async def check_quotas(session: AsyncSession):
|
||||
)
|
||||
quotas = result.scalars().all()
|
||||
|
||||
hooks = get_hooks()
|
||||
for quota in quotas:
|
||||
period_start, period_end = _get_period_range(quota.period, now)
|
||||
|
||||
@@ -121,4 +123,10 @@ async def check_quotas(session: AsyncSession):
|
||||
f"quota={quota.quota_value:.1f} rate={usage_rate_pct:.1f}%"
|
||||
)
|
||||
|
||||
# Customer hook: on_quota_exceeded
|
||||
try:
|
||||
await hooks.on_quota_exceeded(quota, usage_record, session)
|
||||
except Exception as _he:
|
||||
logger.error(f"Hook on_quota_exceeded error: {_he}")
|
||||
|
||||
await session.flush()
|
||||
|
||||
Reference in New Issue
Block a user