ATP - آمادگی پیامرسانی (GET /api/messaging/health/)
Endpoint
GET /api/messaging/health/
هدف آزمون
گزارش سلامت زیر سیستم messaging (RabbitMQ و backlog/exhaustion اوتباکس) بدون گیت کردن readiness کل API.
شرایط آزمون
- سرویس core-api در حال اجرا باشد
- PostgreSQL در دسترس باشد (برای شمارش outbox)
فرآیند آزمون
- ارسال GET به
/api/messaging/health/ - بررسی
statusبرابرokیاdegraded - بررسی فیلدهای
checksوsummaryبدون افشای secrets / URLهای AMQP کامل
معرفی ویژگی
این endpoint جدا از /api/ready/ است. قطع موقت RabbitMQ نباید readiness کل Core را 503 کند؛ اوتباکس تراکنشی outage محدود را جذب میکند.
- checks.rabbitmq:
ok|degraded - checks.outbox_exhausted: هر outbox failed/exhausted →
degraded - checks.outbox_backlog_age: سن قدیمیترین pending بالاتر از SLA →
degraded - بدون auth (مانند health/ready)
سناریوی آزمون
سناریو 1: مسیر موفق
- RabbitMQ در دسترس، outbox خالی
- GET
/api/messaging/health/ status=okوchecks.rabbitmq=ok
سناریو 2: RabbitMQ قطع
- قطع AMQP
- GET
/api/messaging/health/ - HTTP 200 با
status=degradedوchecks.rabbitmq=degraded - همزمان
/api/ready/همچنان 200 باشد اگر DB/Redis سالماند
سناریو 3: outbox exhausted
- ایجاد OutboxEvent با status=failed
- GET
/api/messaging/health/ checks.outbox_exhausted=degraded
سناریو 4: عدم افشای secret
- بررسی بدنه پاسخ فاقد password / amqp credentials باشد
قالب API
| مولفه | نوع | نوع داده | اجباری | توضیحات |
|---|---|---|---|---|
| — | — | — | — | بدون پارامتر ورودی |
Swagger
get:
summary: آمادگی پیامرسانی
responses:
200:
description: عملیات موفق
401:
description: احراز هویت نامعتبر یا ناقص
نمونه ورودی
curl -X GET "http://localhost:8000/api/messaging/health/"
نمونه خروجی
{
"status": "degraded",
"checks": {
"rabbitmq": "degraded",
"outbox_exhausted": "ok",
"outbox_backlog_age": "ok"
},
"summary": {
"pending_outbox": 3,
"failed_outbox": 0,
"oldest_unpublished_age_seconds": 12.5,
"publisher_last_success_at": null
}
}
Status Codes
- 200: همیشه (حتی در حالت degraded) — این endpoint readiness نیست
نتیجه مورد انتظار
پاسخ JSON با status و checks/summary بدون افشای credential.
روال صحتسنجی
/api/ready/از messaging جدا است- labels/metrics در
/api/messaging/metrics/فاقد workspace/case/event id هستند - مرجع عملیاتی:
infra/observability/MESSAGING_RUNBOOK.md
توضیحات
- مسیر باید با پیادهسازی فعلی urls.py همخوان باشد