@@ -100,11 +100,7 @@ impl Default for AggregateTimeInitiator {
100
100
/// Builds aggregate functions
101
101
pub ( crate ) struct AggregateBuilder < T > {
102
102
/// The temporality used for the returned aggregate functions.
103
- ///
104
- /// If this is not provided, a default of cumulative will be used (except for the
105
- /// last-value aggregate function where delta is the only appropriate
106
- /// temporality).
107
- temporality : Option < Temporality > ,
103
+ temporality : Temporality ,
108
104
109
105
/// The attribute filter the aggregate function will use on the input of
110
106
/// measurements.
@@ -116,7 +112,7 @@ pub(crate) struct AggregateBuilder<T> {
116
112
type Filter = Arc < dyn Fn ( & KeyValue ) -> bool + Send + Sync > ;
117
113
118
114
impl < T : Number > AggregateBuilder < T > {
119
- pub ( crate ) fn new ( temporality : Option < Temporality > , filter : Option < Filter > ) -> Self {
115
+ pub ( crate ) fn new ( temporality : Temporality , filter : Option < Filter > ) -> Self {
120
116
AggregateBuilder {
121
117
temporality,
122
118
filter,
@@ -140,16 +136,12 @@ impl<T: Number> AggregateBuilder<T> {
140
136
141
137
/// Builds a last-value aggregate function input and output.
142
138
pub ( crate ) fn last_value ( & self ) -> ( impl Measure < T > , impl ComputeAggregation ) {
143
- let lv = Arc :: new ( LastValue :: new ( ) ) ;
139
+ let lv = Arc :: new ( LastValue :: new ( self . temporality ) ) ;
144
140
let agg_lv = Arc :: clone ( & lv) ;
145
- let t = self . temporality ;
146
141
147
142
(
148
143
self . filter ( move |n, a : & [ KeyValue ] | lv. measure ( n, a) ) ,
149
- move |dest : Option < & mut dyn Aggregation > | match t {
150
- Some ( Temporality :: Delta ) => agg_lv. delta ( dest) ,
151
- _ => agg_lv. cumulative ( dest) ,
152
- } ,
144
+ agg_lv,
153
145
)
154
146
}
155
147
@@ -158,31 +150,23 @@ impl<T: Number> AggregateBuilder<T> {
158
150
& self ,
159
151
monotonic : bool ,
160
152
) -> ( impl Measure < T > , impl ComputeAggregation ) {
161
- let s = Arc :: new ( PrecomputedSum :: new ( monotonic) ) ;
153
+ let s = Arc :: new ( PrecomputedSum :: new ( self . temporality , monotonic) ) ;
162
154
let agg_sum = Arc :: clone ( & s) ;
163
- let t = self . temporality ;
164
155
165
156
(
166
157
self . filter ( move |n, a : & [ KeyValue ] | s. measure ( n, a) ) ,
167
- move |dest : Option < & mut dyn Aggregation > | match t {
168
- Some ( Temporality :: Delta ) => agg_sum. delta ( dest) ,
169
- _ => agg_sum. cumulative ( dest) ,
170
- } ,
158
+ agg_sum,
171
159
)
172
160
}
173
161
174
162
/// Builds a sum aggregate function input and output.
175
163
pub ( crate ) fn sum ( & self , monotonic : bool ) -> ( impl Measure < T > , impl ComputeAggregation ) {
176
- let s = Arc :: new ( Sum :: new ( monotonic) ) ;
164
+ let s = Arc :: new ( Sum :: new ( self . temporality , monotonic) ) ;
177
165
let agg_sum = Arc :: clone ( & s) ;
178
- let t = self . temporality ;
179
166
180
167
(
181
168
self . filter ( move |n, a : & [ KeyValue ] | s. measure ( n, a) ) ,
182
- move |dest : Option < & mut dyn Aggregation > | match t {
183
- Some ( Temporality :: Delta ) => agg_sum. delta ( dest) ,
184
- _ => agg_sum. cumulative ( dest) ,
185
- } ,
169
+ agg_sum,
186
170
)
187
171
}
188
172
@@ -193,17 +177,15 @@ impl<T: Number> AggregateBuilder<T> {
193
177
record_min_max : bool ,
194
178
record_sum : bool ,
195
179
) -> ( impl Measure < T > , impl ComputeAggregation ) {
196
- let h = Arc :: new ( Histogram :: new ( boundaries, record_min_max, record_sum) ) ;
180
+ let h = Arc :: new ( Histogram :: new (
181
+ self . temporality ,
182
+ boundaries,
183
+ record_min_max,
184
+ record_sum,
185
+ ) ) ;
197
186
let agg_h = Arc :: clone ( & h) ;
198
- let t = self . temporality ;
199
187
200
- (
201
- self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) ,
202
- move |dest : Option < & mut dyn Aggregation > | match t {
203
- Some ( Temporality :: Delta ) => agg_h. delta ( dest) ,
204
- _ => agg_h. cumulative ( dest) ,
205
- } ,
206
- )
188
+ ( self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) , agg_h)
207
189
}
208
190
209
191
/// Builds an exponential histogram aggregate function input and output.
@@ -215,21 +197,15 @@ impl<T: Number> AggregateBuilder<T> {
215
197
record_sum : bool ,
216
198
) -> ( impl Measure < T > , impl ComputeAggregation ) {
217
199
let h = Arc :: new ( ExpoHistogram :: new (
200
+ self . temporality ,
218
201
max_size,
219
202
max_scale,
220
203
record_min_max,
221
204
record_sum,
222
205
) ) ;
223
206
let agg_h = Arc :: clone ( & h) ;
224
- let t = self . temporality ;
225
207
226
- (
227
- self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) ,
228
- move |dest : Option < & mut dyn Aggregation > | match t {
229
- Some ( Temporality :: Delta ) => agg_h. delta ( dest) ,
230
- _ => agg_h. cumulative ( dest) ,
231
- } ,
232
- )
208
+ ( self . filter ( move |n, a : & [ KeyValue ] | h. measure ( n, a) ) , agg_h)
233
209
}
234
210
}
235
211
@@ -245,7 +221,8 @@ mod tests {
245
221
246
222
#[ test]
247
223
fn last_value_aggregation ( ) {
248
- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( None , None ) . last_value ( ) ;
224
+ let ( measure, agg) =
225
+ AggregateBuilder :: < u64 > :: new ( Temporality :: Cumulative , None ) . last_value ( ) ;
249
226
let mut a = Gauge {
250
227
data_points : vec ! [ GaugeDataPoint {
251
228
attributes: vec![ KeyValue :: new( "a" , 1 ) ] ,
@@ -271,7 +248,7 @@ mod tests {
271
248
fn precomputed_sum_aggregation ( ) {
272
249
for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
273
250
let ( measure, agg) =
274
- AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None ) . precomputed_sum ( true ) ;
251
+ AggregateBuilder :: < u64 > :: new ( temporality, None ) . precomputed_sum ( true ) ;
275
252
let mut a = Sum {
276
253
data_points : vec ! [
277
254
SumDataPoint {
@@ -312,7 +289,7 @@ mod tests {
312
289
#[ test]
313
290
fn sum_aggregation ( ) {
314
291
for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
315
- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None ) . sum ( true ) ;
292
+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None ) . sum ( true ) ;
316
293
let mut a = Sum {
317
294
data_points : vec ! [
318
295
SumDataPoint {
@@ -353,7 +330,7 @@ mod tests {
353
330
#[ test]
354
331
fn explicit_bucket_histogram_aggregation ( ) {
355
332
for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
356
- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None )
333
+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None )
357
334
. explicit_bucket_histogram ( vec ! [ 1.0 ] , true , true ) ;
358
335
let mut a = Histogram {
359
336
data_points : vec ! [ HistogramDataPoint {
@@ -396,7 +373,7 @@ mod tests {
396
373
#[ test]
397
374
fn exponential_histogram_aggregation ( ) {
398
375
for temporality in [ Temporality :: Delta , Temporality :: Cumulative ] {
399
- let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( Some ( temporality) , None )
376
+ let ( measure, agg) = AggregateBuilder :: < u64 > :: new ( temporality, None )
400
377
. exponential_bucket_histogram ( 4 , 20 , true , true ) ;
401
378
let mut a = ExponentialHistogram {
402
379
data_points : vec ! [ ExponentialHistogramDataPoint {
0 commit comments