Grendgi 15a8804307 db: ConnectWithRetry для k8s rollout race
Telephony раньше имел свой ConnectWithRetry (1s→2s→4s→8s, cap 15s,
totalTimeout 2 мин), чтобы пережить старт pod'а до готовности postgres
StatefulSet'а. При миграции на portal-common.db.ConnectURL retry потерян,
pod CrashLoopBackoff с noisy логами. Добавил ConnectWithRetry(Cfg)
с тем же backoff'ом — telephony и любой сервис, которому нужна
in-process устойчивость, может использовать вместо ConnectURL.
2026-05-20 14:18:03 +03:00

portal-common

Shared Go-библиотека для микросервисов портала.

Состав

  • db/ — pgxpool init + slow-query tracer. Заменяет идентичный код в 9 сервисах.
  • middleware/InternalAuth (X-Internal-Key + X-User-*) + хелперы для кастомных заголовков.
  • portal/ — HTTP-клиент portal-сервиса: directory с кэшем+stale fallback, notifications, deactivate user.

Использование

В каждом сервисе:

import (
    "gitea.estateliga.work/admin/portal-common/db"
    "gitea.estateliga.work/admin/portal-common/middleware"
    "gitea.estateliga.work/admin/portal-common/portal"
)

pool, _ := db.ConnectURL(cfg.DatabaseURL)

r := chi.NewRouter()
r.Use(middleware.InternalAuth(cfg.InternalAPIKey))

portalCli := portal.New(cfg.PortalBaseURL, cfg.PortalAPIKey)

Dev-режим (без push в Gitea)

В go.mod сервиса добавить replace:

replace gitea.estateliga.work/admin/portal-common => ../portal-common

Когда библиотека стабилизируется, заменить на pinned тег:

require gitea.estateliga.work/admin/portal-common v0.1.0

Зачем

До этого 9 сервисов копировали один в один: pgxpool init, slow-query tracer (500ms threshold), InternalAuth middleware. Tweak'ать tuning централизованно было невозможно. Сейчас изменения идут в одном репо, сервисы пересобираются.

Description
Shared Go library for portal microservices
Readme 59 KiB
Languages
Go 100%