use haply::events::{ EventChannel, TimestampedEvent };
use std::env;
use std::time::{ Duration, UNIX_EPOCH };
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let poll_secs: u64 = env
::var("POLL_RATE")
.ok()
.and_then(|v| v.parse().ok())
.unwrap_or(5);
let mut interval = tokio::time::interval(Duration::from_secs(poll_secs));
let ws_url = "ws://localhost:10020";
let channel = EventChannel::new(ws_url).await;
let channel = match channel {
Ok(c) => c,
Err(e) => {
eprintln!("Failed to connect to WebSocket: {}", e);
return Err(e);
}
};
println!("Polling every {}s for new events…", poll_secs);
loop {
interval.tick().await;
let events = channel.read_events().await;
if events.is_empty() {
continue;
}
for ts_evt in events {
let TimestampedEvent { timestamp, event } = ts_evt;
let secs = timestamp.duration_since(UNIX_EPOCH)?.as_secs();
println!("--- [{}] {} ({:?}/{:?})", secs, event.name(), event.category, event.level);
println!("Data : {:?}", event.data);
if let Some(msg) = event.message {
println!("Message: {}", msg);
}
}
}
}