| package test |
| |
| import ( |
| "context" |
| "fmt" |
| |
| "go.opencensus.io/metric" |
| "go.opencensus.io/metric/metricdata" |
| "go.opencensus.io/metric/metricexport" |
| "go.opencensus.io/stats" |
| "go.opencensus.io/stats/view" |
| "go.opencensus.io/tag" |
| ) |
| |
| var ( |
| myTag = tag.MustNewKey("my_label") |
| myMetric = stats.Int64("my_metric", "description", stats.UnitDimensionless) |
| ) |
| |
| func init() { |
| if err := view.Register( |
| &view.View{ |
| Measure: myMetric, |
| TagKeys: []tag.Key{myTag}, |
| Aggregation: view.Sum(), |
| }, |
| ); err != nil { |
| panic(err) |
| } |
| } |
| |
| func ExampleExporter_stats() { |
| metricReader := metricexport.NewReader() |
| metrics := NewExporter(metricReader) |
| metrics.ReadAndExport() |
| metricBase := getCounter(metrics, myMetric.Name(), newMetricKey("label1")) |
| |
| for i := 1; i <= 3; i++ { |
| // The code under test begins here. |
| stats.RecordWithTags(context.Background(), |
| []tag.Mutator{tag.Upsert(myTag, "label1")}, |
| myMetric.M(int64(i))) |
| // The code under test ends here. |
| |
| metrics.ReadAndExport() |
| metricValue := getCounter(metrics, myMetric.Name(), newMetricKey("label1")) |
| fmt.Printf("increased by %d\n", metricValue-metricBase) |
| } |
| // Output: |
| // increased by 1 |
| // increased by 3 |
| // increased by 6 |
| } |
| |
| type derivedMetric struct { |
| i int64 |
| } |
| |
| func (m *derivedMetric) ToInt64() int64 { |
| return m.i |
| } |
| |
| func ExampleExporter_metric() { |
| metricReader := metricexport.NewReader() |
| metrics := NewExporter(metricReader) |
| m := derivedMetric{} |
| r := metric.NewRegistry() |
| g, _ := r.AddInt64DerivedCumulative("derived", metric.WithLabelKeys(myTag.Name())) |
| g.UpsertEntry(m.ToInt64, metricdata.NewLabelValue("l1")) |
| for i := 1; i <= 3; i++ { |
| // The code under test begins here. |
| m.i = int64(i) |
| // The code under test ends here. |
| |
| metrics.ExportMetrics(context.Background(), r.Read()) |
| metricValue := getCounter(metrics, "derived", newMetricKey("l1")) |
| fmt.Println(metricValue) |
| } |
| // Output: |
| // 1 |
| // 2 |
| // 3 |
| } |
| |
| func newMetricKey(v string) map[string]string { |
| return map[string]string{myTag.Name(): v} |
| } |
| |
| func getCounter(metrics *Exporter, metricName string, metricKey map[string]string) int64 { |
| p, ok := metrics.GetPoint(metricName, metricKey) |
| if !ok { |
| // This is expected before the metric is recorded the first time. |
| return 0 |
| } |
| return p.Value.(int64) |
| } |