feat: design a separate package for health check

This commit is contained in:
2026-02-15 11:56:12 +01:00
parent 8f30fe7412
commit a3ed6685de
5 changed files with 572 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
package health
import (
"context"
"sync"
"time"
)
type CompositeChecker struct {
checkers []Checker
}
func NewCompositeChecker(checkers ...Checker) *CompositeChecker {
return &CompositeChecker{
checkers: checkers,
}
}
func (c *CompositeChecker) AddChecker(checker Checker) {
c.checkers = append(c.checkers, checker)
}
func (c *CompositeChecker) Check(ctx context.Context) OverallResult {
results := make(map[string]Result)
var mu sync.Mutex
var wg sync.WaitGroup
for _, checker := range c.checkers {
wg.Add(1)
go func(ch Checker) {
defer wg.Done()
result := ch.Check(ctx)
mu.Lock()
results[ch.Name()] = result
mu.Unlock()
}(checker)
}
wg.Wait()
return OverallResult{
Status: determineOverallStatus(results),
Timestamp: time.Now().UTC(),
Services: results,
}
}
func (c *CompositeChecker) CheckWithVersion(ctx context.Context, version string) OverallResult {
result := c.Check(ctx)
result.Version = version
return result
}