/
advanceddev
/
license-server
Обзор
Документация
Войти
/
advanceddev
/
license-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
2
CI/CD
Аналитика
Безопасность
master
internal/handler/health_handler.go
58 строк
1 KB
advanceddev
first_commit
09 авг 2026, 20:04
Не верифицирован
09 авг 2026, 20:04
1326ca6
Код
Авторство
О чём код?
// Package handler -- package handler import ( "context" "encoding/json" "net/http" "time" "github.com/jackc/pgx/v5/pgxpool" "github.com/redis/go-redis/v9" ) // HealthHandler - обработчик проверки статуса сервиса type HealthHandler struct { db *pgxpool.Pool redis *redis.Client } // NewHealthHandler - конструктор обработчика проверки статуса сервиса func NewHealthHandler(db *pgxpool.Pool, redis *redis.Client) *HealthHandler { return &HealthHandler{db: db, redis: redis} } // Check - проверка статуса сервиса func (h *HealthHandler) Check(w http.ResponseWriter, r *http.Request) { ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second) defer cancel() status := "ok" code := http.StatusOK checks := map[string]string{} if err := h.db.Ping(ctx); err != nil { status = "degraded" checks["postgres"] = err.Error() } else { checks["postgres"] = "ok" } if err := h.redis.Ping(ctx).Err(); err != nil { status = "degraded" checks["redis"] = err.Error() } else { checks["redis"] = "ok" } if status != "ok" { code = http.StatusServiceUnavailable } w.Header().Set("Content-Type", "application/json") w.WriteHeader(code) json.NewEncoder(w).Encode(map[string]any{ "status": status, "checks": checks, }) }