Skip to content

Commit eb4e26a

Browse files
committed
Fix versioned_meter calls in tests, fix all tests in apollo-router/src/metrics/aggregation.rs
1 parent 5352b72 commit eb4e26a

File tree

3 files changed

+56
-48
lines changed

3 files changed

+56
-48
lines changed

apollo-router/src/metrics/aggregation.rs

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ impl InstrumentProvider for AggregateInstrumentProvider {
392392
#[cfg(test)]
393393
mod test {
394394
use std::sync::Arc;
395+
use std::sync::Weak;
395396
use std::sync::atomic::AtomicBool;
396397
use std::sync::atomic::AtomicI64;
397398
use std::time::Duration;
@@ -400,20 +401,47 @@ mod test {
400401
use crate::metrics::aggregation::MeterProviderType;
401402
use crate::metrics::filter::FilterMeterProvider;
402403
use async_trait::async_trait;
404+
use opentelemetry::InstrumentationScope;
403405
use opentelemetry::metrics::MeterProvider;
404406
use opentelemetry_sdk::error::OTelSdkResult;
405407
use opentelemetry_sdk::metrics::ManualReader;
406408
use opentelemetry_sdk::metrics::MeterProviderBuilder;
407409
use opentelemetry_sdk::metrics::PeriodicReader;
410+
use opentelemetry_sdk::metrics::Pipeline;
408411
use opentelemetry_sdk::metrics::Temporality;
409-
use opentelemetry_sdk::metrics::data::Gauge;
410412
use opentelemetry_sdk::metrics::data::ResourceMetrics;
411413
use opentelemetry_sdk::metrics::exporter::PushMetricExporter;
412414
use opentelemetry_sdk::metrics::reader::MetricReader;
413415

414416
#[derive(Clone, Debug)]
415417
struct SharedReader(Arc<ManualReader>);
416418

419+
impl MetricReader for SharedReader {
420+
fn register_pipeline(&self, pipeline: Weak<Pipeline>) {
421+
self.0.register_pipeline(pipeline)
422+
}
423+
424+
fn collect(&self, rm: &mut ResourceMetrics) -> OTelSdkResult {
425+
self.0.collect(rm)
426+
}
427+
428+
fn force_flush(&self) -> OTelSdkResult {
429+
self.0.force_flush()
430+
}
431+
432+
fn shutdown(&self) -> OTelSdkResult {
433+
self.0.shutdown()
434+
}
435+
436+
fn temporality(&self, _kind: opentelemetry_sdk::metrics::InstrumentKind) -> Temporality {
437+
Temporality::Cumulative
438+
}
439+
440+
fn shutdown_with_timeout(&self, _timeout: Duration) -> OTelSdkResult {
441+
self.shutdown()
442+
}
443+
}
444+
417445
#[test]
418446
fn test_i64_gauge_drop() {
419447
let reader = SharedReader(Arc::new(ManualReader::builder().build()));
@@ -437,7 +465,7 @@ mod test {
437465
callback_observe_counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
438466
i.observe(count + 1, &[])
439467
})
440-
.init();
468+
.build();
441469

442470
let mut result = ResourceMetrics::default();
443471

@@ -486,7 +514,7 @@ mod test {
486514
callback_observe_counter1.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
487515
i.observe(count + 1, &[])
488516
})
489-
.init();
517+
.build();
490518

491519
let mut result = ResourceMetrics::default();
492520

@@ -506,7 +534,7 @@ mod test {
506534
callback_observe_counter2.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
507535
i.observe(count + 1, &[])
508536
})
509-
.init();
537+
.build();
510538

511539
// Fetching metrics will call the observer ONLY on the remaining gauge
512540
reader
@@ -518,39 +546,22 @@ mod test {
518546
}
519547

520548
fn get_gauge_value(result: &mut ResourceMetrics) -> i64 {
521-
assert_eq!(result.scope_metrics().len(), 1);
522-
assert_eq!(result.scope_metrics().first().unwrap().metrics().len(), 1);
523-
assert_eq!(
524-
result
525-
.scope_metrics()
526-
.first()
527-
.unwrap()
528-
.metrics
529-
.first()
530-
.unwrap()
531-
.data
532-
.as_any()
533-
.downcast_ref::<Gauge<i64>>()
534-
.unwrap()
535-
.data_points
536-
.len(),
537-
1
538-
);
539-
result
540-
.scope_metrics()
541-
.first()
542-
.unwrap()
543-
.metrics
544-
.first()
545-
.unwrap()
546-
.data
547-
.as_any()
548-
.downcast_ref::<Gauge<i64>>()
549-
.unwrap()
550-
.data_points
551-
.first()
552-
.unwrap()
553-
.value
549+
let scope_metrics: Vec<_> = result.scope_metrics().collect();
550+
assert_eq!(scope_metrics.len(), 1);
551+
552+
let metrics: Vec<_> = scope_metrics.first().unwrap().metrics().collect();
553+
assert_eq!(metrics.len(), 1);
554+
555+
let metric = metrics.first().unwrap();
556+
557+
match metric.data() {
558+
opentelemetry_sdk::metrics::data::AggregatedMetrics::F64(_metric_data) => panic!("Expected i64 gauge metric"),
559+
opentelemetry_sdk::metrics::data::AggregatedMetrics::U64(_metric_data) => panic!("Expected i64 gauge metric"),
560+
opentelemetry_sdk::metrics::data::AggregatedMetrics::I64(metric_data) => match metric_data {
561+
opentelemetry_sdk::metrics::data::MetricData::Gauge(gauge) => gauge.data_points().next().unwrap().value(),
562+
_ => panic!("Expected gauge metric")
563+
},
564+
}
554565
}
555566

556567
#[test]
@@ -571,13 +582,13 @@ mod test {
571582
);
572583

573584
let counter = meter_provider
574-
.versioned_meter("test", None::<String>, None::<String>, None)
585+
.meter_with_scope(InstrumentationScope::builder("test").build())
575586
.u64_counter("test.counter")
576-
.init();
587+
.build();
577588
counter.add(1, &[]);
578589
let mut resource_metrics = ResourceMetrics::default();
579590
reader.collect(&mut resource_metrics).unwrap();
580-
assert_eq!(1, resource_metrics.scope_metrics().len());
591+
assert_eq!(1, resource_metrics.scope_metrics().count());
581592
}
582593

583594
struct TestExporter {
@@ -625,9 +636,9 @@ mod test {
625636
fn count(&self) {
626637
let counter = self
627638
.meter_provider
628-
.versioned_meter("test", None::<String>, None::<String>, None)
639+
.meter_with_scope(InstrumentationScope::builder("test").build())
629640
.u64_counter("test.counter")
630-
.init();
641+
.build();
631642
counter.add(1, &[]);
632643
}
633644
}
@@ -703,7 +714,6 @@ mod test {
703714
shutdown: shutdown.clone(),
704715
})
705716
.with_interval(Duration::from_millis(10))
706-
.with_timeout(Duration::from_millis(10))
707717
.build()
708718
}
709719
}

apollo-router/src/metrics/filter.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ mod test {
282282
.with_reader(PeriodicReader::builder(exporter.clone()).build())
283283
.build(),
284284
);
285-
let filtered = meter_provider.versioned_meter("filtered", "".into(), "".into(), None);
285+
let filtered = meter_provider.delegate.versioned_meter("filtered", "".into(), "".into(), None);
286286
// Matches allow
287287
filtered
288288
.u64_counter("apollo.router.operations")
@@ -394,7 +394,7 @@ mod test {
394394
.with_reader(PeriodicReader::builder(exporter.clone()).build())
395395
.build(),
396396
);
397-
let filtered = meter_provider.versioned_meter("filtered", "".into(), "".into(), None);
397+
let filtered = meter_provider.delegate.versioned_meter("filtered", "".into(), "".into(), None);
398398
filtered
399399
.u64_counter("apollo.router.operations")
400400
.with_description("desc")
@@ -517,7 +517,7 @@ mod test {
517517
.with_reader(PeriodicReader::builder(exporter.clone()).build())
518518
.build(),
519519
);
520-
let filtered = meter_provider.versioned_meter("filtered", "".into(), "".into(), None);
520+
let filtered = meter_provider.delegate.versioned_meter("filtered", "".into(), "".into(), None);
521521
filtered
522522
.u64_counter("apollo.router.operations.error")
523523
.build()

apollo-router/tests/common.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ use opentelemetry::trace::SpanContext;
3030
use opentelemetry::trace::TraceContextExt;
3131
use opentelemetry::trace::TraceId;
3232
use opentelemetry::trace::TracerProvider as OtherTracerProvider;
33-
use opentelemetry_otlp::HttpExporterBuilder;
34-
use opentelemetry_otlp::Protocol;
3533
use opentelemetry_otlp::SpanExporterBuilder;
3634
use opentelemetry_otlp::WithExportConfig;
3735
use opentelemetry_proto::tonic::collector::metrics::v1::ExportMetricsServiceRequest;

0 commit comments

Comments
 (0)