5656/// Builds aggregate functions
5757pub ( crate ) struct AggregateBuilder < T > {
5858 /// The temporality used for the returned aggregate functions.
59- ///
60- /// If this is not provided, a default of cumulative will be used (except for the
61- /// last-value aggregate function where delta is the only appropriate
62- /// temporality).
63- temporality : Option < Temporality > ,
59+ temporality : Temporality ,
6460
6561 /// The attribute filter the aggregate function will use on the input of
6662 /// measurements.
@@ -72,7 +68,7 @@ pub(crate) struct AggregateBuilder<T> {
7268type Filter = Arc < dyn Fn ( & KeyValue ) -> bool + Send + Sync > ;
7369
7470impl < T : Number > AggregateBuilder < T > {
75- pub ( crate ) fn new ( temporality : Option < Temporality > , filter : Option < Filter > ) -> Self {
71+ pub ( crate ) fn new ( temporality : Temporality , filter : Option < Filter > ) -> Self {
7672 AggregateBuilder {
7773 temporality,
7874 filter,
@@ -96,16 +92,12 @@ impl<T: Number> AggregateBuilder<T> {
9692
9793 /// Builds a last-value aggregate function input and output.
9894 pub ( crate ) fn last_value ( & self ) -> ( impl Measure < T > , impl ComputeAggregation ) {
99- let lv = Arc :: new ( LastValue :: new ( ) ) ;
95+ let lv = Arc :: new ( LastValue :: new ( self . temporality ) ) ;
10096 let agg_lv = Arc :: clone ( & lv) ;
101- let t = self . temporality ;
10297
10398 (
10499 self . filter ( move |n, a : & [ KeyValue ] | lv. measure ( n, a) ) ,
105- move |dest : Option < & mut dyn Aggregation > | match t {
106- Some ( Temporality :: Delta ) => agg_lv. delta ( dest) ,
107- _ => agg_lv. cumulative ( dest) ,
108- } ,
100+ agg_lv,
109101 )
110102 }
111103
@@ -114,31 +106,23 @@ impl<T: Number> AggregateBuilder<T> {
114106 & self ,
115107 monotonic : bool ,
116108 ) -> ( impl Measure < T > , impl ComputeAggregation ) {
117- let s = Arc :: new ( PrecomputedSum :: new ( monotonic) ) ;
109+ let s = Arc :: new ( PrecomputedSum :: new ( self . temporality , monotonic) ) ;
118110 let agg_sum = Arc :: clone ( & s) ;
119- let t = self . temporality ;
120111
121112 (
122113 self . filter ( move |n, a : & [ KeyValue ] | s. measure ( n, a) ) ,
123- move |dest : Option < & mut dyn Aggregation > | match t {
124- Some ( Temporality :: Delta ) => agg_sum. delta ( dest) ,
125- _ => agg_sum. cumulative ( dest) ,
126- } ,
114+ agg_sum,
127115 )
128116 }
129117
130118 /// Builds a sum aggregate function input and output.
131119 pub ( crate ) fn sum ( & self , monotonic : bool ) -> ( impl Measure < T > , impl ComputeAggregation ) {
132- let s = Arc :: new ( Sum :: new ( monotonic) ) ;
120+ let s = Arc :: new ( Sum :: new ( self . temporality , monotonic) ) ;
133121 let agg_sum = Arc :: clone ( & s) ;
134- let t = self . temporality ;
135122
136123 (
137124 self . filter ( move |n, a : & [ KeyValue ] | s. measure ( n, a) ) ,
138- move |dest : Option < & mut dyn Aggregation > | match t {
139- Some ( Temporality :: Delta ) => agg_sum. delta ( dest) ,
140- _ => agg_sum. cumulative ( dest) ,
141- } ,
125+ agg_sum,
142126 )
143127 }
144128
@@ -149,17 +133,15 @@ impl<T: Number> AggregateBuilder<T> {
149133 record_min_max : bool ,
150134 record_sum : bool ,
151135 ) -> ( impl Measure < T > , impl ComputeAggregation ) {
152- let h = Arc :: new ( Histogram :: new ( boundaries, record_min_max, record_sum) ) ;
136+ let h = Arc :: new ( Histogram :: new (
137+ self . temporality ,
138+ boundaries,
139+ record_min_max,
140+ record_sum,
141+ ) ) ;
153142 let agg_h = Arc :: clone ( & h) ;
154- let t = self . temporality ;
155143
156- (
157- self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) ,
158- move |dest : Option < & mut dyn Aggregation > | match t {
159- Some ( Temporality :: Delta ) => agg_h. delta ( dest) ,
160- _ => agg_h. cumulative ( dest) ,
161- } ,
162- )
144+ ( self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) , agg_h)
163145 }
164146
165147 /// Builds an exponential histogram aggregate function input and output.
@@ -171,21 +153,15 @@ impl<T: Number> AggregateBuilder<T> {
171153 record_sum : bool ,
172154 ) -> ( impl Measure < T > , impl ComputeAggregation ) {
173155 let h = Arc :: new ( ExpoHistogram :: new (
156+ self . temporality ,
174157 max_size,
175158 max_scale,
176159 record_min_max,
177160 record_sum,
178161 ) ) ;
179162 let agg_h = Arc :: clone ( & h) ;
180- let t = self . temporality ;
181163
182- (
183- self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) ,
184- move |dest : Option < & mut dyn Aggregation > | match t {
185- Some ( Temporality :: Delta ) => agg_h. delta ( dest) ,
186- _ => agg_h. cumulative ( dest) ,
187- } ,
188- )
164+ ( self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) , agg_h)
189165 }
190166}
191167
@@ -201,7 +177,8 @@ mod tests {
201177
202178 #[ test]
203179 fn last_value_aggregation ( ) {
204- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( None , None ) . last_value ( ) ;
180+ let ( measure, agg) =
181+ AggregateBuilder :: < u64 > :: new ( Temporality :: Cumulative , None ) . last_value ( ) ;
205182 let mut a = Gauge {
206183 data_points : vec ! [ GaugeDataPoint {
207184 attributes: vec![ KeyValue :: new( "a" , 1 ) ] ,
@@ -227,7 +204,7 @@ mod tests {
227204 fn precomputed_sum_aggregation ( ) {
228205 for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
229206 let ( measure, agg) =
230- AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None ) . precomputed_sum ( true ) ;
207+ AggregateBuilder :: < u64 > :: new ( temporality, None ) . precomputed_sum ( true ) ;
231208 let mut a = Sum {
232209 data_points : vec ! [
233210 SumDataPoint {
@@ -268,7 +245,7 @@ mod tests {
268245 #[ test]
269246 fn sum_aggregation ( ) {
270247 for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
271- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None ) . sum ( true ) ;
248+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None ) . sum ( true ) ;
272249 let mut a = Sum {
273250 data_points : vec ! [
274251 SumDataPoint {
@@ -309,7 +286,7 @@ mod tests {
309286 #[ test]
310287 fn explicit_bucket_histogram_aggregation ( ) {
311288 for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
312- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None )
289+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None )
313290 . explicit_bucket_histogram ( vec ! [ 1.0 ] , true , true ) ;
314291 let mut a = Histogram {
315292 data_points : vec ! [ HistogramDataPoint {
@@ -352,7 +329,7 @@ mod tests {
352329 #[ test]
353330 fn exponential_histogram_aggregation ( ) {
354331 for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
355- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None )
332+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None )
356333 . exponential_bucket_histogram ( 4 , 20 , true , true ) ;
357334 let mut a = ExponentialHistogram {
358335 data_points : vec ! [ ExponentialHistogramDataPoint {
0 commit comments