fix: follow live request results and prioritize usable groups
This commit is contained in:
1 parent
5152a4080e
commit
d09216bbde
12 files changed
+257
-86
No files matched your search
+26
-14
@@ -126,7 +126,7 @@ func currentGroupMonitors(ctx context.Context, admin bool) ([]UptimeGroupResult,
|
||||
groupCacheSnapshot.updated = now
|
||||
groupCacheSnapshot.channels = string(encoded)
|
||||
}
|
||||
successes := perfmetrics.LatestUserSuccess(ctx, order)
|
||||
userResults := perfmetrics.LatestUserResults(ctx, order)
|
||||
monitors := make([]Monitor, 0, len(order))
|
||||
for _, group := range order {
|
||||
monitor := Monitor{ID: model.DetectionSecretHash(group)[:16], Name: group, Status: -1, Models: models[group]}
|
||||
@@ -158,16 +158,8 @@ func currentGroupMonitors(ctx context.Context, admin bool) ([]UptimeGroupResult,
|
||||
monitor.Metrics.Group = monitor.Name
|
||||
}
|
||||
monitor.Pelican = detections[group].Pelican
|
||||
monitor.StatusSource = "requests"
|
||||
if monitor.ChannelDisabled {
|
||||
monitor.StatusSource = "disabled"
|
||||
} else if monitor.Status < 0 {
|
||||
monitor.Status = detections[group].Status
|
||||
monitor.StatusSource = "detection"
|
||||
monitor.StatusCheckedAt = detections[group].At
|
||||
}
|
||||
monitor.ProbeHistory = detections[group].ProbeHistory
|
||||
applyUserSuccess(&monitor, successes[group], detections[group].At, now.Unix())
|
||||
applyCurrentStatus(&monitor, userResults[group], now.Unix())
|
||||
monitors = append(monitors, monitor)
|
||||
}
|
||||
return []UptimeGroupResult{{CategoryName: "Groups", Monitors: monitors}}, nil
|
||||
@@ -196,11 +188,31 @@ func requestStatus(rate float64) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func applyUserSuccess(monitor *Monitor, success, probe, now int64) {
|
||||
if !monitor.ChannelDisabled && success > 0 && success >= now-900 && success >= probe {
|
||||
monitor.Status = 1
|
||||
func applyCurrentStatus(monitor *Monitor, result perfmetrics.UserRequestResult, now int64) {
|
||||
monitor.Status, monitor.StatusCheckedAt = -1, 0
|
||||
monitor.StatusSource = "detection"
|
||||
if monitor.ChannelDisabled {
|
||||
monitor.Status = 0
|
||||
monitor.StatusSource = "disabled"
|
||||
return
|
||||
}
|
||||
// Current availability uses dedicated probes, not quality tests or hourly
|
||||
// request ratios. Allow one missed 15-minute probe before evidence expires.
|
||||
for _, probe := range monitor.ProbeHistory {
|
||||
if probe.At > 0 && probe.At >= now-1800 && probe.At <= now && probe.At >= monitor.StatusCheckedAt {
|
||||
monitor.Status = probe.Status
|
||||
monitor.StatusCheckedAt = probe.At
|
||||
}
|
||||
}
|
||||
// The latest real user result is stronger evidence than synthetic checks
|
||||
// on another member channel, whether it succeeded or failed.
|
||||
if at := result.At / 1000; at > 0 && at >= now-900 && at <= now {
|
||||
monitor.Status = 0
|
||||
if result.Success {
|
||||
monitor.Status = 1
|
||||
}
|
||||
monitor.StatusSource = "requests"
|
||||
monitor.StatusCheckedAt = success
|
||||
monitor.StatusCheckedAt = at
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user