1515#include " google/cloud/opentelemetry/monitoring_exporter.h"
1616#include " google/cloud/monitoring/v3/metric_client.h"
1717#include " google/cloud/opentelemetry/internal/time_series.h"
18+ #include " google/cloud/internal/noexcept_action.h"
1819#include " google/cloud/log.h"
1920#include " google/cloud/project.h"
2021#include < memory>
@@ -41,7 +42,21 @@ class MonitoringExporter final
4142 opentelemetry::sdk::common::ExportResult Export (
4243 opentelemetry::sdk::metrics::ResourceMetrics const & data) noexcept
4344 override {
44- // TODO(#13869) - Respect `noexcept` qualifier
45+ auto result =
46+ internal::NoExceptAction<opentelemetry::sdk::common::ExportResult>(
47+ [&] { return ExportImpl (data); });
48+ if (result) return *std::move (result);
49+ GCP_LOG (WARNING) << " Exception thrown while exporting metrics." ;
50+ return opentelemetry::sdk::common::ExportResult::kFailure ;
51+ }
52+
53+ bool ForceFlush (std::chrono::microseconds) noexcept override { return false ; }
54+
55+ bool Shutdown (std::chrono::microseconds) noexcept override { return true ; }
56+
57+ private:
58+ opentelemetry::sdk::common::ExportResult ExportImpl (
59+ opentelemetry::sdk::metrics::ResourceMetrics const & data) {
4560 auto request = ToRequest (data);
4661 request.set_name (project_.FullName ());
4762 if (request.time_series ().empty ()) {
@@ -62,11 +77,6 @@ class MonitoringExporter final
6277 return opentelemetry::sdk::common::ExportResult::kFailure ;
6378 }
6479
65- bool ForceFlush (std::chrono::microseconds) noexcept override { return false ; }
66-
67- bool Shutdown (std::chrono::microseconds) noexcept override { return true ; }
68-
69- private:
7080 Project project_;
7181 monitoring_v3::MetricServiceClient client_;
7282};
0 commit comments