feat: ingest HTTP 201/409 for event_id idempotency
- Validate UUID format; log created/duplicate/rejected - Tests for 201, 409, 422; update agent-integration and work-plan - Docs: neutral IDE wording (no product-specific editor names)
This commit is contained in:
@@ -44,7 +44,7 @@ $SacSpoolDir = "D:\Soft\Logs\sac-spool"
|
||||
|
||||
- `UseSAC=off` — без изменений: хотя бы один канал `NOTIFY_CHAIN` (как сейчас).
|
||||
- `UseSAC≠off` — обязательны `SAC_URL`, `SAC_API_KEY`; HTTP `GET {base}/health` OK.
|
||||
- `--check-sac` / `Test-SacConnection` — отправка `agent.test`, ожидание `202`.
|
||||
- `--check-sac` / `Test-SacConnection` — отправка `agent.test`, ожидание **HTTP 201** (повтор с тем же `event_id` — **409**, тоже успех для spool).
|
||||
|
||||
---
|
||||
|
||||
@@ -64,20 +64,31 @@ Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
|
||||
### 2.2. Ответ
|
||||
|
||||
| HTTP | Значение | `status` в теле | `created` |
|
||||
|------|----------|-----------------|-----------|
|
||||
| **201** | Событие записано впервые | `created` | `true` |
|
||||
| **409** | Тот же `event_id` уже есть (идемпотентность) | `duplicate` | `false` |
|
||||
| **422** | Ошибка JSON Schema | — | — |
|
||||
|
||||
Пример **201**:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "created",
|
||||
"event_id": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"event_id": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"created": true,
|
||||
"problem_id": null
|
||||
"sac_event_url": "https://sac.kalinamall.ru/api/v1/events/12345",
|
||||
"problem_id": null
|
||||
}
|
||||
```
|
||||
|
||||
`event_id` — обязательный **UUID** (RFC 4122), уникален глобально; в БД индекс `UNIQUE (event_id)`.
|
||||
|
||||
### 2.3. Spool при ошибке
|
||||
|
||||
1. Записать JSON в `SAC_SPOOL_DIR/{event_id}.json`.
|
||||
2. **ssh-monitor:** каждую итерацию цикла вызывается `sac_flush_spool` (до 20 файлов).
|
||||
3. После успеха (**HTTP 201** или **409**) — удалить файл из spool.
|
||||
4. Лимит размера spool (например 500 MB) — логировать WARN, не удалять без алерта.
|
||||
4. Лимит размера spool (например 500 MB) — логировать WARN, не удалять без алерта.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user