2019-08-06 19:53:14 +03:00
|
|
|
// Package monitor monitors service health
|
|
|
|
package monitor
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
StatusUnknown StatusCode = iota
|
|
|
|
StatusRunning
|
|
|
|
StatusFailed
|
|
|
|
)
|
|
|
|
|
|
|
|
type StatusCode int
|
|
|
|
|
|
|
|
// Monitor monitors a service and reaps dead instances
|
|
|
|
type Monitor interface {
|
2019-08-06 21:02:57 +03:00
|
|
|
// Reap a service and stop monitoring
|
|
|
|
Reap(service string) error
|
2019-08-06 19:53:14 +03:00
|
|
|
// Status of the service
|
|
|
|
Status(service string) (Status, error)
|
|
|
|
// Watch starts watching the service
|
|
|
|
Watch(service string) error
|
2019-08-06 21:02:57 +03:00
|
|
|
// Run the monitor to watch all services
|
|
|
|
Run() error
|
2019-08-06 19:53:14 +03:00
|
|
|
// Stop monitoring
|
|
|
|
Stop() error
|
|
|
|
}
|
|
|
|
|
|
|
|
type Status struct {
|
|
|
|
Code StatusCode
|
|
|
|
Info string
|
|
|
|
Error string
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
ErrNotWatching = errors.New("not watching")
|
|
|
|
)
|
|
|
|
|
|
|
|
// NewMonitor returns a new monitor
|
|
|
|
func NewMonitor(opts ...Option) Monitor {
|
|
|
|
return newMonitor(opts...)
|
|
|
|
}
|