1818
1919#include " absl/base/internal/sysinfo.h"
2020#include " absl/base/macros.h"
21+ #include " absl/strings/match.h"
2122#include " absl/strings/str_cat.h"
2223#include " absl/strings/string_view.h"
2324#include " absl/time/time.h"
@@ -41,11 +42,6 @@ constexpr char kOpenCensusTaskKey[] = "opencensus_task";
4142constexpr char kOpenCensusTaskDescription [] = " OpenCensus task identifier" ;
4243constexpr char kDefaultResourceType [] = " global" ;
4344
44- std::string MakeType (absl::string_view metric_name_prefix,
45- absl::string_view view_name) {
46- return absl::StrCat (metric_name_prefix, view_name);
47- }
48-
4945// Creates a name in the format described in
5046// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors/create
5147std::string MakeName (absl::string_view project_name,
@@ -153,15 +149,28 @@ std::vector<google::monitoring::v3::TimeSeries> DataToTimeSeries(
153149
154150} // namespace
155151
152+ std::string MakeType (absl::string_view metric_name_prefix,
153+ absl::string_view view_name) {
154+ return absl::StrCat (metric_name_prefix, view_name);
155+ }
156+
157+ bool IsKnownCustomMetric (absl::string_view metric_type) {
158+ return absl::StartsWith (metric_type, " custom.googleapis.com/" ) ||
159+ absl::StartsWith (metric_type, " external.googleapis.com/" );
160+ }
161+
156162void SetMetricDescriptor (
157163 absl::string_view project_name, absl::string_view metric_name_prefix,
158164 const opencensus::stats::ViewDescriptor& view_descriptor,
159165 google::api::MetricDescriptor* metric_descriptor) {
160166 metric_descriptor->set_name (
161167 MakeName (project_name, metric_name_prefix, view_descriptor.name ()));
162- metric_descriptor->set_type (
163- MakeType (metric_name_prefix, view_descriptor.name ()));
164- SetOpenCensusTaskLabelDescriptor (metric_descriptor->add_labels ());
168+ const std::string metric_type =
169+ MakeType (metric_name_prefix, view_descriptor.name ());
170+ metric_descriptor->set_type (metric_type);
171+ if (IsKnownCustomMetric (metric_type)) {
172+ SetOpenCensusTaskLabelDescriptor (metric_descriptor->add_labels ());
173+ }
165174 for (const auto & tag_key : view_descriptor.columns ()) {
166175 SetLabelDescriptor (tag_key.name (), metric_descriptor->add_labels ());
167176 }
@@ -188,8 +197,9 @@ std::vector<google::monitoring::v3::TimeSeries> MakeTimeSeries(
188197 absl::string_view opencensus_task) {
189198 // Set values that are common across all the rows.
190199 auto base_time_series = google::monitoring::v3::TimeSeries ();
191- base_time_series.mutable_metric ()->set_type (
192- MakeType (metric_name_prefix, view_descriptor.name ()));
200+ const std::string metric_type =
201+ MakeType (metric_name_prefix, view_descriptor.name ());
202+ base_time_series.mutable_metric ()->set_type (metric_type);
193203 auto iter = per_metric_monitored_resource.find (view_descriptor.name ());
194204 if (iter != per_metric_monitored_resource.end ()) {
195205 *base_time_series.mutable_resource () = iter->second ;
@@ -206,9 +216,10 @@ std::vector<google::monitoring::v3::TimeSeries> MakeTimeSeries(
206216 SetTimestamp (data.start_time (), interval->mutable_start_time ());
207217 }
208218 SetTimestamp (data.end_time (), interval->mutable_end_time ());
209- (*base_time_series.mutable_metric ()->mutable_labels ())[kOpenCensusTaskKey ] =
210- std::string (opencensus_task);
211-
219+ if (IsKnownCustomMetric (metric_type)) {
220+ (*base_time_series.mutable_metric ()->mutable_labels ())[kOpenCensusTaskKey ] =
221+ std::string (opencensus_task);
222+ }
212223 switch (data.type ()) {
213224 case opencensus::stats::ViewData::Type::kDouble :
214225 return DataToTimeSeries (view_descriptor, data.double_data (),
0 commit comments