...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package expfmt
15
16 import (
17 "bufio"
18 "bytes"
19 "compress/gzip"
20 "errors"
21 "io"
22 "os"
23 "testing"
24
25 "google.golang.org/protobuf/encoding/protodelim"
26
27 dto "github.com/prometheus/client_model/go"
28 )
29
30 var parser TextParser
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 func BenchmarkParseText(b *testing.B) {
51 b.StopTimer()
52 data, err := os.ReadFile("testdata/text")
53 if err != nil {
54 b.Fatal(err)
55 }
56 b.StartTimer()
57
58 for i := 0; i < b.N; i++ {
59 if _, err := parser.TextToMetricFamilies(bytes.NewReader(data)); err != nil {
60 b.Fatal(err)
61 }
62 }
63 }
64
65
66
67 func BenchmarkParseTextGzip(b *testing.B) {
68 b.StopTimer()
69 data, err := os.ReadFile("testdata/text.gz")
70 if err != nil {
71 b.Fatal(err)
72 }
73 b.StartTimer()
74
75 for i := 0; i < b.N; i++ {
76 in, err := gzip.NewReader(bytes.NewReader(data))
77 if err != nil {
78 b.Fatal(err)
79 }
80 if _, err := parser.TextToMetricFamilies(in); err != nil {
81 b.Fatal(err)
82 }
83 }
84 }
85
86
87
88
89
90
91
92 func BenchmarkParseProto(b *testing.B) {
93 b.StopTimer()
94 data, err := os.ReadFile("testdata/protobuf")
95 if err != nil {
96 b.Fatal(err)
97 }
98 b.StartTimer()
99
100 for i := 0; i < b.N; i++ {
101 family := &dto.MetricFamily{}
102 in := bufio.NewReader(bytes.NewReader(data))
103 unmarshaler := protodelim.UnmarshalOptions{
104 MaxSize: -1,
105 }
106 for {
107 family.Reset()
108 if err := unmarshaler.UnmarshalFrom(in, family); err != nil {
109 if errors.Is(err, io.EOF) {
110 break
111 }
112 b.Fatal(err)
113 }
114 }
115 }
116 }
117
118
119
120 func BenchmarkParseProtoGzip(b *testing.B) {
121 b.StopTimer()
122 data, err := os.ReadFile("testdata/protobuf.gz")
123 if err != nil {
124 b.Fatal(err)
125 }
126 b.StartTimer()
127
128 for i := 0; i < b.N; i++ {
129 family := &dto.MetricFamily{}
130 gz, err := gzip.NewReader(bytes.NewReader(data))
131 if err != nil {
132 b.Fatal(err)
133 }
134 in := bufio.NewReader(gz)
135 unmarshaler := protodelim.UnmarshalOptions{
136 MaxSize: -1,
137 }
138 for {
139 family.Reset()
140 if err := unmarshaler.UnmarshalFrom(in, family); err != nil {
141 if errors.Is(err, io.EOF) {
142 break
143 }
144 b.Fatal(err)
145 }
146 }
147 }
148 }
149
150
151
152
153
154 func BenchmarkParseProtoMap(b *testing.B) {
155 b.StopTimer()
156 data, err := os.ReadFile("testdata/protobuf")
157 if err != nil {
158 b.Fatal(err)
159 }
160 b.StartTimer()
161
162 for i := 0; i < b.N; i++ {
163 families := map[string]*dto.MetricFamily{}
164 in := bufio.NewReader(bytes.NewReader(data))
165 unmarshaler := protodelim.UnmarshalOptions{
166 MaxSize: -1,
167 }
168 for {
169 family := &dto.MetricFamily{}
170 if err := unmarshaler.UnmarshalFrom(in, family); err != nil {
171 if errors.Is(err, io.EOF) {
172 break
173 }
174 b.Fatal(err)
175 }
176 families[family.GetName()] = family
177 }
178 }
179 }
180
View as plain text