MCPcopy Index your code
hub / github.com/cortexproject/cortex / Decode

Method Decode

pkg/ruler/frontend_decoder.go:35–73  ·  view source on GitHub ↗
(body []byte)

Source from the content-addressed store, hash-verified

33}
34
35func (j JsonDecoder) Decode(body []byte) (promql.Vector, Warnings, error) {
36 var response api.Response
37
38 if err := json.NewDecoder(bytes.NewReader(body)).Decode(&response); err != nil {
39 return nil, nil, err
40 }
41 if response.Status == statusError {
42 return nil, response.Warnings, fmt.Errorf("failed to execute query with error: %s", response.Error)
43 }
44 data := struct {
45 Type model.ValueType `json:"resultType"`
46 Result json.RawMessage `json:"result"`
47 }{}
48
49 if responseDataBytes, err := json.Marshal(response.Data); err != nil {
50 return nil, response.Warnings, err
51 } else {
52 if err = json.Unmarshal(responseDataBytes, &data); err != nil {
53 return nil, response.Warnings, err
54 }
55 }
56
57 switch data.Type {
58 case model.ValScalar:
59 var scalar model.Scalar
60 if err := json.Unmarshal(data.Result, &scalar); err != nil {
61 return nil, nil, err
62 }
63 return scalarToPromQLVector(scalar), response.Warnings, nil
64 case model.ValVector:
65 var vector model.Vector
66 if err := json.Unmarshal(data.Result, &vector); err != nil {
67 return nil, nil, err
68 }
69 return j.vectorToPromQLVector(vector), response.Warnings, nil
70 default:
71 return nil, response.Warnings, errors.New("rule result is not a vector or scalar")
72 }
73}
74
75func (j JsonDecoder) vectorToPromQLVector(vector model.Vector) promql.Vector {
76 v := make([]promql.Sample, 0, len(vector))

Callers

nothing calls this directly

Calls 5

vectorToPromQLVectorMethod · 0.95
scalarToPromQLVectorFunction · 0.85
DecodeMethod · 0.65
MarshalMethod · 0.45
UnmarshalMethod · 0.45

Tested by

no test coverage detected