Zimin A.N.
f0f84b1baa
docs(status): v1.0 — production LIVE на cluster.142, Альтум переехал
...
Snapshot после Phase 1-5 production stand-up done:
- prod (cluster.142): LIVE, helm rev 22 на main-4252ad93, Альтум blue/green cutover завершён
- staging (cluster.265): теперь dev environment, не consumer-facing
- v0.9 → v1.0 anchor
Что задеплоено в prod (8 commits сегодня):
- bulk close + bulk export CSV
- audit URL persistence + chips
- pagination для records list (50/page)
- WebhookE2ETest re-enabled (no-op scheduler)
- 23 новых тестов
Operational artifacts (ordinis-infra):
- k8s/kafka/cluster-prod.yaml (Kafka recovery)
- scripts/vault/{setup,populate}.sh + README
Открытые items: KafkaTopics READY=False (orphaned),
postgis-barman image mirror в prod registry, k6 prod benchmark,
real ЦУОД data integration epic.
Approval workflow v2 deferred — design doc сохранён, re-evaluate
через 1-2 месяца после observed compliance needs.
2026-05-07 15:24:03 +03:00
Zimin A.N.
81c959b7e2
docs(status): snapshot v0.9 (2026-05-06)
...
Закрыло за сутки: bundle 7→40 справочников, Альтум pull verified,
Tempo+Loki+Grafana+SLO burn rate alerts (Google SRE multi-window),
UI scope grouping + accents, INTERNAL словари visibility (rolesClaim),
CNPG 1.24→1.25.4 + spec.probes, CI helm --atomic + auto-rollback,
config-server startupProbe, 75→109 unit тестов.
Готовы к prod (manifests + runbooks): multi-instance Postgres HA,
external S3 backup, k6 benchmark setup. Block — DNS/cert prod,
S3 provider creds, real ЦУОД data.
Прогресс: 21/33 (v0.5) → 27/39 требований (v0.9). 1-2 недели до v1.
v0.5 файл оставлен как историческая запись.
2026-05-06 13:27:31 +03:00
Zimin A.N.
bcedddef71
docs(ops): SLO/SLI definitions + error budget framework
...
7 SLI с конкретными порогами и justification:
- read-api availability (99.5% v1 target)
- read-api p99 latency < 500ms target / 1s alert
- writer 5xx error rate < 1%
- outbox publish lag (≤ 50 normal, alert > 100)
- outbox DLQ size = 0 strict
- outbox publish error rate ~0
- postgres availability (99.9% v1 target)
Error budget framework для 99.5% уровня (~216 мин/мес downtime).
Burn rate alerts — TODO.
Notification routing — TODO (Slack/Telegram per severity).
Что не покрывает v1: Grafana dashboards, distributed tracing, log
aggregation, capacity planning. См. observability stack roadmap для v2.
2026-05-05 20:32:37 +03:00
Zimin A.N.
adc40aca22
docs(ops): operator runbook — kafka, outbox DLQ, db migrations + index
...
Карточки процедур для on-call. Self-contained: можно открыть в момент
инцидента без необходимости понимать всю архитектуру.
- README.md — index by symptom + быстрые гайды по 401, 500, admin-ui 502.
- kafka-restart.md — pause/unpause, replicas=0 fix, force-delete, restart
consumer'ов после Kafka up.
- outbox-dlq.md — диагностика DLQ через UI/API/SQL, типичные причины
(orphan topic, ACL, broken payload), replay через UPDATE dlq_at=NULL.
- db-migrations.md — Liquibase changelog, добавление, откат, recovery
failed migration через DELETE databasechangelog.
Vault unseal был отдельным коммитом ранее.
2026-05-05 17:26:30 +03:00
Zimin A.N.
0fb20dc8d4
docs(ops): vault unseal runbook + auto-unseal migration plan
...
Triage card для on-call: где взять unseal-keys (1Password placeholder,
уточнить с DevOps lead), как запустить script либо ручную процедуру,
что проверить после, troubleshooting типовых проблем.
Также: §7 — план миграции на auto-unseal (Transit / Yandex KMS) когда
определимся с master Vault или KMS-backend.
2026-05-05 16:56:45 +03:00
Zimin A.N.
2fc9b451e4
fix(cuod+docs): Resurs-P/Канопус/Метеор/Электро/Арктика в seed + правильный read-api путь
...
Альтум-команда обнаружила что /api/v1/dictionaries/{name}/records даёт 500
и spacecraft_codes ссылаются на несуществующий "RESURS-P-3". Оба бага мои:
1. Read-api живёт на /api/v1/{name}/records (БЕЗ /dictionaries/ префикса).
/dictionaries/* — это admin-write контроллер, у него GET-list нет.
Fix: docs/integration/altum-imaging-order.md + docs/tech/api-integration.md
обновлены с правильными URL'ами + примером ответа из live staging.
2. spacecraft seed имел только 4 КА (Terra, Sentinel-1A/2A, Кондор-ФКА),
а mission.spacecraft_codes ссылался на пустые/RESURS-P-3 — каскад в
"Заказ съёмки" не работал бы.
Fix: добавлено 10 российских КА (Ресурс-П 1-4, Канопус-В 1+5, Метеор-М 2+2-2,
Электро-Л 2, Арктика-М 1) с COSPAR designators как businessKey.
3. mission.records.json + instrument.records.json: spacecraft_codes теперь
ссылается на реально существующие COSPAR-ключи. Каскад работает:
instrument MSU-MR → spacecraft [2014-037A, 2019-038A] → Метеор-М № 2 / 2-2.
После redeploy и идемпотентного пересева:
spacecraft 14 (было 4, +10 РФ)
mission 9 (existing 9, references фиксированы)
instrument 11 (было 10, +МСУ-ГСМ Арктики)
2026-05-04 18:27:36 +03:00
Zimin A.N.
930df5b888
feat(api): Swagger UI + docs/integration для Альтума и других consumer'ов
...
Springdoc-openapi генерирует OpenAPI 3 spec из аннотаций контроллеров —
интеграторам не нужно поддерживать markdown-ТЗ синхронно с кодом.
- /swagger-ui.html (UI), /v3/api-docs (JSON), /v3/api-docs.yaml.
- OpenApiConfig: title/description/contact/servers (staging+prod+local),
bearerAuth security scheme (Keycloak JWT).
- SecurityConfig: permitAll на swagger paths.
Документация:
- docs/integration/altum-imaging-order.md — ТЗ интеграции «Заказ съёмки».
Согласованы: m2m service account через Keycloak, BFF в altum-backend
(FastAPI), 4 справочника со схемами, cascading select через
instrument.supported_*_codes, snapshot strategy для аудита.
- docs/tech/api-integration.md — общий гайд для интеграторов: auth flow,
endpoints, кэш-стратегии, bitemporal модель, current dictionaries,
cross-refs, best practices.
Скрипты codegen openapi-generator-cli работают off /v3/api-docs.
2026-05-04 15:45:09 +03:00