Do not construct NPCMetricsKeyValueIterable when calling OTel API when

the instrument has empty label and optional label
pull/37311/head
yijiem 7 months ago
parent 45519c2e81
commit 2f8c975cfc
  1. 43
      src/cpp/ext/otel/otel_plugin.cc

@ -637,6 +637,11 @@ void OpenTelemetryPluginImpl::AddCounter(
grpc_core::GlobalInstrumentsRegistry::GetInstrumentDescriptor(handle);
CHECK(descriptor.label_keys.size() == label_values.size());
CHECK(descriptor.optional_label_keys.size() == optional_values.size());
if (label_values.empty() && optional_values.empty()) {
absl::get<std::unique_ptr<opentelemetry::metrics::Counter<uint64_t>>>(
instrument_data.instrument)
->Add(value);
} else {
absl::get<std::unique_ptr<opentelemetry::metrics::Counter<uint64_t>>>(
instrument_data.instrument)
->Add(value, NPCMetricsKeyValueIterable(
@ -644,6 +649,7 @@ void OpenTelemetryPluginImpl::AddCounter(
descriptor.optional_label_keys, optional_values,
instrument_data.optional_labels_bits));
}
}
void OpenTelemetryPluginImpl::AddCounter(
grpc_core::GlobalInstrumentsRegistry::GlobalInstrumentHandle handle,
@ -661,6 +667,11 @@ void OpenTelemetryPluginImpl::AddCounter(
grpc_core::GlobalInstrumentsRegistry::GetInstrumentDescriptor(handle);
CHECK(descriptor.label_keys.size() == label_values.size());
CHECK(descriptor.optional_label_keys.size() == optional_values.size());
if (label_values.empty() && optional_values.empty()) {
absl::get<std::unique_ptr<opentelemetry::metrics::Counter<double>>>(
instrument_data.instrument)
->Add(value);
} else {
absl::get<std::unique_ptr<opentelemetry::metrics::Counter<double>>>(
instrument_data.instrument)
->Add(value, NPCMetricsKeyValueIterable(
@ -668,6 +679,7 @@ void OpenTelemetryPluginImpl::AddCounter(
descriptor.optional_label_keys, optional_values,
instrument_data.optional_labels_bits));
}
}
void OpenTelemetryPluginImpl::RecordHistogram(
grpc_core::GlobalInstrumentsRegistry::GlobalInstrumentHandle handle,
@ -685,15 +697,21 @@ void OpenTelemetryPluginImpl::RecordHistogram(
grpc_core::GlobalInstrumentsRegistry::GetInstrumentDescriptor(handle);
CHECK(descriptor.label_keys.size() == label_values.size());
CHECK(descriptor.optional_label_keys.size() == optional_values.size());
if (label_values.empty() && optional_values.empty()) {
absl::get<std::unique_ptr<opentelemetry::metrics::Histogram<uint64_t>>>(
instrument_data.instrument)
->Record(value, opentelemetry::context::Context{});
} else {
absl::get<std::unique_ptr<opentelemetry::metrics::Histogram<uint64_t>>>(
instrument_data.instrument)
->Record(value,
NPCMetricsKeyValueIterable(descriptor.label_keys, label_values,
descriptor.optional_label_keys,
optional_values,
NPCMetricsKeyValueIterable(
descriptor.label_keys, label_values,
descriptor.optional_label_keys, optional_values,
instrument_data.optional_labels_bits),
opentelemetry::context::Context{});
}
}
void OpenTelemetryPluginImpl::RecordHistogram(
grpc_core::GlobalInstrumentsRegistry::GlobalInstrumentHandle handle,
@ -711,15 +729,21 @@ void OpenTelemetryPluginImpl::RecordHistogram(
grpc_core::GlobalInstrumentsRegistry::GetInstrumentDescriptor(handle);
CHECK(descriptor.label_keys.size() == label_values.size());
CHECK(descriptor.optional_label_keys.size() == optional_values.size());
if (label_values.empty() && optional_values.empty()) {
absl::get<std::unique_ptr<opentelemetry::metrics::Histogram<double>>>(
instrument_data.instrument)
->Record(value, opentelemetry::context::Context{});
} else {
absl::get<std::unique_ptr<opentelemetry::metrics::Histogram<double>>>(
instrument_data.instrument)
->Record(value,
NPCMetricsKeyValueIterable(descriptor.label_keys, label_values,
descriptor.optional_label_keys,
optional_values,
NPCMetricsKeyValueIterable(
descriptor.label_keys, label_values,
descriptor.optional_label_keys, optional_values,
instrument_data.optional_labels_bits),
opentelemetry::context::Context{});
}
}
void OpenTelemetryPluginImpl::AddCallback(
grpc_core::RegisteredMetricCallback* callback) {
@ -881,6 +905,12 @@ void OpenTelemetryPluginImpl::CallbackGaugeState<ValueType>::Observe(
for (const auto& pair : cache) {
CHECK(pair.first.size() <= (descriptor.label_keys.size() +
descriptor.optional_label_keys.size()));
if (descriptor.label_keys.empty() &&
descriptor.optional_label_keys.empty()) {
opentelemetry::nostd::get<opentelemetry::nostd::shared_ptr<
opentelemetry::metrics::ObserverResultT<ValueType>>>(result)
->Observe(pair.second);
} else {
auto& instrument_data = ot_plugin->instruments_data_.at(id);
opentelemetry::nostd::get<opentelemetry::nostd::shared_ptr<
opentelemetry::metrics::ObserverResultT<ValueType>>>(result)
@ -897,6 +927,7 @@ void OpenTelemetryPluginImpl::CallbackGaugeState<ValueType>::Observe(
instrument_data.optional_labels_bits));
}
}
}
// OpenTelemetry calls our callback with its observable_registry's lock
// held.

Loading…
Cancel
Save