census-instrumentation / opencensus-go

A stats collection and distributed tracing framework
http://opencensus.io
Apache License 2.0
2.06k stars 327 forks source link

Fix const labels with derived metrics #1221

Closed camh- closed 4 years ago

camh- commented 4 years ago

Include the const labels in baseMetric.upsertEntry in the same way as baseMetric.entryForValues.

The "Derived" form of metrics use an UpsertEntry method to provide the function that supplies the metric value as well as the label values. These methods use baseMetric.upsertEntry to do the work, but that method was ignoring any const labels set by WithConstLabel.

Commit c31d2681 added const labels to metrics and updated baseMetric.entryForValues to add the const labels, but baseMetric.upsertEntry was not similarly updated.

This causes UpsertEntry to return an errKeyValueMismatch error ("must supply the same number of label values as keys used to construct this metric") when called unless the values for the const labels were passed to UpsertEntry. That kind of defeats the purpose of const labels.

Add a test case for const labels on Int64DerivedGauge. It is not necessary to add test cases for all the derived metrics as they all use the same baseMetric implementation.