@@ -228,11 +228,14 @@ def call_update(counter):
228
228
update_total += val
229
229
return update_total
230
230
231
- def test_update (self ):
231
+ @mock .patch ("opentelemetry.sdk.metrics.export.aggregate.time_ns" )
232
+ def test_update (self , time_mock ):
233
+ time_mock .return_value = 123
232
234
counter = CounterAggregator ()
233
235
counter .update (1.0 )
234
236
counter .update (2.0 )
235
237
self .assertEqual (counter .current , 3.0 )
238
+ self .assertEqual (counter .last_update_timestamp , 123 )
236
239
237
240
def test_checkpoint (self ):
238
241
counter = CounterAggregator ()
@@ -246,8 +249,10 @@ def test_merge(self):
246
249
counter2 = CounterAggregator ()
247
250
counter .checkpoint = 1.0
248
251
counter2 .checkpoint = 3.0
252
+ counter2 .last_update_timestamp = 123
249
253
counter .merge (counter2 )
250
254
self .assertEqual (counter .checkpoint , 4.0 )
255
+ self .assertEqual (counter .last_update_timestamp , 123 )
251
256
252
257
def test_concurrent_update (self ):
253
258
counter = CounterAggregator ()
@@ -296,7 +301,9 @@ def call_update(mmsc):
296
301
count_ += 1
297
302
return MinMaxSumCountAggregator ._TYPE (min_ , max_ , sum_ , count_ )
298
303
299
- def test_update (self ):
304
+ @mock .patch ("opentelemetry.sdk.metrics.export.aggregate.time_ns" )
305
+ def test_update (self , time_mock ):
306
+ time_mock .return_value = 123
300
307
mmsc = MinMaxSumCountAggregator ()
301
308
# test current values without any update
302
309
self .assertEqual (mmsc .current , MinMaxSumCountAggregator ._EMPTY )
@@ -309,6 +316,7 @@ def test_update(self):
309
316
self .assertEqual (
310
317
mmsc .current , (min (values ), max (values ), sum (values ), len (values ))
311
318
)
319
+ self .assertEqual (mmsc .last_update_timestamp , 123 )
312
320
313
321
def test_checkpoint (self ):
314
322
mmsc = MinMaxSumCountAggregator ()
@@ -340,6 +348,9 @@ def test_merge(self):
340
348
mmsc1 .checkpoint = checkpoint1
341
349
mmsc2 .checkpoint = checkpoint2
342
350
351
+ mmsc1 .last_update_timestamp = 100
352
+ mmsc2 .last_update_timestamp = 123
353
+
343
354
mmsc1 .merge (mmsc2 )
344
355
345
356
self .assertEqual (
@@ -348,6 +359,7 @@ def test_merge(self):
348
359
checkpoint1 , checkpoint2
349
360
),
350
361
)
362
+ self .assertEqual (mmsc1 .last_update_timestamp , 123 )
351
363
352
364
def test_merge_checkpoint (self ):
353
365
func = MinMaxSumCountAggregator ._merge_checkpoint
@@ -421,7 +433,9 @@ def test_concurrent_update_and_checkpoint(self):
421
433
422
434
423
435
class TestObserverAggregator (unittest .TestCase ):
424
- def test_update (self ):
436
+ @mock .patch ("opentelemetry.sdk.metrics.export.aggregate.time_ns" )
437
+ def test_update (self , time_mock ):
438
+ time_mock .return_value = 123
425
439
observer = ObserverAggregator ()
426
440
# test current values without any update
427
441
self .assertEqual (observer .mmsc .current , (None , None , None , 0 ))
@@ -436,6 +450,7 @@ def test_update(self):
436
450
observer .mmsc .current ,
437
451
(min (values ), max (values ), sum (values ), len (values )),
438
452
)
453
+ self .assertEqual (observer .last_update_timestamp , 123 )
439
454
440
455
self .assertEqual (observer .current , values [- 1 ])
441
456
@@ -471,6 +486,77 @@ def test_merge(self):
471
486
observer1 .mmsc .checkpoint = mmsc_checkpoint1
472
487
observer2 .mmsc .checkpoint = mmsc_checkpoint2
473
488
489
+ observer1 .last_update_timestamp = 100
490
+ observer2 .last_update_timestamp = 123
491
+
492
+ observer1 .checkpoint = checkpoint1
493
+ observer2 .checkpoint = checkpoint2
494
+
495
+ observer1 .merge (observer2 )
496
+
497
+ self .assertEqual (
498
+ observer1 .checkpoint ,
499
+ (
500
+ min (checkpoint1 .min , checkpoint2 .min ),
501
+ max (checkpoint1 .max , checkpoint2 .max ),
502
+ checkpoint1 .sum + checkpoint2 .sum ,
503
+ checkpoint1 .count + checkpoint2 .count ,
504
+ checkpoint2 .last ,
505
+ ),
506
+ )
507
+ self .assertEqual (observer1 .last_update_timestamp , 123 )
508
+
509
+ def test_merge_last_updated (self ):
510
+ observer1 = ObserverAggregator ()
511
+ observer2 = ObserverAggregator ()
512
+
513
+ mmsc_checkpoint1 = MinMaxSumCountAggregator ._TYPE (3 , 150 , 101 , 3 )
514
+ mmsc_checkpoint2 = MinMaxSumCountAggregator ._TYPE (1 , 33 , 44 , 2 )
515
+
516
+ checkpoint1 = ObserverAggregator ._TYPE (* (mmsc_checkpoint1 + (23 ,)))
517
+
518
+ checkpoint2 = ObserverAggregator ._TYPE (* (mmsc_checkpoint2 + (27 ,)))
519
+
520
+ observer1 .mmsc .checkpoint = mmsc_checkpoint1
521
+ observer2 .mmsc .checkpoint = mmsc_checkpoint2
522
+
523
+ observer1 .last_update_timestamp = 123
524
+ observer2 .last_update_timestamp = 100
525
+
526
+ observer1 .checkpoint = checkpoint1
527
+ observer2 .checkpoint = checkpoint2
528
+
529
+ observer1 .merge (observer2 )
530
+
531
+ self .assertEqual (
532
+ observer1 .checkpoint ,
533
+ (
534
+ min (checkpoint1 .min , checkpoint2 .min ),
535
+ max (checkpoint1 .max , checkpoint2 .max ),
536
+ checkpoint1 .sum + checkpoint2 .sum ,
537
+ checkpoint1 .count + checkpoint2 .count ,
538
+ checkpoint1 .last ,
539
+ ),
540
+ )
541
+ self .assertEqual (observer1 .last_update_timestamp , 123 )
542
+
543
+ def test_merge_last_updated_none (self ):
544
+ observer1 = ObserverAggregator ()
545
+ observer2 = ObserverAggregator ()
546
+
547
+ mmsc_checkpoint1 = MinMaxSumCountAggregator ._TYPE (3 , 150 , 101 , 3 )
548
+ mmsc_checkpoint2 = MinMaxSumCountAggregator ._TYPE (1 , 33 , 44 , 2 )
549
+
550
+ checkpoint1 = ObserverAggregator ._TYPE (* (mmsc_checkpoint1 + (23 ,)))
551
+
552
+ checkpoint2 = ObserverAggregator ._TYPE (* (mmsc_checkpoint2 + (27 ,)))
553
+
554
+ observer1 .mmsc .checkpoint = mmsc_checkpoint1
555
+ observer2 .mmsc .checkpoint = mmsc_checkpoint2
556
+
557
+ observer1 .last_update_timestamp = None
558
+ observer2 .last_update_timestamp = 100
559
+
474
560
observer1 .checkpoint = checkpoint1
475
561
observer2 .checkpoint = checkpoint2
476
562
@@ -486,6 +572,7 @@ def test_merge(self):
486
572
checkpoint2 .last ,
487
573
),
488
574
)
575
+ self .assertEqual (observer1 .last_update_timestamp , 100 )
489
576
490
577
def test_merge_with_empty (self ):
491
578
observer1 = ObserverAggregator ()
@@ -496,6 +583,7 @@ def test_merge_with_empty(self):
496
583
497
584
observer1 .mmsc .checkpoint = mmsc_checkpoint1
498
585
observer1 .checkpoint = checkpoint1
586
+ observer1 .last_update_timestamp = 100
499
587
500
588
observer1 .merge (observer2 )
501
589
0 commit comments