summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc')
-rw-r--r--src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc b/src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc
new file mode 100644
index 000000000..c8d6de896
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/sdk/src/metrics/metric_reader.cc
@@ -0,0 +1,94 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef ENABLE_METRICS_PREVIEW
+# include "opentelemetry/sdk/metrics/metric_reader.h"
+# include "opentelemetry/sdk/metrics/export/metric_producer.h"
+
+# include <mutex>
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace sdk
+{
+namespace metrics
+{
+
+MetricReader::MetricReader(AggregationTemporality aggregation_temporality)
+ : aggregation_temporality_(aggregation_temporality), shutdown_(false), metric_producer_(nullptr)
+{}
+
+void MetricReader::SetMetricProducer(MetricProducer *metric_producer)
+{
+ metric_producer_ = metric_producer;
+ OnInitialized();
+}
+
+AggregationTemporality MetricReader::GetAggregationTemporality() const noexcept
+{
+ return aggregation_temporality_;
+}
+
+bool MetricReader::Collect(
+ nostd::function_ref<bool(ResourceMetrics &metric_data)> callback) noexcept
+{
+ if (!metric_producer_)
+ {
+ OTEL_INTERNAL_LOG_WARN(
+ "MetricReader::Collect Cannot invoke Collect(). No MetricProducer registered for "
+ "collection!")
+ }
+ if (IsShutdown())
+ {
+ OTEL_INTERNAL_LOG_WARN("MetricReader::Collect Cannot invoke Collect(). Shutdown in progress!");
+ }
+
+ return metric_producer_->Collect(callback);
+}
+
+bool MetricReader::Shutdown(std::chrono::microseconds timeout) noexcept
+{
+ bool status = true;
+ if (IsShutdown())
+ {
+ OTEL_INTERNAL_LOG_WARN("MetricReader::Shutdown - Cannot invoke shutdown twice!");
+ }
+
+ {
+ const std::lock_guard<opentelemetry::common::SpinLockMutex> locked(lock_);
+ shutdown_ = true;
+ }
+
+ if (!OnShutDown(timeout))
+ {
+ status = false;
+ OTEL_INTERNAL_LOG_WARN("MetricReader::OnShutDown Shutdown failed. Will not be tried again!");
+ }
+ return status;
+}
+
+/** Flush metric read by this reader **/
+bool MetricReader::ForceFlush(std::chrono::microseconds timeout) noexcept
+{
+ bool status = true;
+ if (shutdown_)
+ {
+ OTEL_INTERNAL_LOG_WARN("MetricReader::Shutdown Cannot invoke Force flush on shutdown reader!");
+ }
+ if (!OnForceFlush(timeout))
+ {
+ status = false;
+ OTEL_INTERNAL_LOG_ERROR("MetricReader::OnForceFlush failed!");
+ }
+ return status;
+}
+
+bool MetricReader::IsShutdown() const noexcept
+{
+ const std::lock_guard<opentelemetry::common::SpinLockMutex> locked(lock_);
+ return shutdown_;
+}
+
+} // namespace metrics
+} // namespace sdk
+OPENTELEMETRY_END_NAMESPACE
+#endif