MCPcopy Create free account
hub / github.com/cortexproject/cortex / MergeResponse

Function MergeResponse

pkg/querier/tripperware/merge.go:41–108  ·  view source on GitHub ↗

MergeResponse merges multiple Response into one.

(ctx context.Context, sumStats bool, req Request, responses ...Response)

Source from the content-addressed store, hash-verified

39
40// MergeResponse merges multiple Response into one.
41func MergeResponse(ctx context.Context, sumStats bool, req Request, responses ...Response) (Response, error) {
42 if len(responses) == 1 {
43 return responses[0], nil
44 }
45 promResponses := make([]*PrometheusResponse, 0, len(responses))
46 warnings := make([][]string, 0, len(responses))
47 infos := make([][]string, 0, len(responses))
48 for _, resp := range responses {
49 promResponses = append(promResponses, resp.(*PrometheusResponse))
50 if w := resp.(*PrometheusResponse).Warnings; w != nil {
51 warnings = append(warnings, w)
52 }
53 if i := resp.(*PrometheusResponse).Infos; i != nil {
54 infos = append(infos, i)
55 }
56 }
57
58 // Check if it is a range query. Range query passed req as nil since
59 // we only use request when result type is a vector.
60 if req == nil {
61 sort.Sort(byFirstTime(promResponses))
62 }
63 var data PrometheusData
64 // For now, we only shard queries that returns a vector.
65 switch promResponses[0].Data.ResultType {
66 case model.ValVector.String():
67 v, err := vectorMerge(ctx, req, promResponses)
68 if err != nil {
69 return nil, err
70 }
71 data = PrometheusData{
72 ResultType: model.ValVector.String(),
73 Result: PrometheusQueryResult{
74 Result: &PrometheusQueryResult_Vector{
75 Vector: v,
76 },
77 },
78 Stats: statsMerge(sumStats, promResponses),
79 }
80 case model.ValMatrix.String():
81 sampleStreams, err := matrixMerge(ctx, promResponses)
82 if err != nil {
83 return nil, err
84 }
85
86 data = PrometheusData{
87 ResultType: model.ValMatrix.String(),
88 Result: PrometheusQueryResult{
89 Result: &PrometheusQueryResult_Matrix{
90 Matrix: &Matrix{
91 SampleStreams: sampleStreams,
92 },
93 },
94 },
95 Stats: statsMerge(sumStats, promResponses),
96 }
97 default:
98 return nil, fmt.Errorf("unexpected result type: %s", promResponses[0].Data.ResultType)

Callers 2

MergeResponseMethod · 0.92
MergeResponseMethod · 0.92

Calls 5

byFirstTimeTypeAlias · 0.85
vectorMergeFunction · 0.85
statsMergeFunction · 0.85
matrixMergeFunction · 0.85
StringMethod · 0.65

Tested by

no test coverage detected