mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 12:42:34 +02:00
refactor and properly set idlewaker error in JSON output
This commit is contained in:
parent
2a54aed135
commit
b1f72620dc
3 changed files with 20 additions and 12 deletions
|
@ -26,7 +26,7 @@ type (
|
|||
stream net.Stream
|
||||
hc health.HealthChecker
|
||||
metric *metrics.Gauge
|
||||
|
||||
lastErr error
|
||||
ready atomic.Bool
|
||||
}
|
||||
)
|
||||
|
@ -54,7 +54,7 @@ func newWaker(parent task.Parent, route route.Route, rp *reverseproxy.ReversePro
|
|||
|
||||
switch {
|
||||
case route.IsAgent():
|
||||
waker.hc = monitor.NewAgentRouteMonitor(route.Agent(), hcCfg, monitor.AgentTargetFromURL(route.TargetURL()))
|
||||
waker.hc = monitor.NewAgentProxiedMonitor(route.Agent(), hcCfg, monitor.AgentTargetFromURL(route.TargetURL()))
|
||||
case rp != nil:
|
||||
waker.hc = monitor.NewHTTPHealthChecker(route.TargetURL(), hcCfg)
|
||||
case stream != nil:
|
||||
|
@ -145,12 +145,15 @@ func (w *Watcher) getStatusUpdateReady() health.Status {
|
|||
result, err := w.hc.CheckHealth()
|
||||
switch {
|
||||
case err != nil:
|
||||
w.lastErr = err
|
||||
w.ready.Store(false)
|
||||
return health.StatusError
|
||||
case result.Healthy:
|
||||
w.lastErr = nil
|
||||
w.ready.Store(true)
|
||||
return health.StatusHealthy
|
||||
default:
|
||||
w.lastErr = nil
|
||||
return health.StatusStarting
|
||||
}
|
||||
}
|
||||
|
@ -161,10 +164,15 @@ func (w *Watcher) MarshalJSON() ([]byte, error) {
|
|||
if w.hc.URL().Port() != "0" {
|
||||
url = w.hc.URL()
|
||||
}
|
||||
var detail string
|
||||
if w.lastErr != nil {
|
||||
detail = w.lastErr.Error()
|
||||
}
|
||||
return (&monitor.JSONRepresentation{
|
||||
Name: w.Name(),
|
||||
Status: w.Status(),
|
||||
Config: w.hc.Config(),
|
||||
URL: url,
|
||||
Detail: detail,
|
||||
}).MarshalJSON()
|
||||
}
|
||||
|
|
|
@ -207,7 +207,7 @@ func (r *ReveseProxyRoute) newHealthMonitor() interface {
|
|||
} {
|
||||
if a := r.Agent(); a != nil {
|
||||
target := monitor.AgentTargetFromURL(r.ProxyURL)
|
||||
return monitor.NewAgentRouteMonitor(a, r.HealthCheck, target)
|
||||
return monitor.NewAgentProxiedMonitor(a, r.HealthCheck, target)
|
||||
}
|
||||
return monitor.NewHTTPHealthMonitor(r.ProxyURL, r.HealthCheck)
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
)
|
||||
|
||||
type (
|
||||
AgentRouteMonior struct {
|
||||
AgentProxiedMonitor struct {
|
||||
agent *agentPkg.AgentConfig
|
||||
endpointURL string
|
||||
*monitor
|
||||
|
@ -48,8 +48,8 @@ func (target *AgentCheckHealthTarget) displayURL() *types.URL {
|
|||
})
|
||||
}
|
||||
|
||||
func NewAgentRouteMonitor(agent *agentPkg.AgentConfig, config *health.HealthCheckConfig, target *AgentCheckHealthTarget) *AgentRouteMonior {
|
||||
mon := &AgentRouteMonior{
|
||||
func NewAgentProxiedMonitor(agent *agentPkg.AgentConfig, config *health.HealthCheckConfig, target *AgentCheckHealthTarget) *AgentProxiedMonitor {
|
||||
mon := &AgentProxiedMonitor{
|
||||
agent: agent,
|
||||
endpointURL: agentPkg.EndpointHealth + "?" + target.buildQuery(),
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ func NewAgentRouteMonitor(agent *agentPkg.AgentConfig, config *health.HealthChec
|
|||
return mon
|
||||
}
|
||||
|
||||
func (mon *AgentRouteMonior) CheckHealth() (result *health.HealthCheckResult, err error) {
|
||||
func (mon *AgentProxiedMonitor) CheckHealth() (result *health.HealthCheckResult, err error) {
|
||||
result = new(health.HealthCheckResult)
|
||||
ctx, cancel := mon.ContextWithTimeout("timeout querying agent")
|
||||
defer cancel()
|
Loading…
Add table
Reference in a new issue