package health // Status 健康状态 type Status string const ( StatusHealthy Status = "healthy" StatusUnhealthy Status = "unhealthy" StatusDegraded Status = "degraded" ) // Check 健康检查接口 type Check interface { // Check 执行健康检查 Check() (Status, string) } // Checker 健康检查器 type Checker interface { // Register 注册健康检查 Register(name string, check Check) error // Unregister 取消注册健康检查 Unregister(name string) error // Check 执行所有健康检查 Check() (Status, map[string]CheckResult) } // CheckResult 健康检查结果 type CheckResult struct { Status Status Message string } // checker 健康检查器实现 type checker struct { checks map[string]Check } // NewChecker 创建健康检查器 func NewChecker() Checker { return &checker{ checks: make(map[string]Check), } } // Register 注册健康检查 func (c *checker) Register(name string, check Check) error { if name == "" { return NewError("check name cannot be empty") } if check == nil { return NewError("check cannot be nil") } c.checks[name] = check return nil } // Unregister 取消注册健康检查 func (c *checker) Unregister(name string) error { delete(c.checks, name) return nil } // Check 执行所有健康检查 func (c *checker) Check() (Status, map[string]CheckResult) { results := make(map[string]CheckResult) overallStatus := StatusHealthy for name, check := range c.checks { status, message := check.Check() results[name] = CheckResult{ Status: status, Message: message, } // 确定整体状态 if status == StatusUnhealthy { overallStatus = StatusUnhealthy } else if status == StatusDegraded && overallStatus == StatusHealthy { overallStatus = StatusDegraded } } return overallStatus, results }