بازگشت به فهرست ATP →
سلامت سرویس

آمادگی پیام‌رسانی

GET /api/messaging/health/ مشاهده در Swagger

ATP - آمادگی پیام‌رسانی (GET /api/messaging/health/)

Endpoint

GET /api/messaging/health/

هدف آزمون

گزارش سلامت زیر سیستم messaging (RabbitMQ و backlog/exhaustion اوت‌باکس) بدون گیت کردن readiness کل API.

شرایط آزمون

  • سرویس core-api در حال اجرا باشد
  • PostgreSQL در دسترس باشد (برای شمارش outbox)

فرآیند آزمون

  1. ارسال GET به /api/messaging/health/
  2. بررسی status برابر ok یا degraded
  3. بررسی فیلدهای 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: مسیر موفق

  1. RabbitMQ در دسترس، outbox خالی
  2. GET /api/messaging/health/
  3. status=ok و checks.rabbitmq=ok

سناریو 2: RabbitMQ قطع

  1. قطع AMQP
  2. GET /api/messaging/health/
  3. HTTP 200 با status=degraded و checks.rabbitmq=degraded
  4. همزمان /api/ready/ همچنان 200 باشد اگر DB/Redis سالم‌اند

سناریو 3: outbox exhausted

  1. ایجاد OutboxEvent با status=failed
  2. GET /api/messaging/health/
  3. checks.outbox_exhausted=degraded

سناریو 4: عدم افشای secret

  1. بررسی بدنه پاسخ فاقد 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.

روال صحت‌سنجی

  1. /api/ready/ از messaging جدا است
  2. labels/metrics در /api/messaging/metrics/ فاقد workspace/case/event id هستند
  3. مرجع عملیاتی: infra/observability/MESSAGING_RUNBOOK.md

توضیحات

  • مسیر باید با پیاده‌سازی فعلی urls.py هم‌خوان باشد