v2fly/features/routing/health.go

52 lines
1.8 KiB
Go

package routing
import "time"
// HealthChecker is the interface for health checkers
type HealthChecker interface {
// StartScheduler starts the check scheduler
StartScheduler(selector func() ([]string, error))
// StopScheduler stops the check scheduler
StopScheduler()
// Check start the health checking for given tags.
Check(tags []string) error
}
// OutboundInfo holds information of an outbound
type OutboundInfo struct {
Tag string // Tag of the outbound
Values []string // Information of the outbound, which can be different between strategies, like health ping RTT
}
// StrategyInfo holds strategy running information, like selected handlers and others
type StrategyInfo struct {
Settings []string // Strategy settings
ValueTitles []string // Value titles of OutboundInfo.Values
Selects []*OutboundInfo // Selects of the strategy
Others []*OutboundInfo // Other outbounds
}
// BalancingOverrideInfo holds balancing override information
type BalancingOverrideInfo struct {
Until time.Time
Selects []string
}
// BalancerInfo holds information of a balancer
type BalancerInfo struct {
Tag string // Tag of the balancer
Override *BalancingOverrideInfo
Strategy *StrategyInfo // Strategy and its running information
}
// RouterChecker represents a router that is able to perform checks for its balancers, and get statistics.
type RouterChecker interface {
// CheckHanlders performs a health check for specified outbound hanlders.
CheckHanlders(tags []string) error
// CheckBalancers performs health checks for specified balancers,
// if not specified, check them all.
CheckBalancers(tags []string) error
// GetBalancersInfo get health info of specific balancer, if balancer not specified, get all
GetBalancersInfo(tags []string) ([]*BalancerInfo, error)
}