From 9201c67108423f02cb33f75bc072a0247af91e05 Mon Sep 17 00:00:00 2001 From: Trevor Merritt Date: Mon, 21 Apr 2025 13:03:49 -0400 Subject: [PATCH] uses a default list if no file is passed --- hosts.txt | 0 peterborough.txt | 14 ++++++ src/bin/pp.rs | 121 +++++++++++++++++++++++++---------------------- 3 files changed, 78 insertions(+), 57 deletions(-) create mode 100644 hosts.txt create mode 100644 peterborough.txt diff --git a/hosts.txt b/hosts.txt new file mode 100644 index 0000000..e69de29 diff --git a/peterborough.txt b/peterborough.txt new file mode 100644 index 0000000..d605535 --- /dev/null +++ b/peterborough.txt @@ -0,0 +1,14 @@ +10.3.100.1,Belleville Router +10.11.31.3,Belleville VPN 11-31 +10.12.32.1,Belleville VPN 12-32 +10.11.21.1,Lindsay VPN 11-21 +10.12.22.1,Lindsay VPN 11-22 +8.8.8.8,Google DNS +1.1.1.1,1111 DNS +24.51.235.162,Peterborough Cogeco +99.214.0.92,Peterborough Rogers +216.234.202.122,Lindsay Starlink +24.143.184.98,Lindsay Cogeco +192.186.110.6,Belleville Cogeco +129.222.197.36,Belleville Starlink +192.168.0.50,Sign diff --git a/src/bin/pp.rs b/src/bin/pp.rs index e0bda8b..06cde4c 100644 --- a/src/bin/pp.rs +++ b/src/bin/pp.rs @@ -18,79 +18,87 @@ use std::{env, error::Error, ffi::OsString, process}; fn get_default_targets() -> BTreeMap { let mut working = BTreeMap::new(); working.insert("Localhost".to_string(), - TargetState { - name: "Localhost".to_string(), - target: Ipv4Addr::new(127,0,0,1), - ..TargetState::default() - } + TargetState { + name: "Localhost".to_string(), + target: Ipv4Addr::new(127, 0, 0, 1), + ..TargetState::default() + }, ); working.insert("Home Gateway".to_string(), - TargetState { - name: "Home Gateway".to_string(), - target: Ipv4Addr::new(172,24,0,1), - ..TargetState::default() - } + TargetState { + name: "Home Gateway".to_string(), + target: Ipv4Addr::new(172, 24, 0, 1), + ..TargetState::default() + }, ); working.insert("1111 DNS".to_string(), - TargetState { - name: "1111 DNS".to_string(), - target: Ipv4Addr::new(1,1,1,1), - ..TargetState::default() - } + TargetState { + name: "1111 DNS".to_string(), + target: Ipv4Addr::new(1, 1, 1, 1), + ..TargetState::default() + }, ); working.insert("Google DNS".to_string(), - TargetState { - name: "Google DNS".to_string(), - target: Ipv4Addr::new(8,8,8,8), - ..TargetState::default() - } + TargetState { + name: "Google DNS".to_string(), + target: Ipv4Addr::new(8, 8, 8, 8), + ..TargetState::default() + }, ); working.insert("Site IP 1".to_string(), - TargetState { - name: "Site IP 1".to_string(), - target: Ipv4Addr::new(216,121,247,231), - ..TargetState::default() - } + TargetState { + name: "Site IP 1".to_string(), + target: Ipv4Addr::new(216, 121, 247, 231), + ..TargetState::default() + }, ); working.insert("Site IP 2".to_string(), - TargetState { - name: "Site IP 2".to_string(), - target: Ipv4Addr::new(216,234,202,122), - ..TargetState::default() - } + TargetState { + name: "Site IP 2".to_string(), + target: Ipv4Addr::new(216, 234, 202, 122), + ..TargetState::default() + }, ); working.insert("Site IP 3".to_string(), - TargetState { - name: "Site IP 3".to_string(), - target: Ipv4Addr::new(24,143,184,98), - ..TargetState::default() - } + TargetState { + name: "Site IP 3".to_string(), + target: Ipv4Addr::new(24, 143, 184, 98), + ..TargetState::default() + }, ); working } -fn build_targets_from_file(filename: Option) -> BTreeMap{ +fn build_targets_from_file(filename: Option) -> BTreeMap { let mut hosts: BTreeMap = get_default_targets(); if let Some(file) = filename { - println!("File is {:?}", file.to_str()); - let file = File::open(file); - let mut rdr = csv::Reader::from_reader(file.unwrap()); - for result in rdr.records() { - let record = result.unwrap(); - hosts.insert(record[1].to_string(), - TargetState { - name: record[1].to_string(), - target: Ipv4Addr::from_str(&record[0]).unwrap(), - alive: false, - last_alive_change: SystemTime::now(), - last_rtt: 0 - }); + hosts = if !&file.exists() { + println!("Cant load hosts from {:?}. Using default host list.", file.clone().as_os_str()); + // use + get_default_targets() + } else { + println!("LOADING HOSTS FROM {:?}", file.to_str()); + let file = File::open(file); + let mut rdr = csv::Reader::from_reader(file.unwrap()); + for result in rdr.records() { + let record = result.unwrap(); + hosts.insert(record[1].to_string(), + TargetState { + name: record[1].to_string(), + target: Ipv4Addr::from_str(&record[0]).unwrap(), + alive: false, + last_alive_change: SystemTime::now(), + last_rtt: 0, + }); + } + hosts } - }; + } + hosts } @@ -115,13 +123,12 @@ fn main() { // Get App Settings let settings = AppSettings::parse(); + print!("Prep to load targets..."); + let mut targets = build_targets_from_file(settings.ping_host_file); + // channel to send requests to ping let (ping_response_sender, ping_response_listener) = mpsc::channel::(); - let file_to_read = settings.ping_host_file; - - let mut targets = build_targets_from_file(file_to_read); - println!("Setting up requests for {} hosts.", targets.len()); Manager::spawn_manager_thread(ips_from_state(targets.clone()), ping_response_sender.clone()); @@ -129,7 +136,7 @@ fn main() { let mut duration_since_last_loop = SystemTime::now().duration_since(display_loop_start).unwrap(); loop { if let Ok(response) = ping_response_listener.recv_timeout(Duration::from_millis(100)) { - for (index, (name, current_state)) in targets.clone().iter().enumerate() { + for (_, (name, current_state)) in targets.clone().iter().enumerate() { if current_state.target == response.target { let last_alive_change = if response.success == current_state.alive { current_state.last_alive_change @@ -144,7 +151,7 @@ fn main() { last_rtt: response.rtt, last_alive_change, }; - targets.insert(current_state.name.clone(), new_state); + targets.insert(name.clone(), new_state); } } } @@ -165,7 +172,7 @@ fn main() { println!("{} \t | {} \t | {}\t | Changed {}s ago", target_string, current_result.alive, - current_result.last_rtt,time_since_last_change.as_secs() + current_result.last_rtt, time_since_last_change.as_secs() ); } display_loop_start = SystemTime::now();