feat: sync account priorities after rate changes

This commit is contained in:
liumangmang
2026-05-29 17:51:12 +08:00
parent c5778bb3e7
commit 5c20ddc8e6
21 changed files with 1510 additions and 26 deletions
+42
View File
@@ -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",