| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // webx/health_handle.go
- package health
-
- import (
- "log"
- "time"
-
- "git.x2erp.com/qdy/go-base/config"
- "git.x2erp.com/qdy/go-base/logger"
- "git.x2erp.com/qdy/go-base/webx/router"
- )
-
- // HealthResponse 健康检查响应
- type HealthResponse struct {
- Status string `json:"status"`
- Service string `json:"service"`
- Version string `json:"version,omitempty"`
- Env string `json:"env,omitempty"`
- Message string `json:"message,omitempty"`
- Timestamp string `json:"timestamp,omitempty"`
- Data map[string]interface{} `json:"data,omitempty"`
- }
-
- // RegisterDefaultHealthCheck 注册默认健康检查路由(带详细日志)
- func RegisterDefaultHealthCheck(ws *router.RouterService, serviceName string) {
- if serviceName == "" {
- cfg := config.GetConfig()
- serviceName = cfg.GetAppName()
- if serviceName == "" {
- serviceName = "unknown-service"
- }
- }
-
- log.Printf("注册健康检查路由,服务名: %s", serviceName)
-
- // 健康检查(带详细日志)
- ws.GET("/health", func() (HealthResponse, error) {
- log.Printf("健康检查被调用: /health")
-
- cfg := config.GetConfig()
- response := HealthResponse{
- Status: "ok",
- Service: serviceName,
- Version: cfg.GetAppVersion(),
- Env: cfg.GetAppEnv(),
- Timestamp: time.Now().Format(time.RFC3339),
- }
-
- log.Printf("健康检查响应: %+v", response)
- return response, nil
- }).Desc("健康检查").Register()
-
- // 就绪检查
- ws.GET("/health/ready", func() (HealthResponse, error) {
- log.Printf("就绪检查被调用: /health/ready")
-
- return HealthResponse{
- Status: "ready",
- Service: serviceName,
- Timestamp: time.Now().Format(time.RFC3339),
- }, nil
- }).Desc("就绪检查").Register()
-
- // 存活检查
- ws.GET("/health/live", func() (HealthResponse, error) {
- log.Printf("存活检查被调用: /health/live")
-
- return HealthResponse{
- Status: "alive",
- Service: serviceName,
- Timestamp: time.Now().Format(time.RFC3339),
- }, nil
- }).Desc("存活检查").Register()
-
- // 服务信息
- ws.GET("/health/info", func() (map[string]interface{}, error) {
- log.Printf("服务信息被调用: /health/info")
-
- cfg := config.GetConfig()
- response := map[string]interface{}{
- "service": serviceName,
- "version": cfg.GetAppVersion(),
- "environment": cfg.GetAppEnv(),
- "timestamp": time.Now().Format(time.RFC3339),
- "endpoints": map[string]string{
- "health": "/health",
- "ready": "/health/ready",
- "live": "/health/live",
- "info": "/health/info",
- },
- "config_info": map[string]string{
- "app_name": cfg.GetAppName(),
- "app_version": cfg.GetAppVersion(),
- "app_env": cfg.GetAppEnv(),
- },
- }
-
- logger.Debug("服务信息响应: %+v", response)
- return response, nil
- }).Desc("服务信息").Register()
-
- }
-
- // RegisterConsulHealthCheck 注册Consul兼容的健康检查
- func RegisterConsulHealthCheck(ws *router.RouterService) {
- log.Printf("注册Consul兼容健康检查路由")
-
- // Consul需要的健康检查端点(返回text/plain)
- ws.GET("/health", func() ([]byte, error) {
- //log.Printf("Consul健康检查被调用: /health")
- //log.Printf("返回 'OK' 给Consul")
- return []byte("OK"), nil
- }).Desc("Consul健康检查").Register()
-
- // Consul详细状态检查
- ws.GET("/health/consul", func() (map[string]interface{}, error) {
- //log.Printf("Consul状态检查被调用: /health/consul")
-
- cfg := config.GetConfig()
- response := map[string]interface{}{
- "status": "passing",
- "service": cfg.GetAppName(),
- "output": "Service is healthy",
- "checks": map[string]interface{}{
- "service:health": map[string]string{
- "status": "passing",
- },
- },
- }
-
- //log.Printf("Consul健康状态响应: %+v", response)
- return response, nil
- }).Desc("Consul健康状态").Register()
- }
-
- // RegisterAllHealthChecks 注册所有健康检查(推荐使用)
- func RegisterAllHealthChecks(ws *router.RouterService, serviceName string) {
- log.Printf("开始注册所有健康检查路由...")
-
- // 注册默认健康检查
- RegisterDefaultHealthCheck(ws, serviceName)
-
- // 注册Consul兼容检查
- RegisterConsulHealthCheck(ws)
-
- // 添加一个简单的ping端点(很多监控系统需要)
- ws.GET("/ping", func() (map[string]interface{}, error) {
- logger.Debug("Ping端点被调用: /ping")
- return map[string]interface{}{
- "ping": "pong",
- "time": time.Now().Unix(),
- "service": serviceName,
- }, nil
- }).Desc("简单Ping检查").Register()
-
- log.Printf("所有健康检查路由注册完成")
- }
|