@@ -90,6 +90,24 @@ impl SampleCollection<Gauge> {
9090
9191 sample. set ( value, time) ;
9292 }
93+
94+ pub fn increment ( & mut self , label_set : & LabelSet , time : DurationSinceUnixEpoch ) {
95+ let sample = self
96+ . samples
97+ . entry ( label_set. clone ( ) )
98+ . or_insert_with ( || Measurement :: new ( Gauge :: default ( ) , time) ) ;
99+
100+ sample. increment ( time) ;
101+ }
102+
103+ pub fn decrement ( & mut self , label_set : & LabelSet , time : DurationSinceUnixEpoch ) {
104+ let sample = self
105+ . samples
106+ . entry ( label_set. clone ( ) )
107+ . or_insert_with ( || Measurement :: new ( Gauge :: default ( ) , time) ) ;
108+
109+ sample. decrement ( time) ;
110+ }
93111}
94112
95113impl < T : Serialize > Serialize for SampleCollection < T > {
@@ -278,7 +296,7 @@ mod tests {
278296 #[ test]
279297 fn it_should_increment_the_counter_for_a_preexisting_label_set ( ) {
280298 let label_set = LabelSet :: default ( ) ;
281- let mut collection = SampleCollection :: default ( ) ;
299+ let mut collection = SampleCollection :: < Counter > :: default ( ) ;
282300
283301 // Initialize the sample
284302 collection. increment ( & label_set, sample_update_time ( ) ) ;
@@ -296,7 +314,7 @@ mod tests {
296314 #[ test]
297315 fn it_should_allow_increment_the_counter_for_a_non_existent_label_set ( ) {
298316 let label_set = LabelSet :: default ( ) ;
299- let mut collection = SampleCollection :: default ( ) ;
317+ let mut collection = SampleCollection :: < Counter > :: default ( ) ;
300318
301319 // Increment a non-existent label
302320 collection. increment ( & label_set, sample_update_time ( ) ) ;
@@ -312,7 +330,7 @@ mod tests {
312330 let label_set = LabelSet :: default ( ) ;
313331 let initial_time = sample_update_time ( ) ;
314332
315- let mut collection = SampleCollection :: default ( ) ;
333+ let mut collection = SampleCollection :: < Counter > :: default ( ) ;
316334 collection. increment ( & label_set, initial_time) ;
317335
318336 // Increment with a new time
@@ -330,7 +348,7 @@ mod tests {
330348 let label2 = LabelSet :: from ( [ ( "name" , "value2" ) ] ) ;
331349 let now = sample_update_time ( ) ;
332350
333- let mut collection = SampleCollection :: default ( ) ;
351+ let mut collection = SampleCollection :: < Counter > :: default ( ) ;
334352
335353 collection. increment ( & label1, now) ;
336354 collection. increment ( & label2, now) ;
@@ -351,9 +369,9 @@ mod tests {
351369 use crate :: gauge:: Gauge ;
352370
353371 #[ test]
354- fn it_should_increment_the_gauge_for_a_preexisting_label_set ( ) {
372+ fn it_should_allow_setting_the_gauge_for_a_preexisting_label_set ( ) {
355373 let label_set = LabelSet :: default ( ) ;
356- let mut collection = SampleCollection :: default ( ) ;
374+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
357375
358376 // Initialize the sample
359377 collection. set ( & label_set, 1.0 , sample_update_time ( ) ) ;
@@ -369,9 +387,9 @@ mod tests {
369387 }
370388
371389 #[ test]
372- fn it_should_allow_increment_the_gauge_for_a_non_existent_label_set ( ) {
390+ fn it_should_allow_setting_the_gauge_for_a_non_existent_label_set ( ) {
373391 let label_set = LabelSet :: default ( ) ;
374- let mut collection = SampleCollection :: default ( ) ;
392+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
375393
376394 // Set a non-existent label
377395 collection. set ( & label_set, 1.0 , sample_update_time ( ) ) ;
@@ -383,11 +401,11 @@ mod tests {
383401 }
384402
385403 #[ test]
386- fn it_should_update_the_latest_update_time_when_incremented ( ) {
404+ fn it_should_update_the_latest_update_time_when_setting ( ) {
387405 let label_set = LabelSet :: default ( ) ;
388406 let initial_time = sample_update_time ( ) ;
389407
390- let mut collection = SampleCollection :: default ( ) ;
408+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
391409 collection. set ( & label_set, 1.0 , initial_time) ;
392410
393411 // Set with a new time
@@ -400,12 +418,12 @@ mod tests {
400418 }
401419
402420 #[ test]
403- fn it_should_increment_the_gauge_for_multiple_labels ( ) {
421+ fn it_should_allow_setting_the_gauge_for_multiple_labels ( ) {
404422 let label1 = LabelSet :: from ( [ ( "name" , "value1" ) ] ) ;
405423 let label2 = LabelSet :: from ( [ ( "name" , "value2" ) ] ) ;
406424 let now = sample_update_time ( ) ;
407425
408- let mut collection = SampleCollection :: default ( ) ;
426+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
409427
410428 collection. set ( & label1, 1.0 , now) ;
411429 collection. set ( & label2, 2.0 , now) ;
@@ -414,5 +432,33 @@ mod tests {
414432 assert_eq ! ( collection. get( & label2) . unwrap( ) . value( ) , & Gauge :: new( 2.0 ) ) ;
415433 assert_eq ! ( collection. len( ) , 2 ) ;
416434 }
435+
436+ #[ test]
437+ fn it_should_allow_incrementing_the_gauge ( ) {
438+ let label_set = LabelSet :: default ( ) ;
439+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
440+
441+ // Initialize the sample
442+ collection. set ( & label_set, 1.0 , sample_update_time ( ) ) ;
443+
444+ // Increment
445+ collection. increment ( & label_set, sample_update_time ( ) ) ;
446+ let sample = collection. get ( & label_set) . unwrap ( ) ;
447+ assert_eq ! ( * sample. value( ) , Gauge :: new( 2.0 ) ) ;
448+ }
449+
450+ #[ test]
451+ fn it_should_allow_decrementing_the_gauge ( ) {
452+ let label_set = LabelSet :: default ( ) ;
453+ let mut collection = SampleCollection :: < Gauge > :: default ( ) ;
454+
455+ // Initialize the sample
456+ collection. set ( & label_set, 1.0 , sample_update_time ( ) ) ;
457+
458+ // Increment
459+ collection. decrement ( & label_set, sample_update_time ( ) ) ;
460+ let sample = collection. get ( & label_set) . unwrap ( ) ;
461+ assert_eq ! ( * sample. value( ) , Gauge :: new( 0.0 ) ) ;
462+ }
417463 }
418464}
0 commit comments