55 #include <unordered_map>
57 #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter.h"
58 #include "opentelemetry/exporters/ostream/metric_exporter.h"
59 #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h"
60 #include "opentelemetry/metrics/provider.h"
61 #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
62 #include "opentelemetry/sdk/metrics/meter_provider.h"
63 #include "opentelemetry/sdk/metrics/meter_provider_factory.h"
64 #include "opentelemetry/nostd/shared_ptr.h"
65 #include "nvds_stats.h"
67 namespace metric_sdk = opentelemetry::sdk::metrics;
68 namespace metric_api = opentelemetry::metrics;
69 namespace otlp_exporter = opentelemetry::exporter::otlp;
71 #define GET_OPENTELEMETRY OpenTelemetryClient::getInstance
86 OpenTelemetryClient(
int refresh_period_ms = 5000,
const std::string& otlp_url =
"http://localhost:4318",
bool from_rest_api =
false);
89 static OpenTelemetryClient*
getInstance(
int refresh_period_ms = 5000,
const std::string& otlp_url =
"http://localhost:4318",
bool from_rest_api =
false);
93 void reinitialize(
int refresh_period_ms,
const std::string& otlp_url,
bool from_rest_api =
false);
107 static std::once_flag _init_flag;
109 std::unordered_map<std::string, SourceMetrics> m_source_metrics;
110 std::unordered_map<std::string, SourceMetrics> m_previous_source_metrics;
111 std::mutex m_source_metrics_mutex;
113 int m_refresh_period_ms;
114 std::string m_otlp_url;
116 bool m_metrics_updated_in_cycle;
117 int m_callback_counter;
118 std::mutex m_update_flag_mutex;
119 bool m_initialized_from_rest_api;
120 void initializeComponents();
122 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_fps_gauge;
123 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_latency_gauge;
124 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_frame_number_gauge;
125 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_system_metrics_gauge;
126 opentelemetry::nostd::shared_ptr<metric_api::ObservableInstrument> m_stream_count_gauge;
127 opentelemetry::nostd::shared_ptr<metric_api::MeterProvider> m_provider;
128 opentelemetry::nostd::shared_ptr<metric_api::Meter> m_meter;
129 std::shared_ptr<metric_sdk::MeterProvider> m_provider_sdk;
130 void* m_nvmultiurisrcbin_creator;
135 guint m_stream_count;