Files
new-api-custom/service/probe_history.go
T
cneicy a5f7b8e586
Publish Docker image (Multi-arch) / Build & push (amd64) (push) Failing after 1m40s
Release (Linux, macOS, Windows) / Linux Release (push) Failing after 42m16s
Publish Docker image (Multi-arch) / Build & push (arm64) (push) Canceled after 0s
Release (Linux, macOS, Windows) / macOS Release (push) Canceled after 0s
Release (Linux, macOS, Windows) / Windows Release (push) Canceled after 0s
Publish Docker image (Multi-arch) / Create multi-arch manifests (push) Canceled after 0s
feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
2026-09-26 04:49:11 +08:00

43 lines
1.1 KiB
Go

package service
import (
"github.com/QuantumNous/new-api/model"
"sort"
)
type ProbeHistoryPoint struct {
At int64 `json:"at"`
Status int `json:"status"`
}
func GroupProbeHistory(ids []int, tasks []model.SystemTask) []ProbeHistoryPoint {
points := []ProbeHistoryPoint{}
for _, task := range tasks {
if task.Type != model.SystemTaskTypeChannelAvailability {
continue
}
var state ChannelAvailabilityState
if task.DecodeState(&state) != nil {
continue
}
evidence := map[int]ChannelDetectionEvidence{}
for _, round := range state.Rounds {
evidence[round.ChannelID] = ChannelDetectionEvidence{At: round.At, Success: round.Success}
}
latest := int64(0)
for _, id := range ids {
latest = max(latest, evidence[id].At)
}
if latest == 0 {
continue
}
status, at := DetectionFallbackStatus(ids, evidence, latest)
points = append(points, ProbeHistoryPoint{At: at, Status: status})
}
sort.Slice(points, func(i, j int) bool { return points[i].At < points[j].At })
if len(points) > 18 {
points = points[len(points)-18:]
}
return points
}