diff --git a/apps/issues/d8-ugmk-prod/backend-s3.yaml b/apps/issues/d8-ugmk-prod/backend-s3.yaml index 192c19e..d45299b 100644 --- a/apps/issues/d8-ugmk-prod/backend-s3.yaml +++ b/apps/issues/d8-ugmk-prod/backend-s3.yaml @@ -82,13 +82,19 @@ spec: value: _default: "http://backend-svc.django.svc.cluster.local:80" + # INFRA-3005: namespace workflow в УГМК не существует, processing + # поставляется как backend-svc в namespace processing + # (apps/processing/base/api.yaml:74 + d8-ugmk-prod/namespace.yaml). + # Формат — базовый URL без пути и без слэша на конце: код сам + # добавляет /internal/v1/... (src/issues/mailing.py:122, + # src/api/services.py:616). - name: WORKFLOWS_HOST value: - _default: "http://backend-svc.workflow.svc.cluster.local:80" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: WORKFLOWS_URL value: - _default: "http://backend-svc.workflow.svc.cluster.local:80" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: RESOURCES_API_HOST value: @@ -105,9 +111,12 @@ spec: value: _default: "https://sarex.uralmine.com" + # Реальное имя сервиса — backend-api-svc (apps/documentations/base/api.yaml:74). + # Было documentations-api-svc — такого сервиса нет; не стреляло только + # потому, что production-configmap перетирает эту переменную хардкодом. - name: DOCUMENTATIONS_URL value: - _default: "http://documentations-api-svc.documentations.svc.cluster.local:80" + _default: "http://backend-api-svc.documentations.svc.cluster.local:80" - name: DJANGO_SETTINGS_MODULE value: diff --git a/apps/issues/d8-ugmk-prod/celery-s3.yaml b/apps/issues/d8-ugmk-prod/celery-s3.yaml index c795536..6de7672 100644 --- a/apps/issues/d8-ugmk-prod/celery-s3.yaml +++ b/apps/issues/d8-ugmk-prod/celery-s3.yaml @@ -82,13 +82,15 @@ spec: value: _default: "http://backend-svc.django.svc.cluster.local:80" + # INFRA-3005: именно этот хост ронял celery-задачу экспорта в Excel + # и все уведомления. См. backend-s3.yaml и production-configmap.yaml. - name: WORKFLOWS_HOST value: - _default: "http://workflows-api-service.workflow.svc.cluster.local:8000" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: WORKFLOWS_URL value: - _default: "http://workflows-api-service.workflow.svc.cluster.local:8000" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: RESOURCES_API_HOST value: diff --git a/apps/issues/d8-ugmk-prod/kafka-app.yaml b/apps/issues/d8-ugmk-prod/kafka-app.yaml index 7884c3b..e9bf106 100644 --- a/apps/issues/d8-ugmk-prod/kafka-app.yaml +++ b/apps/issues/d8-ugmk-prod/kafka-app.yaml @@ -153,13 +153,14 @@ spec: value: _default: "http://backend-svc.django.svc.cluster.local:80" + # INFRA-3005: см. backend-s3.yaml и production-configmap.yaml. - name: WORKFLOWS_HOST value: - _default: "http://backend-svc.workflow.svc.cluster.local:80" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: WORKFLOWS_URL value: - _default: "http://backend-svc.workflow.svc.cluster.local:80" + _default: "http://backend-svc.processing.svc.cluster.local:80" - name: RESOURCES_API_HOST value: @@ -174,9 +175,10 @@ spec: value: _default: "https://sarex.uralmine.com" + # Реальное имя сервиса — backend-api-svc, см. backend-s3.yaml. - name: DOCUMENTATIONS_URL value: - _default: "http://documentations-api-svc.documentations.svc.cluster.local:80" + _default: "http://backend-api-svc.documentations.svc.cluster.local:80" - name: DJANGO_SETTINGS_MODULE value: diff --git a/apps/issues/d8-ugmk-prod/production-configmap.yaml b/apps/issues/d8-ugmk-prod/production-configmap.yaml index b2a73fa..024cef6 100644 --- a/apps/issues/d8-ugmk-prod/production-configmap.yaml +++ b/apps/issues/d8-ugmk-prod/production-configmap.yaml @@ -3,23 +3,26 @@ # поэтому здесь продублировано всё содержимое из # apps/issues/base/production-configmap.yaml (та же ловушка, что с envs). # -# Зачем нужен этот патч (INFRA-3005): -# в base зашит хардкодом SAREX_API = "https://srx.wb.ru". production.py делает -# `from .base import *`, а затем переприсваивает значения — поэтому ConfigMap -# ПОБЕЖДАЕТ env-переменные из HelmRelease, и правка SAREX_API в оверлее +# Зачем нужен этот патч: +# production.py делает `from .base import *` (там всё через os.getenv), а затем +# переприсваивает часть значений ХАРДКОДОМ — поэтому для этих переменных +# ConfigMap ПОБЕЖДАЕТ env из HelmRelease, и правка env в оверлее # backend-s3.yaml/celery-s3.yaml сама по себе ни на что не влияет. # -# В issues-backend settings.SAREX_API используется в блокирующих вызовах: -# - src/issues/models.py:270 Issue.get_user_data() — requests.get БЕЗ timeout -# - src/api/services.py:149 get_session() — httpx.Client(timeout=600) -# → get_fresh_token() → синхронный экспорт в Excel -# (src/api/export/data_collector.py:285) -# Из закрытого контура УГМК srx.wb.ru недоступен, поэтому синхронный экспорт -# замечаний в Excel (≤800 замечаний без вложений, см. export.py:47) висел -# до таймаута 600 с. +# INFRA-3005 (основная причина зависания экспорта в Excel): +# в base хардкодом WORKFLOWS_HOST/WORKFLOWS_URL = workflows-api-service.workflow +# — такого сервиса в УГМК нет. celery собирает xlsx, затем +# ExportFinishedNotification → issues/mailing.py:122 делает POST на +# {WORKFLOWS_HOST}/internal/v1/companies/{id}/workflows и падает с +# ConnectionError (Name or service not known) — задача фейлится, фронт не +# получает завершения и крутит загрузку бесконечно. Тем же путём с 26.08 +# падали ВСЕ уведомления (send_notification_on_create/on_update/ +# to_new_responsible/on_bulk_update, ~1770 ошибок). # # Отличия от base: -# - SAREX_API → https://sarex.uralmine.com +# - WORKFLOWS_HOST / WORKFLOWS_URL → backend-svc.processing (через os.getenv, +# чтобы env из оверлея снова начал работать) +# - SAREX_API → https://sarex.uralmine.com (в base зашит https://srx.wb.ru) # - CORS/CSRF origins → https://sarex.uralmine.com (в base только lk.srx.wb.ru) # - убраны хардкоды KAFKA_USERNAME/KAFKA_PASSWORD/DJANGO_TOKEN и чужой # дефолт KAFKA_HOST: в УГМК всё это приходит из Vault @@ -71,8 +74,15 @@ data: # ----------------------------------------------------------------------------- # EXTERNAL SERVICES END - WORKFLOWS_HOST = "http://workflows-api-service.workflow.svc.cluster.local:8000" - WORKFLOWS_URL = "http://workflows-api-service.workflow.svc.cluster.local:8000" + # INFRA-3005: в base здесь хардкод workflows-api-service.workflow — такого + # сервиса в УГМК нет (DNS: "Name or service not known"), из-за чего падал + # POST {WORKFLOWS_HOST}/internal/v1/companies/{id}/workflows в + # issues/mailing.py:122 (WorkflowsMailer) — а это и рассылка уведомлений, + # и финальный шаг celery-задачи экспорта в Excel. + # В УГМК workflows (processing) живёт как backend-svc в namespace processing. + WORKFLOWS_HOST = os.getenv("WORKFLOWS_HOST", "http://backend-svc.processing.svc.cluster.local:80") + WORKFLOWS_URL = os.getenv("WORKFLOWS_URL", "http://backend-svc.processing.svc.cluster.local:80") + # backend-api-svc — реальное имя сервиса documentations (base/api.yaml:74). DOCUMENTATIONS_URL = "http://backend-api-svc.documentations.svc.cluster.local:80" RESOURCES_API_HOST = os.getenv("RESOURCES_API_HOST", default="http://resources-service.resources.svc.cluster:8000") KAFKA_HOST = os.getenv("KAFKA_HOST") @@ -149,7 +159,7 @@ data: "PUT", ] - SAREX_API = "https://sarex.uralmine.com" + SAREX_API = os.getenv("SAREX_API", "https://sarex.uralmine.com") AERO_PUBLIC_HOST = os.getenv("AERO_PUBLIC_HOST", default=SAREX_API)