@@ -218,7 +218,7 @@ class AbstractMetricsBucket
218218
219219 virtual void to_json (json &j) const = 0;
220220 virtual void to_prometheus (std::stringstream &out, Metric::LabelMap add_labels = {}) const = 0;
221- virtual void to_opentelemetry (metrics::v1::ScopeMetrics &scope, Metric::LabelMap add_labels = {}) const = 0;
221+ virtual void to_opentelemetry (metrics::v1::ScopeMetrics &scope, timespec &start_ts, timespec &end_ts, Metric::LabelMap add_labels = {}) const = 0;
222222 virtual void update_topn_metrics (size_t topn_count, uint64_t percentile_threshold) = 0;
223223};
224224
@@ -553,8 +553,13 @@ class AbstractMetricsManager
553553 if (!_tap_name.empty () && add_labels.find (" tap" ) == add_labels.end ()) {
554554 add_labels[" tap" ] = _tap_name;
555555 }
556-
557- _metric_buckets.at (period)->to_opentelemetry (scope, add_labels);
556+ auto bucket = _metric_buckets.at (period).get ();
557+ auto start_ts = bucket->start_tstamp ();
558+ auto end_ts = bucket->end_tstamp ();
559+ if (!end_ts.tv_sec ) {
560+ timespec_get (&end_ts, TIME_UTC);
561+ }
562+ bucket->to_opentelemetry (scope, start_ts, end_ts, add_labels);
558563 }
559564
560565 void window_external_opentelemetry (metrics::v1::ScopeMetrics &scope, AbstractMetricsBucket *bucket, Metric::LabelMap add_labels = {}) const
@@ -563,7 +568,13 @@ class AbstractMetricsManager
563568 return ;
564569 }
565570 // static because caller guarantees only our own bucket type
566- static_cast <MetricsBucketClass *>(bucket)->to_opentelemetry (scope, add_labels);
571+ auto sbucket = static_cast <MetricsBucketClass *>(bucket);
572+ auto start_ts = sbucket->start_tstamp ();
573+ auto end_ts = sbucket->end_tstamp ();
574+ if (!end_ts.tv_sec ) {
575+ timespec_get (&end_ts, TIME_UTC);
576+ }
577+ sbucket->to_opentelemetry (scope, start_ts, end_ts, add_labels);
567578 }
568579
569580 void window_external_prometheus (std::stringstream &out, AbstractMetricsBucket *bucket, Metric::LabelMap add_labels = {}) const
0 commit comments