Skip to content

Commit 5b835c7

Browse files
committed
use TextToMetricFamilies instead of custom parser
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
1 parent 354220d commit 5b835c7

File tree

1 file changed

+46
-64
lines changed

1 file changed

+46
-64
lines changed

tests/integration/clientv3/metrics_test.go

Lines changed: 46 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package clientv3test
1616

1717
import (
1818
"bufio"
19+
"bytes"
1920
"context"
2021
"errors"
2122
"io"
@@ -30,6 +31,7 @@ import (
3031
grpcprom "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus"
3132
"github.com/prometheus/client_golang/prometheus"
3233
"github.com/prometheus/client_golang/prometheus/promhttp"
34+
"github.com/prometheus/common/expfmt"
3335
"google.golang.org/grpc"
3436

3537
"go.etcd.io/etcd/client/pkg/v3/transport"
@@ -150,6 +152,24 @@ func sumCountersForMetricAndLabels(t *testing.T, url string, metricName string,
150152
}
151153

152154
func getHTTPBodyAsLines(t *testing.T, url string) []string {
155+
data := getHTTPBodyAsBytes(t, url)
156+
157+
reader := bufio.NewReader(bytes.NewReader(data))
158+
var lines []string
159+
for {
160+
line, err := reader.ReadString('\n')
161+
if err != nil {
162+
if errors.Is(err, io.EOF) {
163+
break
164+
}
165+
t.Fatalf("error reading: %v", err)
166+
}
167+
lines = append(lines, line)
168+
}
169+
return lines
170+
}
171+
172+
func getHTTPBodyAsBytes(t *testing.T, url string) []byte {
153173
cfgtls := transport.TLSInfo{}
154174
tr, err := transport.NewTransport(cfgtls, time.Second)
155175
if err != nil {
@@ -165,21 +185,12 @@ func getHTTPBodyAsLines(t *testing.T, url string) []string {
165185
if err != nil {
166186
t.Fatalf("Error fetching: %v", err)
167187
}
168-
169-
reader := bufio.NewReader(resp.Body)
170-
var lines []string
171-
for {
172-
line, err := reader.ReadString('\n')
173-
if err != nil {
174-
if errors.Is(err, io.EOF) {
175-
break
176-
}
177-
t.Fatalf("error reading: %v", err)
178-
}
179-
lines = append(lines, line)
188+
defer resp.Body.Close()
189+
body, err := io.ReadAll(resp.Body)
190+
if err != nil {
191+
t.Fatalf("Error reading http body: %v", err)
180192
}
181-
resp.Body.Close()
182-
return lines
193+
return body
183194
}
184195

185196
func TestAllMetricsGenerated(t *testing.T) {
@@ -252,42 +263,26 @@ func TestAllMetricsGenerated(t *testing.T) {
252263
// Define the expected list of metrics
253264
expectedMetrics := []string{
254265
"etcd_cluster_version",
255-
"etcd_disk_backend_commit_duration_seconds_bucket",
256-
"etcd_disk_backend_commit_duration_seconds_count",
257-
"etcd_disk_backend_commit_duration_seconds_sum",
258-
"etcd_disk_backend_defrag_duration_seconds_bucket",
259-
"etcd_disk_backend_defrag_duration_seconds_count",
260-
"etcd_disk_backend_defrag_duration_seconds_sum",
261-
"etcd_disk_backend_snapshot_duration_seconds_bucket",
262-
"etcd_disk_backend_snapshot_duration_seconds_count",
263-
"etcd_disk_backend_snapshot_duration_seconds_sum",
266+
"etcd_disk_backend_commit_duration_seconds",
267+
"etcd_disk_backend_defrag_duration_seconds",
268+
"etcd_disk_backend_snapshot_duration_seconds",
264269
"etcd_disk_defrag_inflight",
265-
"etcd_disk_wal_fsync_duration_seconds_bucket",
266-
"etcd_disk_wal_fsync_duration_seconds_count",
267-
"etcd_disk_wal_fsync_duration_seconds_sum",
270+
"etcd_disk_wal_fsync_duration_seconds",
268271
"etcd_disk_wal_write_bytes_total",
269-
"etcd_disk_wal_write_duration_seconds_bucket",
270-
"etcd_disk_wal_write_duration_seconds_count",
271-
"etcd_disk_wal_write_duration_seconds_sum",
272+
"etcd_disk_wal_write_duration_seconds",
272273
"etcd_mvcc_db_open_read_transactions",
273274
"etcd_mvcc_db_total_size_in_bytes",
274275
"etcd_mvcc_db_total_size_in_use_in_bytes",
275276
"etcd_mvcc_delete_total",
276-
"etcd_mvcc_hash_duration_seconds_bucket",
277-
"etcd_mvcc_hash_duration_seconds_count",
278-
"etcd_mvcc_hash_duration_seconds_sum",
279-
"etcd_mvcc_hash_rev_duration_seconds_bucket",
280-
"etcd_mvcc_hash_rev_duration_seconds_count",
281-
"etcd_mvcc_hash_rev_duration_seconds_sum",
277+
"etcd_mvcc_hash_duration_seconds",
278+
"etcd_mvcc_hash_rev_duration_seconds",
282279
"etcd_mvcc_put_total",
283280
"etcd_mvcc_range_total",
284281
"etcd_mvcc_txn_total",
285282
"etcd_network_client_grpc_received_bytes_total",
286283
"etcd_network_client_grpc_sent_bytes_total",
287284
"etcd_network_known_peers",
288-
"etcd_server_apply_duration_seconds_bucket",
289-
"etcd_server_apply_duration_seconds_count",
290-
"etcd_server_apply_duration_seconds_sum",
285+
"etcd_server_apply_duration_seconds",
291286
"etcd_server_client_requests_total",
292287
"etcd_server_go_version",
293288
"etcd_server_has_leader",
@@ -309,23 +304,15 @@ func TestAllMetricsGenerated(t *testing.T) {
309304
"etcd_server_slow_read_indexes_total",
310305
"etcd_server_snapshot_apply_in_progress_total",
311306
"etcd_server_version",
312-
"etcd_snap_db_fsync_duration_seconds_bucket",
313-
"etcd_snap_db_fsync_duration_seconds_count",
314-
"etcd_snap_db_fsync_duration_seconds_sum",
315-
"etcd_snap_db_save_total_duration_seconds_bucket",
316-
"etcd_snap_db_save_total_duration_seconds_count",
317-
"etcd_snap_db_save_total_duration_seconds_sum",
318-
"etcd_snap_fsync_duration_seconds_bucket",
319-
"etcd_snap_fsync_duration_seconds_count",
320-
"etcd_snap_fsync_duration_seconds_sum",
307+
"etcd_snap_db_fsync_duration_seconds",
308+
"etcd_snap_db_save_total_duration_seconds",
309+
"etcd_snap_fsync_duration_seconds",
321310
"grpc_client_handled_total",
322311
"grpc_client_msg_received_total",
323312
"grpc_client_msg_sent_total",
324313
"grpc_client_started_total",
325314
"grpc_server_handled_total",
326-
"grpc_server_handling_seconds_bucket",
327-
"grpc_server_handling_seconds_count",
328-
"grpc_server_handling_seconds_sum",
315+
"grpc_server_handling_seconds",
329316
"grpc_server_msg_received_total",
330317
"grpc_server_msg_sent_total",
331318
"grpc_server_started_total",
@@ -341,20 +328,15 @@ func TestAllMetricsGenerated(t *testing.T) {
341328
}
342329

343330
func getMetricsList(t *testing.T, url string) []string {
344-
lines := getHTTPBodyAsLines(t, url)
345-
metrics := make(map[string]struct{})
346-
for _, line := range lines {
347-
if strings.Contains(line, "{") {
348-
metric := line[:strings.Index(line, "{")]
349-
metrics[metric] = struct{}{}
350-
} else {
351-
metric := line[:strings.Index(line, " ")]
352-
metrics[metric] = struct{}{}
353-
}
331+
data := getHTTPBodyAsBytes(t, url)
332+
var parser expfmt.TextParser
333+
mfs, err := parser.TextToMetricFamilies(bytes.NewReader(data))
334+
if err != nil {
335+
t.Errorf("Failed to parse metric families")
354336
}
355-
var metricList []string
356-
for metric := range metrics {
357-
metricList = append(metricList, metric)
337+
var ms []string
338+
for key := range mfs {
339+
ms = append(ms, key)
358340
}
359-
return metricList
341+
return ms
360342
}

0 commit comments

Comments
 (0)