dump_events/
dump-events.rs1extern crate freeswitch_esl_rs;
2use std::net::{TcpStream};
3use std::env;
4use std::collections::HashMap;
5use std::time::SystemTime;
6use freeswitch_esl_rs::{Connection,Client,Event};
7
8#[derive(Debug)]
9struct Stats {
10 event_per_tick: u64,
11 events_counts_per_sec: HashMap<String, u64>
12}
13
14fn main() -> std::io::Result<()> {
15 let args: Vec<String> = env::args().collect();
16 let host = &args[1];
17 let event = &args[2];
18 let mut stream = TcpStream::connect(host)?;
19
20 let conn = Connection::new(stream);
21 let mut client = Client::new(conn);
22 let mut stats = Stats{
23 event_per_tick: 0,
24 events_counts_per_sec: HashMap::new()
25 };
26
27 client.auth("cloudpbx").expect("fails to authenticate");
28 client.event(event).expect("fails enabling events");
29
30 let mut now = std::time::Instant::now();
31 let notify_on_secs = std::time::Duration::from_secs(1);
32
33 loop {
34 let event: Event = client.pull_event().unwrap();
35 let event_name = event.get("Event-Name").unwrap().to_string();
36
37 stats.event_per_tick += 1;
38 if event_name == "CUSTOM" {
39 let event_subclass = event.get("Event-Subclass").unwrap().to_string();
40 let mut event_name = format!("{}:{}", event_name, event_subclass);
41 if let Some(action) = event.get("CC-Action") {
42 event_name = format!("{}:{}", event_name, action.to_string())
43 }
44 if let Some(counter) = stats.events_counts_per_sec.get_mut(&event_name) {
45 *counter += 1;
46 } else {
47 stats.events_counts_per_sec.insert(event_name, 1);
48 }
49 } else {
50 if let Some(counter) = stats.events_counts_per_sec.get_mut(&event_name) {
51 *counter += 1;
52 } else {
53 stats.events_counts_per_sec.insert(event_name, 1);
54 }
55 }
56
57 if now.elapsed() >= notify_on_secs {
58 let stamp = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap();
59 println!("{} {:?} {:?}", stamp.as_secs(), now.elapsed(), stats);
60
61 now = std::time::Instant::now();
62 stats.event_per_tick = 0;
63 stats.events_counts_per_sec.clear();
64 }
65 }
66
67 Ok(())
68}