go.temporal.io/server@v1.23.0/common/metrics/metrics_test.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package metrics_test 26 27 import ( 28 "fmt" 29 "time" 30 31 "go.temporal.io/server/common/metrics" 32 "go.temporal.io/server/common/metrics/metricstest" 33 "golang.org/x/exp/maps" 34 "golang.org/x/exp/slices" 35 ) 36 37 var ( 38 bytesHist = metrics.NewBytesHistogramDef("test-bytes-histogram") 39 counter = metrics.NewCounterDef("test-counter") 40 gauge = metrics.NewGaugeDef("test-gauge") 41 hist = metrics.NewDimensionlessHistogramDef("test-histogram") 42 timer = metrics.NewTimerDef("test-timer") 43 ) 44 45 func ExampleHandler() { 46 handler := metricstest.NewCaptureHandler() 47 capture := handler.StartCapture() 48 49 // Instead of calling handler.Histogram(bytesHist.Name(), bytesHist.Unit()).Record(1), you should use the With 50 // method of the metric definition instead. 51 52 bytesHist.With(handler).Record(1) 53 counter.With(handler).Record(2) 54 gauge.With(handler).Record(3) 55 hist.With(handler).Record(4) 56 timer.With(handler).Record(5 * time.Second) 57 58 snapshot := capture.Snapshot() 59 keys := maps.Keys(snapshot) 60 slices.Sort(keys) 61 for _, key := range keys { 62 fmt.Printf("%s:", key) 63 for _, rec := range snapshot[key] { 64 fmt.Printf(" %v (%v)", rec.Value, rec.Unit) 65 } 66 fmt.Println() 67 } 68 69 // Notice that the output includes the proper units without having to specify them in the call to Record. 70 71 // Output: 72 // test-bytes-histogram: 1 (By) 73 // test-counter: 2 () 74 // test-gauge: 3 () 75 // test-histogram: 4 (1) 76 // test-timer: 5s () 77 }