package aggregate import ( "context" "net/http" "sort" "sync" "github.com/telemt/telemt-api/internal/config" ) const statsDcsPath = "stats/dcs" // FetchRadarTelemtDcs calls GET /v1/stats/dcs on each Telemt in parallel. func FetchRadarTelemtDcs(ctx context.Context, client *http.Client, parsed *config.Parsed, aliases []string) RadarTelemtDcsData { if len(aliases) == 0 { return RadarTelemtDcsData{} } rows := make([]RadarTelemtDcsServer, len(aliases)) var wg sync.WaitGroup for i, alias := range aliases { i, alias := i, alias wg.Add(1) go func() { defer wg.Done() data, meta := FetchTelemtGET[DcStatusPayload](ctx, client, parsed, alias, statsDcsPath) row := RadarTelemtDcsServer{ Alias: alias, OK: meta.OK, HTTPStatus: meta.HTTPStatus, LatencyMs: meta.LatencyMs, Error: meta.Error, Revision: meta.Revision, } if meta.OK { row.Data = &data } rows[i] = row }() } wg.Wait() sort.Slice(rows, func(i, j int) bool { return rows[i].Alias < rows[j].Alias }) return RadarTelemtDcsData{Servers: rows} }