60 #include <unordered_map>
62 #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter.h"
63 #include "opentelemetry/exporters/ostream/metric_exporter.h"
64 #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h"
65 #include "opentelemetry/metrics/provider.h"
66 #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
67 #include "opentelemetry/sdk/metrics/meter_provider.h"
68 #include "opentelemetry/sdk/metrics/meter_provider_factory.h"
69 #include "opentelemetry/nostd/shared_ptr.h"
70 #include "nvds_stats.h"
72 namespace metric_sdk = opentelemetry::sdk::metrics;
73 namespace metric_api = opentelemetry::metrics;
74 namespace otlp_exporter = opentelemetry::exporter::otlp;
76 #define GET_OPENTELEMETRY OpenTelemetryClient::getInstance
91 OpenTelemetryClient(
int refresh_period_ms = 5000,
const std::string& otlp_url =
"http://localhost:4318",
bool from_rest_api =
false);
94 static OpenTelemetryClient*
getInstance(
int refresh_period_ms = 5000,
const std::string& otlp_url =
"http://localhost:4318",
bool from_rest_api =
false);
98 void reinitialize(
int refresh_period_ms,
const std::string& otlp_url,
bool from_rest_api =
false);
112 static std::once_flag _init_flag;
114 std::unordered_map<std::string, SourceMetrics> m_source_metrics;
115 std::unordered_map<std::string, SourceMetrics> m_previous_source_metrics;
116 std::mutex m_source_metrics_mutex;
118 int m_refresh_period_ms;
119 std::string m_otlp_url;
121 bool m_metrics_updated_in_cycle;
122 int m_callback_counter;
123 std::mutex m_update_flag_mutex;
124 bool m_initialized_from_rest_api;
125 void initializeComponents();
127 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_fps_gauge;
128 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_latency_gauge;
129 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_frame_number_gauge;
130 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_system_metrics_gauge;
131 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_stream_count_gauge;
132 opentelemetry::nostd::shared_ptr<metric_api::MeterProvider> m_provider;
133 opentelemetry::nostd::shared_ptr<metric_api::Meter> m_meter;
134 std::shared_ptr<metric_sdk::MeterProvider> m_provider_sdk;
135 void* m_nvmultiurisrcbin_creator;
140 guint m_stream_count;