chore: initial import
This commit is contained in:
62
internal/handler/health_handler.go
Normal file
62
internal/handler/health_handler.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/company/ai-ops/internal/database"
|
||||
"github.com/company/ai-ops/internal/redis"
|
||||
"github.com/company/ai-ops/pkg/response"
|
||||
)
|
||||
|
||||
// HealthHandler 是健康检查 HTTP 处理器
|
||||
type HealthHandler struct{}
|
||||
|
||||
func NewHealthHandler() *HealthHandler {
|
||||
return &HealthHandler{}
|
||||
}
|
||||
|
||||
func (h *HealthHandler) RegisterRoutes(mux *http.ServeMux) {
|
||||
mux.HandleFunc("GET /actuator/health", h.Health)
|
||||
mux.HandleFunc("GET /actuator/health/live", h.Live)
|
||||
mux.HandleFunc("GET /actuator/health/ready", h.Ready)
|
||||
}
|
||||
|
||||
func (h *HealthHandler) Health(w http.ResponseWriter, r *http.Request) {
|
||||
response.Success(w, map[string]any{
|
||||
"status": "UP",
|
||||
"components": map[string]any{
|
||||
"self": map[string]any{"status": "UP"},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (h *HealthHandler) Live(w http.ResponseWriter, r *http.Request) {
|
||||
response.Success(w, map[string]any{"status": "UP"})
|
||||
}
|
||||
|
||||
func (h *HealthHandler) Ready(w http.ResponseWriter, r *http.Request) {
|
||||
status := "UP"
|
||||
components := map[string]any{
|
||||
"self": map[string]any{"status": "UP"},
|
||||
}
|
||||
|
||||
// 检查 DB 连接
|
||||
if database.Pool == nil {
|
||||
status = "DOWN"
|
||||
components["database"] = map[string]any{"status": "DOWN", "detail": "not initialized"}
|
||||
} else {
|
||||
components["database"] = map[string]any{"status": "UP"}
|
||||
}
|
||||
|
||||
// 检查 Redis 连接
|
||||
if redis.Client == nil {
|
||||
components["redis"] = map[string]any{"status": "DOWN", "detail": "not initialized"}
|
||||
} else {
|
||||
components["redis"] = map[string]any{"status": "UP"}
|
||||
}
|
||||
|
||||
if status == "DOWN" {
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
}
|
||||
response.Success(w, map[string]any{"status": status, "components": components})
|
||||
}
|
||||
Reference in New Issue
Block a user