feat: sync account priorities after rate changes
This commit is contained in:
@@ -16,6 +16,7 @@ from app.utils.dingtalk import (
|
||||
format_dingtalk_website_rate_changed,
|
||||
format_dingtalk_status,
|
||||
format_dingtalk_balance_low,
|
||||
format_dingtalk_priority_changed,
|
||||
)
|
||||
|
||||
|
||||
@@ -223,6 +224,47 @@ def send_balance_low(
|
||||
_log(db, wh, event, generic_payload, "failed", str(exc))
|
||||
|
||||
|
||||
def send_account_priority_changed(
|
||||
db: Session,
|
||||
website_id: int,
|
||||
website_name: str,
|
||||
upstream_id: int,
|
||||
upstream_name: str,
|
||||
updates: list[dict],
|
||||
) -> None:
|
||||
webhooks = (
|
||||
db.query(WebhookConfig)
|
||||
.filter(WebhookConfig.enabled == True)
|
||||
.all()
|
||||
)
|
||||
event = "account_priority_changed"
|
||||
changed_at = _now_iso()
|
||||
success = sum(1 for u in updates if u.get("status") == "success")
|
||||
failed = sum(1 for u in updates if u.get("status") == "failed")
|
||||
skipped = sum(1 for u in updates if u.get("status") == "skipped")
|
||||
generic_payload = {
|
||||
"event": event,
|
||||
"website": {"id": website_id, "name": website_name},
|
||||
"upstream": {"id": upstream_id, "name": upstream_name},
|
||||
"changed_at": changed_at,
|
||||
"updates": updates,
|
||||
"summary": {"total": len(updates), "success": success, "failed": failed, "skipped": skipped},
|
||||
}
|
||||
for wh in webhooks:
|
||||
events = json.loads(wh.events_json or "[]")
|
||||
if event not in events:
|
||||
continue
|
||||
try:
|
||||
if wh.type == "dingtalk":
|
||||
msg = format_dingtalk_priority_changed(website_name, upstream_name, changed_at, updates)
|
||||
resp_text = _send_dingtalk(wh.url, wh.secret, msg)
|
||||
else:
|
||||
resp_text = _send_generic(wh.url, generic_payload)
|
||||
_log(db, wh, event, generic_payload, "success", resp_text)
|
||||
except Exception as exc:
|
||||
_log(db, wh, event, generic_payload, "failed", str(exc))
|
||||
|
||||
|
||||
def send_test_notification(db: Session, webhook: WebhookConfig) -> tuple[bool, str]:
|
||||
payload = {
|
||||
"event": "test",
|
||||
|
||||
Reference in New Issue
Block a user