You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.1 KiB
64 lines
1.1 KiB
2 years ago
|
package health
|
||
|
|
||
|
import (
|
||
|
"golang.org/x/net/context"
|
||
|
)
|
||
|
|
||
|
type CheckerMgr struct {
|
||
|
checkers map[string]checker
|
||
|
ctx context.Context
|
||
|
cancel func()
|
||
|
watchers []chan string
|
||
|
}
|
||
|
|
||
|
func New(ctx context.Context) *CheckerMgr {
|
||
|
c, cancel := context.WithCancel(ctx)
|
||
|
return &CheckerMgr{
|
||
|
checkers: make(map[string]checker),
|
||
|
ctx: c,
|
||
|
cancel: cancel,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *CheckerMgr) Start() {
|
||
|
for _, v := range c.checkers {
|
||
|
go func() {
|
||
|
v.run(c.ctx)
|
||
|
}()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *CheckerMgr) Stop() {
|
||
|
c.cancel()
|
||
|
}
|
||
|
|
||
|
type StatusResult struct {
|
||
|
Name string
|
||
|
CheckerStatus
|
||
|
}
|
||
|
|
||
|
// GetStatus
|
||
|
//
|
||
|
// if name is nil return all status
|
||
|
func (c *CheckerMgr) GetStatus(name ...string) []StatusResult {
|
||
|
status := make([]StatusResult, 0, len(name))
|
||
|
if len(name) == 0 {
|
||
|
for _, v := range c.checkers {
|
||
|
status = append(status, StatusResult{
|
||
|
Name: v.Name,
|
||
|
CheckerStatus: v.getStatus(),
|
||
|
})
|
||
|
}
|
||
|
} else {
|
||
|
for _, n := range name {
|
||
|
if v, ok := c.checkers[n]; ok {
|
||
|
status = append(status, StatusResult{
|
||
|
Name: v.Name,
|
||
|
CheckerStatus: v.getStatus(),
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return status
|
||
|
}
|