@@ -53,13 +53,20 @@ io::prometheus::client::MetricType MetricType(
5353 }
5454}
5555
56- void SetValue (double value, io::prometheus::client::Metric* metric) {
56+ void SetValue (double value, io::prometheus::client::MetricType type,
57+ io::prometheus::client::Metric* metric) {
5758 metric->mutable_untyped ()->set_value (value);
5859}
59- void SetValue (int64_t value, io::prometheus::client::Metric* metric) {
60- metric->mutable_counter ()->set_value (value);
60+ void SetValue (int64_t value, io::prometheus::client::MetricType type,
61+ io::prometheus::client::Metric* metric) {
62+ if (type == io::prometheus::client::MetricType::COUNTER) {
63+ metric->mutable_counter ()->set_value (value);
64+ } else {
65+ metric->mutable_untyped ()->set_value (value);
66+ }
6167}
6268void SetValue (const opencensus::stats::Distribution& value,
69+ io::prometheus::client::MetricType type,
6370 io::prometheus::client::Metric* metric) {
6471 auto * histogram = metric->mutable_histogram ();
6572 histogram->set_sample_count (value.count ());
@@ -82,6 +89,7 @@ void SetValue(const opencensus::stats::Distribution& value,
8289template <typename T>
8390void SetData (const opencensus::stats::ViewDescriptor& descriptor,
8491 const opencensus::stats::ViewData::DataMap<T>& data, int64_t time,
92+ io::prometheus::client::MetricType type,
8593 io::prometheus::client::MetricFamily* metric_family) {
8694 for (const auto & row : data) {
8795 auto * metric = metric_family->add_metric ();
@@ -91,7 +99,7 @@ void SetData(const opencensus::stats::ViewDescriptor& descriptor,
9199 label->set_name (SanitizeName (descriptor.columns ()[i].name ()));
92100 label->set_value (row.first [i]);
93101 }
94- SetValue (row.second , metric);
102+ SetValue (row.second , type, metric);
95103 }
96104}
97105
@@ -100,24 +108,26 @@ void SetData(const opencensus::stats::ViewDescriptor& descriptor,
100108void SetMetricFamily (const opencensus::stats::ViewDescriptor& descriptor,
101109 const opencensus::stats::ViewData& data,
102110 io::prometheus::client::MetricFamily* metric_family) {
111+ const io::prometheus::client::MetricType type =
112+ MetricType (descriptor.aggregation ().type ());
103113 // TODO(sturdy): convert common units into base units (e.g. ms->s).
104114 metric_family->set_name (SanitizeName (absl::StrCat (
105115 descriptor.name (), " _" , descriptor.measure_descriptor ().units ())));
106116 metric_family->set_help (descriptor.description ());
107- metric_family->set_type (MetricType (descriptor. aggregation (). type ()) );
117+ metric_family->set_type (type);
108118
109119 const int64_t time = absl::ToUnixMillis (data.end_time ());
110120 switch (data.type ()) {
111121 case opencensus::stats::ViewData::Type::kDouble : {
112- SetData (descriptor, data.double_data (), time, metric_family);
122+ SetData (descriptor, data.double_data (), time, type, metric_family);
113123 break ;
114124 }
115125 case opencensus::stats::ViewData::Type::kInt64 : {
116- SetData (descriptor, data.int_data (), time, metric_family);
126+ SetData (descriptor, data.int_data (), time, type, metric_family);
117127 break ;
118128 }
119129 case opencensus::stats::ViewData::Type::kDistribution : {
120- SetData (descriptor, data.distribution_data (), time, metric_family);
130+ SetData (descriptor, data.distribution_data (), time, type, metric_family);
121131 break ;
122132 }
123133 }
0 commit comments