Import upstream v0.16.22, stripped

Upstream commit: 474dd0229cb20cf513036619781ed97bd8073c3f
Enterprise-only files removed or emptied: 63
Enterprise-only snippets removed: 117 in 50 files
Dangling module declarations removed: 5
Cargo edits turning enterprise off: 14
Verification: clean
Enterprise feature gates left for rebuilt features: 19 in 18 files

Produced by tools/fork/strip.py. The full report is in docs/fork/strip-reports/ on main.
This commit is contained in:
2026-09-18 10:21:56 -07:00
commit 7dae9b29fd
1650 changed files with 485521 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
/*
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use crate::config::telemetry::OtelMetrics;
use opentelemetry_sdk::metrics::{
Temporality,
data::{
AggregatedMetrics, Gauge, GaugeDataPoint, Histogram, HistogramDataPoint, Metric,
MetricData, ResourceMetrics, ScopeMetrics, Sum, SumDataPoint,
},
exporter::PushMetricExporter,
};
use std::time::SystemTime;
use trc::{Collector, TelemetryEvent};
impl OtelMetrics {
pub async fn push_metrics(&self, is_enterprise: bool, start_time: SystemTime) {
let mut metrics = Vec::with_capacity(256);
let time = SystemTime::now();
// Add counters
for counter in Collector::collect_counters(is_enterprise) {
metrics.push(Metric::new(
counter.id().as_str(),
counter.id().description(),
"events",
AggregatedMetrics::U64(MetricData::Sum(Sum::new(
vec![SumDataPoint::new(vec![], counter.value(), vec![])],
start_time,
time,
Temporality::Cumulative,
true,
))),
));
}
// Add gauges
for gauge in Collector::collect_gauges(is_enterprise) {
metrics.push(Metric::new(
gauge.id().as_str(),
gauge.id().description(),
gauge.id().unit(),
AggregatedMetrics::U64(MetricData::Gauge(Gauge::new(
vec![GaugeDataPoint::new(vec![], gauge.get(), vec![])],
Some(start_time),
time,
))),
));
}
// Add histograms
for histogram in Collector::collect_histograms(is_enterprise) {
metrics.push(Metric::new(
histogram.id().as_str(),
histogram.id().description(),
histogram.id().unit(),
AggregatedMetrics::U64(MetricData::Histogram(Histogram::new(
vec![HistogramDataPoint::new(
vec![],
histogram.count(),
histogram.upper_bounds_vec(),
histogram.buckets_vec(),
histogram.min(),
histogram.max(),
histogram.sum(),
vec![],
)],
start_time,
time,
Temporality::Cumulative,
))),
));
}
// Export metrics
let rm = ResourceMetrics::new(
self.resource.clone(),
vec![ScopeMetrics::new(self.instrumentation.clone(), metrics)],
);
if let Err(err) = self.exporter.export(&rm).await {
trc::event!(
Telemetry(TelemetryEvent::OtelMetricsExporterError),
Reason = err.to_string(),
);
}
}
pub fn enable_errors() {
// TODO: Remove this when the OpenTelemetry SDK supports error handling
/*let _ = set_error_handler(|error| {
trc::event!(
Telemetry(TelemetryEvent::OtelMetricsExporterError),
Reason = error.to_string(),
);
});*/
}
}