@@ -28,48 +28,35 @@ namespace storage_internal {
2828GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2929
3030#ifdef GOOGLE_CLOUD_CPP_STORAGE_WITH_OTEL_METRICS
31- namespace {
32- struct ReadLatencyMetrics {
33- opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<double >>
34- queue_hist;
35- opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<double >>
36- network_hist;
37- opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<double >>
38- output_hist;
39-
40- static ReadLatencyMetrics const & Instance () {
41- static ReadLatencyMetrics const metrics = [] {
42- opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter =
43- opentelemetry::metrics::Provider::GetMeterProvider ()->GetMeter (
44- " google-cloud-cpp" , version::version_string ());
45- return ReadLatencyMetrics{
46- meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.queue" ,
47- " Read Range Queue Latency" , " us" ),
48- meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.network" ,
49- " Read Range Network Latency" , " us" ),
50- meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.internal" ,
51- " Read Range Internal Overhead" , " us" ),
52- };
53- }();
54- return metrics;
55- }
56- };
57- } // namespace
31+ ReaderConnectionTelemetry::ReaderConnectionTelemetry () {
32+ opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter =
33+ opentelemetry::metrics::Provider::GetMeterProvider ()->GetMeter (
34+ " google-cloud-cpp" , version::version_string ());
35+ metrics_ = {
36+ meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.queue" ,
37+ " Read Range Queue Latency" , " us" ),
38+ meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.network" ,
39+ " Read Range Network Latency" , " us" ),
40+ meter->CreateDoubleHistogram (" gl-cpp.latency.bidi_read.internal" ,
41+ " Read Range Internal Overhead" , " us" ),
42+ };
43+ }
5844
5945void ReaderConnectionTelemetry::RecordMetrics (std::string const & bucket_name,
6046 double p1, double p2,
6147 double p3) const {
62- auto const & metrics = ReadLatencyMetrics::Instance ();
63- if (metrics.queue_hist )
64- metrics.queue_hist ->Record (p1, {{" gcp.storage.bucket" , bucket_name}},
65- opentelemetry::context::Context{});
66- if (metrics.network_hist )
67- metrics.network_hist ->Record (p2, {{" gcp.storage.bucket" , bucket_name}},
68- opentelemetry::context::Context{});
69- if (metrics.output_hist )
70- metrics.output_hist ->Record (p3, {{" gcp.storage.bucket" , bucket_name}},
48+ if (metrics_.queue_hist )
49+ metrics_.queue_hist ->Record (p1, {{" gcp.storage.bucket" , bucket_name}},
7150 opentelemetry::context::Context{});
51+ if (metrics_.network_hist )
52+ metrics_.network_hist ->Record (p2, {{" gcp.storage.bucket" , bucket_name}},
53+ opentelemetry::context::Context{});
54+ if (metrics_.output_hist )
55+ metrics_.output_hist ->Record (p3, {{" gcp.storage.bucket" , bucket_name}},
56+ opentelemetry::context::Context{});
7257}
58+ #else
59+ ReaderConnectionTelemetry::ReaderConnectionTelemetry () = default;
7360#endif
7461
7562void ReaderConnectionTelemetry::RecordRead (
@@ -81,9 +68,8 @@ void ReaderConnectionTelemetry::RecordRead(
8168 std::chrono::steady_clock::time_point t5 = ReadPayloadImpl::GetT5 (payload);
8269 std::chrono::steady_clock::time_point t6 = ReadPayloadImpl::GetT6 (payload);
8370
84- if (t4 != std::chrono::steady_clock::time_point{} &&
85- t5 != std::chrono::steady_clock::time_point{} &&
86- t6 != std::chrono::steady_clock::time_point{}) {
71+ if (t4 != std::chrono::steady_clock::time_point{} && t4 <= t5 && t5 <= t6 &&
72+ t6 <= t7) {
8773 double p1 = std::chrono::duration<double , std::micro>(t5 - t4).count ();
8874 double p2 = std::chrono::duration<double , std::micro>(t6 - t5).count ();
8975 double p3 = std::chrono::duration<double , std::micro>(t7 - t6).count ();
0 commit comments