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 }