@@ -219,6 +219,16 @@ impl Client {
219
219
let data = self . prepare ( format ! ( "{}:{}|h" , metric, value) ) ;
220
220
self . send ( data) ;
221
221
}
222
+
223
+ /// Send a key/value
224
+ ///
225
+ /// ```ignore
226
+ /// client.kv("key", 1.);
227
+ /// ```
228
+ pub fn kv ( & self , metric : & str , value : f64 ) {
229
+ let data = self . prepare ( format ! ( "{}:{}|kv" , metric, value) ) ;
230
+ self . send ( data) ;
231
+ }
222
232
}
223
233
224
234
pub struct Pipeline {
@@ -384,6 +394,20 @@ impl Pipeline {
384
394
self . stats . push_back ( data) ;
385
395
}
386
396
397
+ /// Send a key/value.
398
+ ///
399
+ /// ```
400
+ /// use statsd::client::Pipeline;
401
+ ///
402
+ /// let mut pipe = Pipeline::new();
403
+ /// // pass response size value
404
+ /// pipe.kv("response.size", 256.);
405
+ /// ```
406
+ pub fn kv ( & mut self , metric : & str , value : f64 ) {
407
+ let data = format ! ( "{}:{}|kv" , metric, value) ;
408
+ self . stats . push_back ( data) ;
409
+ }
410
+
387
411
/// Send data along the UDP socket.
388
412
pub fn send ( & mut self , client : & Client ) {
389
413
let mut _data = String :: new ( ) ;
@@ -566,6 +590,14 @@ mod test {
566
590
assert_eq ! ( "myapp.metric:9.1|h" , response) ;
567
591
}
568
592
593
+ #[ test]
594
+ fn test_sending_kv ( ) {
595
+ let server = Server :: new ( ) ;
596
+ let client = Client :: new ( server. addr ( ) , "myapp" ) . unwrap ( ) ;
597
+ let response = server. run_while_receiving ( || client. kv ( "metric" , 15.26 ) ) ;
598
+ assert_eq ! ( "myapp.metric:15.26|kv" , response) ;
599
+ }
600
+
569
601
#[ test]
570
602
fn test_pipeline_sending_time_block ( ) {
571
603
let server = Server :: new ( ) ;
@@ -608,6 +640,18 @@ mod test {
608
640
assert_eq ! ( "myapp.metric:9.1|h" , response) ;
609
641
}
610
642
643
+ #[ test]
644
+ fn test_pipeline_sending_kv ( ) {
645
+ let server = Server :: new ( ) ;
646
+ let client = Client :: new ( server. addr ( ) , "myapp" ) . unwrap ( ) ;
647
+ let response = server. run_while_receiving ( || {
648
+ let mut pipeline = client. pipeline ( ) ;
649
+ pipeline. kv ( "metric" , 15.26 ) ;
650
+ pipeline. send ( & client) ;
651
+ } ) ;
652
+ assert_eq ! ( "myapp.metric:15.26|kv" , response) ;
653
+ }
654
+
611
655
#[ test]
612
656
fn test_pipeline_sending_multiple_data ( ) {
613
657
let server = Server :: new ( ) ;
0 commit comments