github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/dbaccessor/metrics_test.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package dbaccessor 5 6 import ( 7 "bytes" 8 time "time" 9 10 jc "github.com/juju/testing/checkers" 11 "github.com/prometheus/client_golang/prometheus/testutil" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/testing" 15 ) 16 17 type metricsSuite struct { 18 baseSuite 19 } 20 21 var _ = gc.Suite(&metricsSuite{}) 22 23 func (s *metricsSuite) TestMetricsAreCollected(c *gc.C) { 24 collector := NewMetricsCollector() 25 26 done := make(chan struct{}) 27 go func() { 28 defer close(done) 29 collector.DBDuration.WithLabelValues("foo", "success").Observe(0.1) 30 collector.DBRequests.WithLabelValues("foo").Inc() 31 collector.TxnRequests.WithLabelValues("foo").Inc() 32 }() 33 34 select { 35 case <-done: 36 case <-time.After(testing.ShortWait): 37 c.Fatalf("timed out waiting for metrics to be collected") 38 } 39 40 expected := bytes.NewBuffer([]byte(` 41 # HELP juju_db_duration_seconds Total time spent in db requests. 42 # TYPE juju_db_duration_seconds histogram 43 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.005"} 0 44 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.01"} 0 45 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.025"} 0 46 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.05"} 0 47 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.1"} 1 48 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.25"} 1 49 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="0.5"} 1 50 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="1"} 1 51 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="2.5"} 1 52 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="5"} 1 53 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="10"} 1 54 juju_db_duration_seconds_bucket{namespace="foo",result="success",le="+Inf"} 1 55 juju_db_duration_seconds_sum{namespace="foo",result="success"} 0.1 56 juju_db_duration_seconds_count{namespace="foo",result="success"} 1 57 # HELP juju_db_requests_total Number of active db requests. 58 # TYPE juju_db_requests_total gauge 59 juju_db_requests_total{namespace="foo"} 1 60 # HELP juju_db_txn_requests_total Total number of txn requests including retries. 61 # TYPE juju_db_txn_requests_total counter 62 juju_db_txn_requests_total{namespace="foo"} 1 63 `[1:])) 64 65 err := testutil.CollectAndCompare( 66 collector, expected, 67 "juju_db_requests_total", 68 "juju_db_duration_seconds", 69 "juju_db_txn_requests_total", 70 ) 71 if !c.Check(err, jc.ErrorIsNil) { 72 c.Logf("\nerror:\n%v", err) 73 } 74 }