feat(awooop): add source provider freshness heartbeat
Some checks failed
CD Pipeline / tests (push) Failing after 6s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Code Review / ai-code-review (push) Failing after 8s

This commit is contained in:
Your Name
2026-05-20 19:31:54 +08:00
parent b1f666826f
commit ced36f2521
7 changed files with 430 additions and 10 deletions

View File

@@ -6,7 +6,6 @@ import time
import unittest
from pathlib import Path
SCRIPT_PATH = Path(__file__).resolve().parents[3] / "scripts" / "alert_chain_smoke_test.py"
SPEC = importlib.util.spec_from_file_location("alert_chain_smoke_test", SCRIPT_PATH)
alert_chain_smoke_test = importlib.util.module_from_spec(SPEC)
@@ -79,6 +78,61 @@ class AlertChainSmokeMetricTest(unittest.TestCase):
self.assertFalse(result.passed)
self.assertTrue(result.critical)
def test_source_provider_heartbeat_requires_operator_key(self):
result = alert_chain_smoke_test.send_source_provider_heartbeat(
"https://awoooi.example",
providers=["sentry", "signoz"],
operator_key=None,
operator_id="gitea-e2e-health",
)
self.assertFalse(result.passed)
self.assertTrue(result.critical)
self.assertIn("AWOOOP_OPERATOR_API_KEY", result.message)
def test_source_provider_heartbeat_posts_expected_payload(self):
calls = []
def fake_post(url, payload, *, headers=None, timeout=None):
calls.append(
{
"url": url,
"payload": payload,
"headers": headers,
"timeout": timeout,
}
)
return alert_chain_smoke_test.HttpGetResult(
200,
(
'{"status":"recorded","items":['
'{"provider":"sentry"},{"provider":"signoz"}]}'
),
)
original_post = alert_chain_smoke_test.http_post_json
try:
alert_chain_smoke_test.http_post_json = fake_post
result = alert_chain_smoke_test.send_source_provider_heartbeat(
"https://awoooi.example",
providers=["sentry", "signoz"],
operator_key="secret",
operator_id="gitea-e2e-health",
run_ref="run-123",
)
finally:
alert_chain_smoke_test.http_post_json = original_post
self.assertTrue(result.passed)
self.assertEqual(
calls[0]["url"],
"https://awoooi.example/api/v1/platform/events/dossier/provider-heartbeat",
)
self.assertEqual(calls[0]["payload"]["providers"], ["sentry", "signoz"])
self.assertEqual(calls[0]["payload"]["run_ref"], "run-123")
self.assertEqual(calls[0]["headers"]["X-AwoooP-Operator-Id"], "gitea-e2e-health")
self.assertEqual(calls[0]["headers"]["X-AwoooP-Operator-Key"], "secret")
if __name__ == "__main__":
unittest.main()

View File

@@ -274,6 +274,32 @@ def test_sentry_and_signoz_source_refs_keep_raw_event_ids() -> None:
assert signoz_envelope["source_refs"]["signoz_alerts"] == ["HighLatency", "fp-456"]
def test_source_provider_heartbeat_refs_do_not_claim_real_provider_alerts() -> None:
sentry_envelope = build_inbound_source_envelope(
provider="sentry",
stage="heartbeat",
provider_event_id="sentry:heartbeat:heartbeat-1",
raw_event_id="heartbeat-1",
raw_content="Sentry heartbeat",
alertname="SourceProviderHeartbeat",
fingerprint="source-provider-heartbeat:sentry",
)
signoz_envelope = build_inbound_source_envelope(
provider="signoz",
stage="heartbeat",
provider_event_id="signoz:heartbeat:heartbeat-1",
raw_event_id="heartbeat-1",
raw_content="SignOz heartbeat",
alertname="SourceProviderHeartbeat",
fingerprint="source-provider-heartbeat:signoz",
)
assert sentry_envelope["source_refs"]["event_ids"] == ["heartbeat-1"]
assert sentry_envelope["source_refs"]["sentry_issue_ids"] == []
assert signoz_envelope["source_refs"]["event_ids"] == ["heartbeat-1"]
assert signoz_envelope["source_refs"]["signoz_alerts"] == []
async def test_record_outbound_message_sets_sent_at_for_sent_messages() -> None:
session = _FakeSession()
run_id = build_grouped_alert_run_id("awoooi", "telegram-message-13152")

View File

@@ -0,0 +1,51 @@
from __future__ import annotations
from uuid import uuid4
import pytest
from src.api.v1.platform import events
from src.core.awooop_operator_auth import AwoooPOperatorPrincipal
@pytest.mark.asyncio
async def test_create_source_provider_heartbeat_records_low_noise_events(monkeypatch):
captured: list[dict] = []
async def fake_record_external_alert_event(**kwargs):
captured.append(kwargs)
return uuid4()
monkeypatch.setattr(events, "record_external_alert_event", fake_record_external_alert_event)
response = await events.create_source_provider_heartbeat(
events.SourceProviderHeartbeatRequest(
providers=["sentry", "signoz"],
reason="test_provider_freshness",
run_ref="run-123",
),
AwoooPOperatorPrincipal(
operator_id="gitea-e2e-health",
auth_method="operator_api_key",
),
)
assert response["status"] == "recorded"
assert [item["provider"] for item in response["items"]] == ["sentry", "signoz"]
assert [item["event_id"] for item in response["items"]] == [
captured[0]["event_id"],
captured[1]["event_id"],
]
for call in captured:
assert call["stage"] == "heartbeat"
assert call["severity"] == "info"
assert call["title"] == "SourceProviderHeartbeat"
assert call["target_resource"] == "source-provider-ingestion"
assert call["labels"]["telegram"] == "not_sent"
assert call["labels"]["incident"] == "not_created"
assert call["payload"]["side_effects"] == {
"incident_created": False,
"telegram_sent": False,
"approval_created": False,
}