// Cadence - An extensible Statsd client for Rust!
//
// To the extent possible under law, the author(s) have dedicated all copyright and
// related and neighboring rights to this file to the public domain worldwide.
// This software is distributed without any warranty.
//
// You should have received a copy of the CC0 Public Domain Dedication along with this
// software. If not, see .
// This example shows how you might use the Cadence client in your multithreaded
// application by wrapping it in an Arc pointer. This allows you to access the
// client from multiple threads.
use cadence::prelude::*;
use cadence::{NopMetricSink, StatsdClient};
use std::sync::Arc;
use std::thread;
pub trait RequestHandler {
fn handle(&self) -> Result<(), String>;
}
pub struct ThreadedHandler {
metrics: Arc,
}
impl ThreadedHandler {
fn new() -> ThreadedHandler {
ThreadedHandler {
metrics: Arc::new(StatsdClient::from_sink("example.prefix", NopMetricSink)),
}
}
}
impl RequestHandler for ThreadedHandler {
fn handle(&self) -> Result<(), String> {
let metrics_ref = self.metrics.clone();
let t = thread::spawn(move || {
let _ = metrics_ref.count("request.handled", 1);
println!("Hello from a threaded handler!");
});
t.join().unwrap();
Ok(())
}
}
fn main() {
let handler = ThreadedHandler::new();
handler.handle().unwrap();
}