pub trait Counted<T>where
T: ToCounterValue,{
// Required method
fn count_with_tags<'a>(
&'a self,
key: &'a str,
count: T,
) -> MetricBuilder<'_, '_, Counter>;
// Provided method
fn count(&self, key: &str, count: T) -> MetricResult<Counter> { ... }
}
Expand description
Trait for incrementing and decrementing counters.
Counters are simple values incremented or decremented by a client. The rates at which these events occur or average values will be determined by the server receiving them. Examples of counter uses include number of logins to a system or requests received.
The following types are valid for counters:
i64
See the Statsd spec for more information.
Note that tags are a Datadog extension to Statsd and may not be supported by your server.
Required Methods§
Increment or decrement the counter by the given amount and return
a MetricBuilder
that can be used to add tags to the metric.
Provided Methods§
sourcefn count(&self, key: &str, count: T) -> MetricResult<Counter>
fn count(&self, key: &str, count: T) -> MetricResult<Counter>
Increment or decrement the counter by the given amount
Examples found in repository?
More examples
examples/nop-sink.rs (line 22)
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
fn main() {
let sink = NopMetricSink;
let client = StatsdClient::from_sink("example.prefix", sink);
client.count("example.counter", 1).unwrap();
client.gauge("example.gauge", 5).unwrap();
client.gauge("example.gauge", 5.0).unwrap();
client.time("example.timer", 32).unwrap();
client.time("example.timer", Duration::from_millis(32)).unwrap();
client.histogram("example.histogram", 22).unwrap();
client.histogram("example.histogram", Duration::from_nanos(22)).unwrap();
client.histogram("example.histogram", 22.0).unwrap();
client.distribution("example.distribution", 33).unwrap();
client.distribution("example.distribution", 33.0).unwrap();
client.meter("example.meter", 8).unwrap();
client.set("example.set", 44).unwrap();
}
examples/simple-sink.rs (line 24)
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
fn main() {
let sock = UdpSocket::bind("0.0.0.0:0").unwrap();
let sink = UdpMetricSink::from(("localhost", DEFAULT_PORT), sock).unwrap();
let client = StatsdClient::from_sink("example.prefix", sink);
client.count("example.counter", 1).unwrap();
client.gauge("example.gauge", 5).unwrap();
client.gauge("example.gauge", 5.0).unwrap();
client.time("example.timer", 32).unwrap();
client.time("example.timer", Duration::from_millis(32)).unwrap();
client.histogram("example.histogram", 22).unwrap();
client.histogram("example.histogram", Duration::from_nanos(22)).unwrap();
client.histogram("example.histogram", 22.0).unwrap();
client.distribution("example.distribution", 33).unwrap();
client.distribution("example.distribution", 33.0).unwrap();
client.meter("example.meter", 8).unwrap();
client.set("example.set", 44).unwrap();
}
examples/wrapped.rs (line 58)
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
fn main() {
let real_sink = NopMetricSink;
let reference1 = CloneableSink::new(real_sink);
let reference2 = reference1.clone();
let client = StatsdClient::from_sink("prefix", reference1);
let _ = reference2.flush();
client.count("example.counter", 1).unwrap();
client.gauge("example.gauge", 5).unwrap();
client.gauge("example.gauge", 5.0).unwrap();
client.time("example.timer", 32).unwrap();
client.time("example.timer", Duration::from_millis(32)).unwrap();
client.histogram("example.histogram", 22).unwrap();
client.histogram("example.histogram", Duration::from_nanos(22)).unwrap();
client.histogram("example.histogram", 22.0).unwrap();
client.distribution("example.distribution", 33).unwrap();
client.distribution("example.distribution", 33.0).unwrap();
client.meter("example.meter", 8).unwrap();
client.set("example.set", 44).unwrap();
let _ = reference2.flush();
}
examples/production-sink.rs (line 26)
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
fn main() {
let sock = UdpSocket::bind("0.0.0.0:0").unwrap();
let buffered = BufferedUdpMetricSink::from(("localhost", DEFAULT_PORT), sock).unwrap();
let queued = QueuingMetricSink::from(buffered);
let client = StatsdClient::from_sink("example.prefix", queued);
client.count("example.counter", 1).unwrap();
client.gauge("example.gauge", 5).unwrap();
client.gauge("example.gauge", 5.0).unwrap();
client.time("example.timer", 32).unwrap();
client.time("example.timer", Duration::from_millis(32)).unwrap();
client.histogram("example.histogram", 22).unwrap();
client.histogram("example.histogram", Duration::from_nanos(22)).unwrap();
client.histogram("example.histogram", 22.0).unwrap();
client.distribution("example.distribution", 33).unwrap();
client.distribution("example.distribution", 33.0).unwrap();
client.meter("example.meter", 8).unwrap();
client.set("example.set", 44).unwrap();
}
examples/spy-sink.rs (line 27)
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
fn main() {
// Ensure that the sink is dropped, forcing a flush of all buffered metrics.
let rx = {
// Use a buffer size larger than any metrics here so we can demonstrate that
// each metric ends up with a newline (\n) after it.
let (rx, sink) = BufferedSpyMetricSink::with_capacity(None, Some(64));
let client = StatsdClient::from_sink("example.prefix", sink);
client.count("example.counter", 1).unwrap();
client.gauge("example.gauge", 5).unwrap();
client.gauge("example.gauge", 5.0).unwrap();
client.time("example.timer", 32).unwrap();
client.time("example.timer", Duration::from_millis(32)).unwrap();
client.histogram("example.histogram", 22).unwrap();
client.histogram("example.histogram", Duration::from_nanos(22)).unwrap();
client.histogram("example.histogram", 22.0).unwrap();
client.distribution("example.distribution", 33).unwrap();
client.distribution("example.distribution", 33.0).unwrap();
client.meter("example.meter", 8).unwrap();
client.set("example.set", 44).unwrap();
rx
};
let mut buffer = Vec::new();
while let Ok(v) = rx.try_recv() {
buffer.extend(v);
}
println!("Contents of wrapped buffer:\n{}", String::from_utf8(buffer).unwrap());
}