Skip to content
This repository was archived by the owner on Jul 31, 2023. It is now read-only.

Commit e18808e

Browse files
kirakirag-easy
authored andcommitted
Make Stackdriver stats exporter work with LastValue aggregation (#309)
* Don't set start_time for LastValue metrics in Stackdriver exporter. * Update documentation about Stackdriver stats exporter.
1 parent 8588137 commit e18808e

File tree

3 files changed

+49
-3
lines changed

3 files changed

+49
-3
lines changed

opencensus/exporters/stats/stackdriver/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ that, for example, a view named `"example.com/client/latency"` would translate
8484
to a Stackdriver metric named
8585
`"custom.googleapis.com/opencensus/example.com/client/latency"`.
8686
87-
Only Cumulative views may be registered for export in OpenCensus, and created
88-
Stackdriver metrics have the `CUMULATIVE` type.
87+
Views with `LastValue` aggregation will be registered as `GAUGE` Stackdriver
88+
metrics, and other aggregations will be registered as `CUMULATIVE` metrics.
8989
9090
View columns translate to Stackdriver's labels. OpenCensus adds a label
9191
`"opencensus_task"` to all exported views so that exports from different

opencensus/exporters/stats/stackdriver/internal/stackdriver_utils.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,12 @@ std::vector<google::monitoring::v3::TimeSeries> MakeTimeSeries(
183183
base_time_series.mutable_metric()->set_type(MakeType(view_descriptor.name()));
184184
base_time_series.mutable_resource()->set_type(kDefaultResourceType);
185185
auto* interval = base_time_series.add_points()->mutable_interval();
186-
SetTimestamp(data.start_time(), interval->mutable_start_time());
186+
// Stackdriver doesn't like start_time and end_time being different for GAUGE
187+
// metrics.
188+
if (view_descriptor.aggregation().type() !=
189+
opencensus::stats::Aggregation::Type::kLastValue) {
190+
SetTimestamp(data.start_time(), interval->mutable_start_time());
191+
}
187192
SetTimestamp(data.end_time(), interval->mutable_end_time());
188193
(*base_time_series.mutable_metric()->mutable_labels())[kOpenCensusTaskKey] =
189194
std::string(opencensus_task);

opencensus/exporters/stats/stackdriver/internal/stackdriver_utils_test.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,47 @@ TEST(StackdriverUtilsTest, MakeTimeSeriesDistributionDouble) {
350350
distribution2)));
351351
}
352352

353+
TEST(StackdriverUtilsTest, MakeTimeSeriesLastValueInt) {
354+
const auto measure = opencensus::stats::MeasureInt64::Register(
355+
"measure_last_value_int", "", "");
356+
const std::string task = "test_task";
357+
const std::string view_name = "test_descriptor";
358+
const auto tag_key_1 = opencensus::tags::TagKey::Register("foo");
359+
const auto tag_key_2 = opencensus::tags::TagKey::Register("bar");
360+
const auto view_descriptor =
361+
opencensus::stats::ViewDescriptor()
362+
.set_name(view_name)
363+
.set_measure(measure.GetDescriptor().name())
364+
.set_aggregation(opencensus::stats::Aggregation::LastValue())
365+
.add_column(tag_key_1)
366+
.add_column(tag_key_2);
367+
const opencensus::stats::ViewData data = TestUtils::MakeViewData(
368+
view_descriptor, {{{"v1", "v1"}, 1.0}, {{"v1", "v2"}, 2.0}});
369+
const std::vector<google::monitoring::v3::TimeSeries> time_series =
370+
MakeTimeSeries(view_descriptor, data, task);
371+
372+
for (const auto& ts : time_series) {
373+
EXPECT_EQ(absl::StrCat("custom.googleapis.com/opencensus/", view_name),
374+
ts.metric().type());
375+
EXPECT_EQ("global", ts.resource().type());
376+
ASSERT_EQ(1, ts.points_size());
377+
EXPECT_FALSE(ts.points(0).interval().has_start_time());
378+
EXPECT_EQ(absl::ToUnixSeconds(data.end_time()),
379+
ts.points(0).interval().end_time().seconds());
380+
}
381+
382+
EXPECT_THAT(time_series,
383+
::testing::UnorderedElementsAre(
384+
testing::TimeSeriesInt({{"opencensus_task", task},
385+
{tag_key_1.name(), "v1"},
386+
{tag_key_2.name(), "v1"}},
387+
1),
388+
testing::TimeSeriesInt({{"opencensus_task", task},
389+
{tag_key_1.name(), "v1"},
390+
{tag_key_2.name(), "v2"}},
391+
2)));
392+
}
393+
353394
} // namespace
354395
} // namespace stats
355396
} // namespace exporters

0 commit comments

Comments
 (0)