MCPcopy
hub / github.com/etcd-io/etcd / ExampleClient_metrics

Function ExampleClient_metrics

client/v3/example_metrics_test.go:38–94  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

36}
37
38func ExampleClient_metrics() {
39 forUnitTestsRunInMockedContext(mockClient_metrics, func() {
40 clientMetrics := grpcprom.NewClientMetrics()
41 prometheus.Register(clientMetrics)
42 cli, err := clientv3.New(clientv3.Config{
43 Endpoints: exampleEndpoints(),
44 DialOptions: []grpc.DialOption{
45 grpc.WithUnaryInterceptor(clientMetrics.UnaryClientInterceptor()),
46 grpc.WithStreamInterceptor(clientMetrics.StreamClientInterceptor()),
47 },
48 })
49 if err != nil {
50 log.Fatal(err)
51 }
52 defer cli.Close()
53
54 // get a key so it shows up in the metrics as a range RPC
55 cli.Get(context.TODO(), "test_key")
56
57 // listen for all Prometheus metrics
58 ln, err := net.Listen("tcp", ":0")
59 if err != nil {
60 log.Fatal(err)
61 }
62 donec := make(chan struct{})
63 go func() {
64 defer close(donec)
65 http.Serve(ln, promhttp.Handler())
66 }()
67 defer func() {
68 ln.Close()
69 <-donec
70 }()
71
72 // make an http request to fetch all Prometheus metrics
73 url := "http://" + ln.Addr().String() + "/metrics"
74 resp, err := http.Get(url)
75 if err != nil {
76 log.Fatalf("fetch error: %v", err)
77 }
78 b, err := io.ReadAll(resp.Body)
79 resp.Body.Close()
80 if err != nil {
81 log.Fatalf("fetch error: reading %s: %v", url, err)
82 }
83
84 // confirm range request in metrics
85 for _, l := range strings.Split(string(b), "\n") {
86 if strings.Contains(l, `grpc_client_started_total{grpc_method="Range"`) {
87 fmt.Println(l)
88 break
89 }
90 }
91 })
92 // Output:
93 // grpc_client_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"} 1
94}

Callers

nothing calls this directly

Calls 12

AddrMethod · 0.80
ReadAllMethod · 0.80
exampleEndpointsFunction · 0.70
RegisterMethod · 0.65
FatalMethod · 0.65
CloseMethod · 0.65
GetMethod · 0.65
HandlerMethod · 0.65
StringMethod · 0.65
FatalfMethod · 0.65
ContainsMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…