Skip to content

Commit 1094ea6

Browse files
authored
Merge pull request #29 from jnth/feature/handle_kv_metric
Handle key/value metric.
2 parents 4145487 + 2bcde15 commit 1094ea6

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "statsd"
3-
version = "0.15.0"
3+
version = "0.16.0"
44
description = "A basic statsd client for rust."
55
homepage = "https://github.com/markstory/rust-statsd"
66
readme = "README.md"

README.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Add the `statsd` package as a dependency in your `Cargo.toml` file:
1010

1111
```toml
1212
[dependencies]
13-
statsd = "^0.13.1"
13+
statsd = "^0.16"
1414
```
1515

1616
You need rustc >= 1.31.0 for statsd to work.
@@ -48,6 +48,9 @@ client.count("some.counter", 511.0);
4848

4949
// Send a histogram value as a float.
5050
client.histogram("some.histogram", 511.0);
51+
52+
// Send a key/value.
53+
client.kv("some.data", 15.26);
5154
```
5255

5356
### Tracking Timers
@@ -86,6 +89,9 @@ pipe.count("some.counter", 511.0);
8689
// Send a histogram value as a float.
8790
pipe.histogram("some.histogram", 511.0);
8891

92+
// Send a key/value.
93+
pipe.kv("some.data", 15.26);
94+
8995
// Set max UDP packet size if you wish, default is 512
9096
pipe.set_max_udp_size(128);
9197

src/client.rs

+44
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,16 @@ impl Client {
219219
let data = self.prepare(format!("{}:{}|h", metric, value));
220220
self.send(data);
221221
}
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+
}
222232
}
223233

224234
pub struct Pipeline {
@@ -384,6 +394,20 @@ impl Pipeline {
384394
self.stats.push_back(data);
385395
}
386396

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+
387411
/// Send data along the UDP socket.
388412
pub fn send(&mut self, client: &Client) {
389413
let mut _data = String::new();
@@ -566,6 +590,14 @@ mod test {
566590
assert_eq!("myapp.metric:9.1|h", response);
567591
}
568592

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+
569601
#[test]
570602
fn test_pipeline_sending_time_block() {
571603
let server = Server::new();
@@ -608,6 +640,18 @@ mod test {
608640
assert_eq!("myapp.metric:9.1|h", response);
609641
}
610642

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+
611655
#[test]
612656
fn test_pipeline_sending_multiple_data() {
613657
let server = Server::new();

0 commit comments

Comments
 (0)