pub trait Timed<T>where
T: ToTimerValue,{
// Required method
fn time_with_tags<'a>(
&'a self,
key: &'a str,
time: T,
) -> MetricBuilder<'_, '_, Timer>;
// Provided method
fn time(&self, key: &str, time: T) -> MetricResult<Timer> { ... }
}
Expand description
Trait for recording timings in milliseconds.
Timings are a positive number of milliseconds between a start and end
time. Examples include time taken to render a web page or time taken
for a database call to return. Duration
values are converted to
milliseconds before being recorded.
The following types are valid for timers:
u64
Duration
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§
Record a timing in milliseconds with the given key and return a
MetricBuilder
that can be used to add tags to the metric.
Provided Methods§
sourcefn time(&self, key: &str, time: T) -> MetricResult<Timer>
fn time(&self, key: &str, time: T) -> MetricResult<Timer>
Record a timing in milliseconds with the given key
Examples found in repository?
examples/nop-sink.rs (line 25)
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();
}
More examples
examples/simple-sink.rs (line 27)
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 61)
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 29)
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 30)
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());
}