prometheus
54 строки · 1.7 Кб
1// Copyright 2023 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14package scrape
15
16import (
17"bytes"
18"encoding/binary"
19
20"github.com/gogo/protobuf/proto"
21
22// Intentionally using client model to simulate client in tests.
23dto "github.com/prometheus/client_model/go"
24)
25
26// Write a MetricFamily into a protobuf.
27// This function is intended for testing scraping by providing protobuf serialized input.
28func MetricFamilyToProtobuf(metricFamily *dto.MetricFamily) ([]byte, error) {
29buffer := &bytes.Buffer{}
30err := AddMetricFamilyToProtobuf(buffer, metricFamily)
31if err != nil {
32return nil, err
33}
34return buffer.Bytes(), nil
35}
36
37// Append a MetricFamily protobuf representation to a buffer.
38// This function is intended for testing scraping by providing protobuf serialized input.
39func AddMetricFamilyToProtobuf(buffer *bytes.Buffer, metricFamily *dto.MetricFamily) error {
40protoBuf, err := proto.Marshal(metricFamily)
41if err != nil {
42return err
43}
44
45varintBuf := make([]byte, binary.MaxVarintLen32)
46varintLength := binary.PutUvarint(varintBuf, uint64(len(protoBuf)))
47
48_, err = buffer.Write(varintBuf[:varintLength])
49if err != nil {
50return err
51}
52_, err = buffer.Write(protoBuf)
53return err
54}
55