From cf2933e936d72dad385d20997f4fc09e5d79055e Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:22:26 -0400 Subject: [PATCH 01/13] Add network session and speed test backend --- src-tauri/src/lib.rs | 948 ++++++++++++++++++++++++++++++++++++++---- src-tauri/src/main.rs | 8 + 2 files changed, 881 insertions(+), 75 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 4e5dfb2..c6109ef 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -4,6 +4,7 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use std::collections::{HashMap, VecDeque}; +use std::process::Command; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::time::Duration; @@ -17,14 +18,50 @@ use tauri_plugin_autostart::MacosLauncher; use tauri_plugin_notification::NotificationExt; use tokio::sync::{Mutex, Notify}; +const NETWORK_QUALITY_PATH: &str = "/usr/bin/networkQuality"; + +fn run_network_quality_process(max_runtime_secs: u32) -> Result { + let output = Command::new(NETWORK_QUALITY_PATH) + .args(["-c", "-M", &max_runtime_secs.to_string()]) + .output() + .map_err(|error| format!("Unable to start networkQuality: {error}"))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr).trim().to_string(); + return Err(format!( + "networkQuality exited with {}{}", + output.status, + if stderr.is_empty() { + String::new() + } else { + format!(": {stderr}") + } + )); + } + + serde_json::from_slice(&output.stdout) + .map_err(|error| format!("networkQuality returned invalid JSON: {error}")) +} + +/// Diagnostic entry point used to validate networkQuality from the signed app binary. +pub fn network_quality_smoke_test() -> Result<(), String> { + let result = run_network_quality_process(15)?; + println!( + "{}", + serde_json::to_string_pretty(&result) + .map_err(|error| format!("Unable to format networkQuality output: {error}"))? + ); + Ok(()) +} + /// Method used to measure ping latency #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub enum PingMethod { - Icmp, // Real ICMP ping via system command + Icmp, // Real ICMP ping via system command // TCP variants kept for backwards compatibility with existing history data - TcpDns, // (deprecated) TCP connect to port 53 (DNS) - TcpHttps, // (deprecated) TCP connect to port 443 - TcpHttp, // (deprecated) TCP connect to port 80 + TcpDns, // (deprecated) TCP connect to port 53 (DNS) + TcpHttps, // (deprecated) TCP connect to port 443 + TcpHttp, // (deprecated) TCP connect to port 80 } /// A single ping measurement @@ -35,6 +72,8 @@ pub struct PingResult { pub target: String, #[serde(default)] pub method: Option, + #[serde(default)] + pub session_id: Option, } /// Statistics for a target @@ -66,6 +105,43 @@ pub struct IpInfo { pub isp: Option, } +/// A continuous period on one public IP + ISP fingerprint. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NetworkSession { + pub id: String, + pub fingerprint: String, + pub public_ip: String, + pub isp: Option, + pub label: Option, + pub started_at: DateTime, + pub ended_at: Option>, +} + +/// A user-triggered macOS networkQuality result. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SpeedTestResult { + pub id: String, + pub timestamp: DateTime, + pub session_id: Option, + pub download_mbps: f64, + pub upload_mbps: f64, + pub loaded_latency_ms: Option, + pub idle_latency_ms: Option, + pub responsiveness_rpm: Option, + pub interface_name: Option, +} + +#[derive(Debug, Clone, Serialize)] +pub struct SessionDetails { + pub session: NetworkSession, + pub median_ms: Option, + pub average_ms: Option, + pub p95_ms: Option, + pub packet_loss_pct: f64, + pub total_pings: usize, + pub latest_speed_test: Option, +} + /// Site monitor configuration #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SiteMonitor { @@ -186,6 +262,15 @@ pub struct AppState { pub wake_notify: Arc, // User-configurable ping interval (in seconds) pub ping_interval_secs: Mutex, + pub speed_test_duration_secs: Mutex, + // Network-context history + pub network_sessions: Mutex>, + pub current_session_id: Mutex>, + pub network_aliases: Mutex>, + pub speed_tests: Mutex>, + pub speed_test_running: AtomicBool, + pub start_new_session_after_wake: AtomicBool, + pub shutdown_requested: AtomicBool, } impl Default for AppState { @@ -218,6 +303,14 @@ impl Default for AppState { wake_notify: Arc::new(Notify::new()), // Default ping interval: 10 seconds ping_interval_secs: Mutex::new(10), + speed_test_duration_secs: Mutex::new(7), + network_sessions: Mutex::new(VecDeque::new()), + current_session_id: Mutex::new(None), + network_aliases: Mutex::new(HashMap::new()), + speed_tests: Mutex::new(VecDeque::new()), + speed_test_running: AtomicBool::new(false), + start_new_session_after_wake: AtomicBool::new(false), + shutdown_requested: AtomicBool::new(false), } } } @@ -253,6 +346,304 @@ async fn get_ping_history( .unwrap_or_default()) } +fn network_fingerprint(info: &IpInfo) -> String { + format!( + "{}|{}", + info.ip.trim(), + info.isp.as_deref().unwrap_or("Unknown ISP").trim() + ) +} + +async fn ensure_network_session( + state: &Arc, + info: &IpInfo, + force_new: bool, +) -> Option { + let fingerprint = network_fingerprint(info); + let current_id = state.current_session_id.lock().await.clone(); + + if !force_new { + if let Some(current_id) = ¤t_id { + let sessions = state.network_sessions.lock().await; + if sessions + .iter() + .any(|session| session.id == *current_id && session.fingerprint == fingerprint) + { + return None; + } + } + } + + let now = Utc::now(); + let label = state + .network_aliases + .lock() + .await + .get(&fingerprint) + .cloned(); + let mut sessions = state.network_sessions.lock().await; + + if let Some(current_id) = current_id { + if let Some(current) = sessions.iter_mut().find(|session| session.id == current_id) { + current.ended_at = Some(now); + } + } + + let session = NetworkSession { + id: format!("session-{}", now.timestamp_micros()), + fingerprint, + public_ip: info.ip.clone(), + isp: info.isp.clone(), + label, + started_at: now, + ended_at: None, + }; + sessions.push_back(session.clone()); + + let cutoff = now - chrono::Duration::hours(24); + while sessions + .front() + .is_some_and(|oldest| oldest.ended_at.unwrap_or(oldest.started_at) < cutoff) + { + sessions.pop_front(); + } + drop(sessions); + + *state.current_session_id.lock().await = Some(session.id.clone()); + let startup_cutoff = now - chrono::Duration::minutes(5); + for ping in state + .ping_history + .lock() + .await + .values_mut() + .flat_map(|history| history.iter_mut()) + .filter(|ping| ping.session_id.is_none() && ping.timestamp >= startup_cutoff) + { + ping.session_id = Some(session.id.clone()); + } + Some(session) +} + +#[tauri::command] +async fn get_network_sessions( + state: State<'_, Arc>, +) -> Result, String> { + Ok(state + .network_sessions + .lock() + .await + .iter() + .cloned() + .collect()) +} + +#[tauri::command] +async fn get_speed_tests(state: State<'_, Arc>) -> Result, String> { + Ok(state.speed_tests.lock().await.iter().cloned().collect()) +} + +#[tauri::command] +async fn rename_network_session( + session_id: String, + label: String, + state: State<'_, Arc>, +) -> Result<(), String> { + let label = label.trim().to_string(); + if label.len() > 80 { + return Err("Network name must be 80 characters or fewer".to_string()); + } + + let fingerprint = { + let sessions = state.network_sessions.lock().await; + sessions + .iter() + .find(|session| session.id == session_id) + .map(|session| session.fingerprint.clone()) + .ok_or_else(|| "Network session not found".to_string())? + }; + + if label.is_empty() { + state.network_aliases.lock().await.remove(&fingerprint); + } else { + state + .network_aliases + .lock() + .await + .insert(fingerprint.clone(), label.clone()); + } + + for session in state + .network_sessions + .lock() + .await + .iter_mut() + .filter(|session| session.fingerprint == fingerprint) + { + session.label = (!label.is_empty()).then(|| label.clone()); + } + + save_history_async(state.inner()).await; + Ok(()) +} + +fn percentile(sorted: &[f64], percentile: f64) -> Option { + if sorted.is_empty() { + return None; + } + let index = ((sorted.len() as f64 * percentile).ceil() as usize) + .saturating_sub(1) + .min(sorted.len() - 1); + Some(sorted[index]) +} + +#[tauri::command] +async fn get_session_details( + session_id: String, + target: String, + state: State<'_, Arc>, +) -> Result { + let session = state + .network_sessions + .lock() + .await + .iter() + .find(|session| session.id == session_id) + .cloned() + .ok_or_else(|| "Network session not found".to_string())?; + + let matching: Vec = state + .ping_history + .lock() + .await + .get(&target) + .map(|history| { + history + .iter() + .filter(|ping| ping.session_id.as_deref() == Some(&session_id)) + .cloned() + .collect() + }) + .unwrap_or_default(); + let total_pings = matching.len(); + let failed_pings = matching + .iter() + .filter(|ping| ping.latency_ms.is_none()) + .count(); + let mut successful: Vec = matching.iter().filter_map(|ping| ping.latency_ms).collect(); + successful.sort_by(f64::total_cmp); + + let average_ms = + (!successful.is_empty()).then(|| successful.iter().sum::() / successful.len() as f64); + let median_ms = if successful.is_empty() { + None + } else if successful.len().is_multiple_of(2) { + let middle = successful.len() / 2; + Some((successful[middle - 1] + successful[middle]) / 2.0) + } else { + Some(successful[successful.len() / 2]) + }; + let packet_loss_pct = if total_pings == 0 { + 0.0 + } else { + failed_pings as f64 / total_pings as f64 * 100.0 + }; + let latest_speed_test = state + .speed_tests + .lock() + .await + .iter() + .rev() + .find(|test| test.session_id.as_deref() == Some(&session_id)) + .cloned(); + + Ok(SessionDetails { + session, + median_ms, + average_ms, + p95_ms: percentile(&successful, 0.95), + packet_loss_pct, + total_pings, + latest_speed_test, + }) +} + +fn json_number(value: &serde_json::Value, key: &str) -> Option { + value.get(key).and_then(serde_json::Value::as_f64) +} + +fn median_json_array(value: &serde_json::Value, key: &str) -> Option { + let mut values: Vec = value + .get(key)? + .as_array()? + .iter() + .filter_map(serde_json::Value::as_f64) + .collect(); + values.sort_by(f64::total_cmp); + if values.is_empty() { + None + } else if values.len().is_multiple_of(2) { + let middle = values.len() / 2; + Some((values[middle - 1] + values[middle]) / 2.0) + } else { + Some(values[values.len() / 2]) + } +} + +#[tauri::command] +async fn run_speed_test(state: State<'_, Arc>) -> Result { + if state + .speed_test_running + .compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst) + .is_err() + { + return Err("A speed test is already running".to_string()); + } + + let session_id = state.current_session_id.lock().await.clone(); + let duration_secs = *state.speed_test_duration_secs.lock().await; + let process_result = + tokio::task::spawn_blocking(move || run_network_quality_process(duration_secs)).await; + state.speed_test_running.store(false, Ordering::SeqCst); + + let raw = process_result.map_err(|error| format!("networkQuality task failed: {error}"))??; + if let Some(domain) = raw.get("error_domain").and_then(serde_json::Value::as_str) { + let code = raw + .get("error_code") + .and_then(serde_json::Value::as_i64) + .unwrap_or_default(); + return Err(format!("networkQuality failed ({domain}, code {code})")); + } + + let now = Utc::now(); + let result = SpeedTestResult { + id: format!("speed-{}", now.timestamp_micros()), + timestamp: now, + session_id, + download_mbps: json_number(&raw, "dl_throughput").unwrap_or_default() / 1_000_000.0, + upload_mbps: json_number(&raw, "ul_throughput").unwrap_or_default() / 1_000_000.0, + loaded_latency_ms: median_json_array(&raw, "lud_self_h2_req_resp"), + idle_latency_ms: json_number(&raw, "base_rtt"), + responsiveness_rpm: json_number(&raw, "responsiveness"), + interface_name: raw + .get("interface_name") + .and_then(serde_json::Value::as_str) + .map(str::to_string), + }; + + let mut speed_tests = state.speed_tests.lock().await; + speed_tests.push_back(result.clone()); + let cutoff = now - chrono::Duration::hours(24); + while speed_tests + .front() + .is_some_and(|oldest| oldest.timestamp < cutoff) + { + speed_tests.pop_front(); + } + drop(speed_tests); + save_history_async(state.inner()).await; + Ok(result) +} + /// Get all targets #[tauri::command] async fn get_targets(state: State<'_, Arc>) -> Result, String> { @@ -466,6 +857,7 @@ async fn get_statistics( #[tauri::command] async fn get_my_ip_info( force_refresh: Option, + app_handle: AppHandle, state: State<'_, Arc>, ) -> Result { let force = force_refresh.unwrap_or(false); @@ -478,6 +870,9 @@ async fn get_my_ip_info( if let (Some(info), Some(checked_at)) = (cached, last_check) { // Cache for 5 minutes if Utc::now().signed_duration_since(checked_at).num_seconds() < 300 { + if let Some(session) = ensure_network_session(state.inner(), &info, false).await { + let _ = app_handle.emit("network-session-update", &session); + } return Ok(info); } } @@ -504,6 +899,9 @@ async fn get_my_ip_info( // Update cache *state.ip_info.lock().await = Some(info.clone()); *state.ip_info_last_check.lock().await = Some(Utc::now()); + if let Some(session) = ensure_network_session(state.inner(), &info, false).await { + let _ = app_handle.emit("network-session-update", &session); + } Ok(info) } @@ -598,7 +996,9 @@ fn should_send_vpn_notification( /// Get VPN protection settings #[tauri::command] -async fn get_vpn_settings(state: State<'_, Arc>) -> Result { +async fn get_vpn_settings( + state: State<'_, Arc>, +) -> Result { let settings = state.vpn_settings.lock().await; Ok(settings.clone()) } @@ -615,7 +1015,9 @@ async fn set_vpn_settings( /// Get network stability info #[tauri::command] -async fn get_network_stability(state: State<'_, Arc>) -> Result { +async fn get_network_stability( + state: State<'_, Arc>, +) -> Result { let stability = state.network_stability.lock().await; Ok(stability.clone()) } @@ -645,7 +1047,10 @@ async fn get_ping_interval(state: State<'_, Arc>) -> Result>) -> Result<(), String> { +async fn set_ping_interval( + interval_secs: u32, + state: State<'_, Arc>, +) -> Result<(), String> { if interval_secs < 5 { return Err("Ping interval must be at least 5 seconds".to_string()); } @@ -656,6 +1061,24 @@ async fn set_ping_interval(interval_secs: u32, state: State<'_, Arc>) Ok(()) } +#[tauri::command] +async fn get_speed_test_duration(state: State<'_, Arc>) -> Result { + Ok(*state.speed_test_duration_secs.lock().await) +} + +#[tauri::command] +async fn set_speed_test_duration( + duration_secs: u32, + state: State<'_, Arc>, +) -> Result<(), String> { + if !(3..=30).contains(&duration_secs) { + return Err("Speed test duration must be between 3 and 30 seconds".to_string()); + } + *state.speed_test_duration_secs.lock().await = duration_secs; + save_history_async(state.inner()).await; + Ok(()) +} + /// Get all site monitors #[tauri::command] async fn get_site_monitors(state: State<'_, Arc>) -> Result, String> { @@ -775,9 +1198,21 @@ async fn check_site(url: &str) -> SiteStatus { // Parse URL to extract host and port let (host, port) = if url.starts_with("https://") { - (url.trim_start_matches("https://").split('/').next().unwrap_or(url), 443) + ( + url.trim_start_matches("https://") + .split('/') + .next() + .unwrap_or(url), + 443, + ) } else if url.starts_with("http://") { - (url.trim_start_matches("http://").split('/').next().unwrap_or(url), 80) + ( + url.trim_start_matches("http://") + .split('/') + .next() + .unwrap_or(url), + 80, + ) } else { // Assume it's a hostname/IP, try HTTPS first (url.split('/').next().unwrap_or(url), 443) @@ -880,11 +1315,6 @@ async fn check_all_sites(app_handle: &AppHandle, state: &Arc) -> bool async fn check_ip_change(app_handle: &AppHandle, state: &Arc) { let settings = state.vpn_settings.lock().await.clone(); - // Skip if VPN protection is disabled - if !settings.enabled { - return; - } - // Fetch current IP (bypass cache) if let Ok(current) = fetch_ip_info_internal().await { let previous = state.ip_info.lock().await.clone(); @@ -925,7 +1355,8 @@ async fn check_ip_change(app_handle: &AppHandle, state: &Arc) { // Send notification for critical changes let last_notif = *state.last_vpn_notification.lock().await; - if should_send_vpn_notification(&change, &settings, last_notif) { + if settings.enabled && should_send_vpn_notification(&change, &settings, last_notif) + { let (title, body) = match change.change_type { NetworkChangeType::CountryChanged => ( "VPN Alert: Location Changed!", @@ -938,7 +1369,10 @@ async fn check_ip_change(app_handle: &AppHandle, state: &Arc) { "Network: IP Changed", format!("Your IP address changed to {}", current.ip), ), - _ => ("Network Change", "Network configuration changed".to_string()), + _ => ( + "Network Change", + "Network configuration changed".to_string(), + ), }; let _ = app_handle @@ -953,6 +1387,10 @@ async fn check_ip_change(app_handle: &AppHandle, state: &Arc) { } } + if let Some(session) = ensure_network_session(state, ¤t, false).await { + let _ = app_handle.emit("network-session-update", &session); + } + // Update current IP state *state.ip_info.lock().await = Some(current); *state.ip_info_last_check.lock().await = Some(Utc::now()); @@ -1032,21 +1470,42 @@ struct TrayIcons { /// Save history to disk asynchronously (non-blocking) async fn save_history_async(state: &Arc) { - let history = state.ping_history.lock().await.clone(); - let targets = state.targets.lock().await.clone(); - let primary = state.primary_target.lock().await.clone(); - let site_monitors = state.site_monitors.lock().await.clone(); - let vpn_settings = state.vpn_settings.lock().await.clone(); - let ping_interval = *state.ping_interval_secs.lock().await; + let data = SavedData { + history: state.ping_history.lock().await.clone(), + targets: state.targets.lock().await.clone(), + primary_target: state.primary_target.lock().await.clone(), + notification_threshold_ms: *state.notification_threshold_ms.lock().await, + site_monitors: state.site_monitors.lock().await.clone(), + vpn_settings: state.vpn_settings.lock().await.clone(), + ping_interval_secs: *state.ping_interval_secs.lock().await, + speed_test_duration_secs: *state.speed_test_duration_secs.lock().await, + network_sessions: state.network_sessions.lock().await.clone(), + network_aliases: state.network_aliases.lock().await.clone(), + speed_tests: state.speed_tests.lock().await.clone(), + }; // Spawn blocking file I/O in a separate thread to not block async runtime let _ = tokio::task::spawn_blocking(move || { // Ignore error - can't send Box across threads - let _ = save_history(&history, &targets, &primary, &site_monitors, &vpn_settings, ping_interval); + let _ = save_history(&data); }) .await; } +/// Persist current state and exit after the native menu callback has returned. +fn request_app_exit(app: &AppHandle) { + let state = app.state::>().inner().clone(); + if state.shutdown_requested.swap(true, Ordering::SeqCst) { + return; + } + + let app = app.clone(); + tauri::async_runtime::spawn(async move { + save_history_async(&state).await; + app.exit(0); + }); +} + /// Unified background service - consolidates ping, site monitoring, and VPN check into ONE timer /// This dramatically reduces CPU wake-ups (from 3 independent timers to 1) /// Battery optimization: adaptive interval (10s visible, 30s hidden), pauses during system sleep @@ -1074,10 +1533,22 @@ fn start_unified_background_service(app_handle: AppHandle, state: Arc) tick_count += 1; + if state + .start_new_session_after_wake + .swap(false, Ordering::SeqCst) + { + if let Some(info) = state.ip_info.lock().await.clone() { + if let Some(session) = ensure_network_session(&state, &info, true).await { + let _ = app_handle.emit("network-session-update", &session); + } + } + } + // === PING (every tick) === { let targets = state.targets.lock().await.clone(); let primary_target = state.primary_target.lock().await.clone(); + let session_id = state.current_session_id.lock().await.clone(); for target in &targets { let (latency_ms, method) = do_ping(target).await; @@ -1087,6 +1558,7 @@ fn start_unified_background_service(app_handle: AppHandle, state: Arc) latency_ms, target: target.clone(), method, + session_id: session_id.clone(), }; { @@ -1095,8 +1567,11 @@ fn start_unified_background_service(app_handle: AppHandle, state: Arc) .entry(target.clone()) .or_insert_with(|| VecDeque::with_capacity(1000)); target_history.push_back(result.clone()); - // Keep 24 hours worth (varies by interval, use conservative estimate) - while target_history.len() > 8640 { + let cutoff = Utc::now() - chrono::Duration::hours(24); + while target_history + .front() + .is_some_and(|oldest| oldest.timestamp < cutoff) + { target_history.pop_front(); } } @@ -1122,7 +1597,13 @@ fn start_unified_background_service(app_handle: AppHandle, state: Arc) }; let mut last_state = state.last_tray_state.lock().await; - update_tray_if_changed(&tray, &new_state, &mut last_state, &display_mode, &icons); + update_tray_if_changed( + &tray, + &new_state, + &mut last_state, + &display_mode, + &icons, + ); } } @@ -1207,49 +1688,110 @@ struct SavedData { vpn_settings: VpnProtectionSettings, #[serde(default = "default_ping_interval")] ping_interval_secs: u32, + #[serde(default = "default_speed_test_duration")] + speed_test_duration_secs: u32, + #[serde(default)] + network_sessions: VecDeque, + #[serde(default)] + network_aliases: HashMap, + #[serde(default)] + speed_tests: VecDeque, } fn default_ping_interval() -> u32 { 10 } +fn default_speed_test_duration() -> u32 { + 7 +} + /// Save history to disk -fn save_history( - history: &HashMap>, - targets: &[String], - primary_target: &str, - site_monitors: &[SiteMonitor], - vpn_settings: &VpnProtectionSettings, - ping_interval_secs: u32, -) -> Result<(), Box> { +fn save_history(data: &SavedData) -> Result<(), Box> { if let Some(data_dir) = dirs::data_dir() { let app_dir = data_dir.join("pingzilla"); std::fs::create_dir_all(&app_dir)?; let file_path = app_dir.join("history_v2.json"); - let data = SavedData { - history: history.clone(), - targets: targets.to_vec(), - primary_target: primary_target.to_string(), - notification_threshold_ms: 400, - site_monitors: site_monitors.to_vec(), - vpn_settings: vpn_settings.clone(), - ping_interval_secs, - }; let json = serde_json::to_string(&data)?; std::fs::write(file_path, json)?; } Ok(()) } +type LoadedData = ( + HashMap>, + Vec, + String, + Vec, + VpnProtectionSettings, + u32, + VecDeque, + HashMap, + VecDeque, + u32, +); + +fn attach_legacy_session( + history: &mut HashMap>, + sessions: &mut VecDeque, +) { + let legacy_pings: Vec> = history + .values() + .flat_map(|pings| pings.iter()) + .filter(|ping| ping.session_id.is_none()) + .map(|ping| ping.timestamp) + .collect(); + let Some(started_at) = legacy_pings.iter().min().copied() else { + return; + }; + let ended_at = legacy_pings.iter().max().copied(); + let legacy_id = "session-legacy-unknown".to_string(); + + if !sessions.iter().any(|session| session.id == legacy_id) { + sessions.push_front(NetworkSession { + id: legacy_id.clone(), + fingerprint: "legacy-unknown".to_string(), + public_ip: "Unknown".to_string(), + isp: None, + label: Some("Unknown previous connection".to_string()), + started_at, + ended_at, + }); + } + for ping in history.values_mut().flat_map(|pings| pings.iter_mut()) { + if ping.session_id.is_none() { + ping.session_id = Some(legacy_id.clone()); + } + } +} + +fn close_open_sessions_at_last_ping( + history: &HashMap>, + sessions: &mut VecDeque, +) { + for session in sessions + .iter_mut() + .filter(|session| session.ended_at.is_none()) + { + let last_ping = history + .values() + .flat_map(|pings| pings.iter()) + .filter(|ping| ping.session_id.as_deref() == Some(session.id.as_str())) + .map(|ping| ping.timestamp) + .max(); + session.ended_at = Some(last_ping.unwrap_or(session.started_at)); + } +} + /// Load history from disk -fn load_history() -> (HashMap>, Vec, String, Vec, VpnProtectionSettings, u32) { +fn load_history() -> LoadedData { if let Some(data_dir) = dirs::data_dir() { // Try new format first let file_path_v2 = data_dir.join("pingzilla").join("history_v2.json"); if let Ok(json) = std::fs::read_to_string(&file_path_v2) { if let Ok(data) = serde_json::from_str::(&json) { let cutoff = Utc::now() - chrono::Duration::hours(24); - let filtered_history: HashMap> = data + let mut filtered_history: HashMap> = data .history .into_iter() .map(|(target, pings)| { @@ -1258,7 +1800,33 @@ fn load_history() -> (HashMap>, Vec, String (target, filtered) }) .collect(); - return (filtered_history, data.targets, data.primary_target, data.site_monitors, data.vpn_settings, data.ping_interval_secs); + let mut sessions: VecDeque = data + .network_sessions + .into_iter() + .filter(|session| { + session.ended_at.is_none() + || session.ended_at.unwrap_or(session.started_at) > cutoff + }) + .collect(); + attach_legacy_session(&mut filtered_history, &mut sessions); + close_open_sessions_at_last_ping(&filtered_history, &mut sessions); + let speed_tests = data + .speed_tests + .into_iter() + .filter(|test| test.timestamp > cutoff) + .collect(); + return ( + filtered_history, + data.targets, + data.primary_target, + data.site_monitors, + data.vpn_settings, + data.ping_interval_secs, + sessions, + data.network_aliases, + speed_tests, + data.speed_test_duration_secs, + ); } } @@ -1277,14 +1845,38 @@ fn load_history() -> (HashMap>, Vec, String .unwrap_or_else(|| "1.1.1.1".to_string()); let mut map = HashMap::new(); map.insert(target.clone(), filtered); - return (map, vec![target.clone()], target, Vec::new(), VpnProtectionSettings::default(), 10); + let mut sessions = VecDeque::new(); + attach_legacy_session(&mut map, &mut sessions); + return ( + map, + vec![target.clone()], + target, + Vec::new(), + VpnProtectionSettings::default(), + 10, + sessions, + HashMap::new(), + VecDeque::new(), + default_speed_test_duration(), + ); } } } let mut history = HashMap::new(); history.insert("1.1.1.1".to_string(), VecDeque::new()); - (history, vec!["1.1.1.1".to_string()], "1.1.1.1".to_string(), Vec::new(), VpnProtectionSettings::default(), 10) + ( + history, + vec!["1.1.1.1".to_string()], + "1.1.1.1".to_string(), + Vec::new(), + VpnProtectionSettings::default(), + 10, + VecDeque::new(), + HashMap::new(), + VecDeque::new(), + default_speed_test_duration(), + ) } /// Register for macOS sleep/wake notifications to pause background service during sleep @@ -1320,6 +1912,9 @@ fn register_sleep_wake_observer(state: Arc) { state_wake .is_system_sleeping .store(false, std::sync::atomic::Ordering::Relaxed); + state_wake + .start_new_session_after_wake + .store(true, std::sync::atomic::Ordering::Relaxed); // Wake up the background service that's waiting wake_notify.notify_waiters(); }); @@ -1385,21 +1980,33 @@ fn build_initial_menu(app: &AppHandle) -> Result, tauri::Error> { let separator1 = PredefinedMenuItem::separator(app)?; let ip_item = MenuItem::with_id(app, "ip", "πŸ“ IP: Loading...", true, None::<&str>)?; let separator2 = PredefinedMenuItem::separator(app)?; - let dashboard = MenuItem::with_id(app, "dashboard", "πŸ“Š Open Dashboard...", true, None::<&str>)?; + let dashboard = + MenuItem::with_id(app, "dashboard", "πŸ“Š Open Dashboard...", true, None::<&str>)?; let separator3 = PredefinedMenuItem::separator(app)?; let quit = MenuItem::with_id(app, "quit", "Quit PingZilla", true, None::<&str>)?; - Menu::with_items(app, &[ - &ping_item, &target_item, &stats_item, &separator1, - &ip_item, &separator2, - &dashboard, &separator3, - &quit, - ]) + Menu::with_items( + app, + &[ + &ping_item, + &target_item, + &stats_item, + &separator1, + &ip_item, + &separator2, + &dashboard, + &separator3, + &quit, + ], + ) } /// Build dynamic menu with current ping data /// Called after each ping to update the menu with latest info -async fn build_dynamic_menu(app: &AppHandle, state: &Arc) -> Result, tauri::Error> { +async fn build_dynamic_menu( + app: &AppHandle, + state: &Arc, +) -> Result, tauri::Error> { // Get current data let primary_target = state.primary_target.lock().await.clone(); let ip_info = state.ip_info.lock().await.clone(); @@ -1439,24 +2046,48 @@ async fn build_dynamic_menu(app: &AppHandle, state: &Arc) -> Result match p.latency_ms { Some(ms) => { - let icon = if ms < 100.0 { "🟒" } else if ms < 150.0 { "🟑" } else { "πŸ”΄" }; + let icon = if ms < 100.0 { + "🟒" + } else if ms < 150.0 { + "🟑" + } else { + "πŸ”΄" + }; (format!("{:.0}ms", ms), icon) - }, + } None => ("Timeout".to_string(), "⚫"), }, None => ("---".to_string(), "βšͺ"), }; - let ping_item = MenuItem::with_id(app, "ping", &format!("{} Ping: {}", status_icon, ping_text), true, None::<&str>)?; + let ping_item = MenuItem::with_id( + app, + "ping", + &format!("{} Ping: {}", status_icon, ping_text), + true, + None::<&str>, + )?; // Target line - let target_item = MenuItem::with_id(app, "target", &format!(" β†’ {}", primary_target), true, None::<&str>)?; + let target_item = MenuItem::with_id( + app, + "target", + &format!(" β†’ {}", primary_target), + true, + None::<&str>, + )?; // Stats - more compact let stats_text = format!( " ↓{} Β· ~{} Β· ↑{}", - min_ms.map(|v| format!("{:.0}ms", v)).unwrap_or_else(|| "--".to_string()), - avg_ms.map(|v| format!("{:.0}ms", v)).unwrap_or_else(|| "--".to_string()), - max_ms.map(|v| format!("{:.0}ms", v)).unwrap_or_else(|| "--".to_string()) + min_ms + .map(|v| format!("{:.0}ms", v)) + .unwrap_or_else(|| "--".to_string()), + avg_ms + .map(|v| format!("{:.0}ms", v)) + .unwrap_or_else(|| "--".to_string()), + max_ms + .map(|v| format!("{:.0}ms", v)) + .unwrap_or_else(|| "--".to_string()) ); let stats_item = MenuItem::with_id(app, "stats", &stats_text, true, None::<&str>)?; @@ -1491,17 +2122,22 @@ async fn build_dynamic_menu(app: &AppHandle, state: &Arc) -> Result)?; + let site_item = + MenuItem::with_id(app, &format!("site_{}", url), &text, true, None::<&str>)?; menu_items.push(Box::new(site_item)); } } // Action items let separator3 = PredefinedMenuItem::separator(app)?; - let dashboard = MenuItem::with_id(app, "dashboard", "πŸ“Š Open Dashboard...", true, None::<&str>)?; + let dashboard = + MenuItem::with_id(app, "dashboard", "πŸ“Š Open Dashboard...", true, None::<&str>)?; let separator4 = PredefinedMenuItem::separator(app)?; let quit = MenuItem::with_id(app, "quit", "Quit PingZilla", true, None::<&str>)?; @@ -1511,7 +2147,8 @@ async fn build_dynamic_menu(app: &AppHandle, state: &Arc) -> Result> = menu_items.iter().map(|b| b.as_ref()).collect(); + let item_refs: Vec<&dyn tauri::menu::IsMenuItem> = + menu_items.iter().map(|b| b.as_ref()).collect(); Menu::with_items(app, &item_refs) } @@ -1529,7 +2166,7 @@ fn open_dashboard_window(app: &AppHandle) { if let Ok(window) = tauri::WebviewWindowBuilder::new( app, "dashboard", - tauri::WebviewUrl::App("index.html".into()) + tauri::WebviewUrl::App("index.html".into()), ) .title("PingZilla") .inner_size(400.0, 600.0) @@ -1551,9 +2188,160 @@ fn open_dashboard_window(app: &AppHandle) { } } +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn legacy_pings_are_migrated_to_an_unknown_session() { + let timestamp = Utc::now(); + let mut history = HashMap::from([( + "1.1.1.1".to_string(), + VecDeque::from([PingResult { + timestamp, + latency_ms: Some(42.0), + target: "1.1.1.1".to_string(), + method: Some(PingMethod::Icmp), + session_id: None, + }]), + )]); + let mut sessions = VecDeque::new(); + + attach_legacy_session(&mut history, &mut sessions); + + assert_eq!(sessions.len(), 1); + assert_eq!( + history["1.1.1.1"][0].session_id.as_deref(), + Some("session-legacy-unknown") + ); + assert_eq!( + sessions[0].label.as_deref(), + Some("Unknown previous connection") + ); + } + + #[test] + fn percentile_uses_nearest_rank() { + let values = [10.0, 20.0, 30.0, 40.0, 50.0]; + assert_eq!(percentile(&values, 0.95), Some(50.0)); + assert_eq!(percentile(&values, 0.5), Some(30.0)); + assert_eq!(percentile(&[], 0.95), None); + } + + #[test] + fn speed_test_latency_uses_array_median() { + let raw = serde_json::json!({ + "lud_self_h2_req_resp": [900.0, 100.0, 500.0, 300.0] + }); + assert_eq!(median_json_array(&raw, "lud_self_h2_req_resp"), Some(400.0)); + } + + #[test] + fn public_ip_and_isp_form_the_network_fingerprint() { + let info = IpInfo { + ip: "203.0.113.1".to_string(), + country: "United States".to_string(), + country_code: "US".to_string(), + city: None, + isp: Some("Example ISP".to_string()), + }; + assert_eq!(network_fingerprint(&info), "203.0.113.1|Example ISP"); + } + + #[test] + fn persisted_open_session_closes_at_its_last_ping() { + let timestamp = Utc::now(); + let session_id = "session-current".to_string(); + let history = HashMap::from([( + "1.1.1.1".to_string(), + VecDeque::from([PingResult { + timestamp, + latency_ms: Some(42.0), + target: "1.1.1.1".to_string(), + method: Some(PingMethod::Icmp), + session_id: Some(session_id.clone()), + }]), + )]); + let mut sessions = VecDeque::from([NetworkSession { + id: session_id, + fingerprint: "203.0.113.1|Example ISP".to_string(), + public_ip: "203.0.113.1".to_string(), + isp: Some("Example ISP".to_string()), + label: None, + started_at: timestamp - chrono::Duration::minutes(5), + ended_at: None, + }]); + + close_open_sessions_at_last_ping(&history, &mut sessions); + + assert_eq!(sessions[0].ended_at, Some(timestamp)); + } + + #[test] + fn saved_history_without_speed_duration_defaults_to_seven_seconds() { + let saved: SavedData = serde_json::from_value(serde_json::json!({ + "history": {}, + "targets": ["1.1.1.1"], + "primary_target": "1.1.1.1", + "notification_threshold_ms": 400 + })) + .expect("legacy saved data should deserialize"); + + assert_eq!(saved.speed_test_duration_secs, 7); + } + + #[tokio::test] + async fn initial_session_claims_recent_startup_pings() { + let state = Arc::new(AppState::default()); + state + .ping_history + .lock() + .await + .get_mut("1.1.1.1") + .expect("default target history") + .push_back(PingResult { + timestamp: Utc::now(), + latency_ms: Some(42.0), + target: "1.1.1.1".to_string(), + method: Some(PingMethod::Icmp), + session_id: None, + }); + let info = IpInfo { + ip: "203.0.113.1".to_string(), + country: "United States".to_string(), + country_code: "US".to_string(), + city: None, + isp: Some("Example ISP".to_string()), + }; + + let session = ensure_network_session(&state, &info, false) + .await + .expect("initial session"); + + assert_eq!( + state.ping_history.lock().await["1.1.1.1"][0] + .session_id + .as_deref(), + Some(session.id.as_str()) + ); + } +} + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - let (loaded_history, loaded_targets, loaded_primary, loaded_site_monitors, loaded_vpn_settings, loaded_ping_interval) = load_history(); + let ( + loaded_history, + loaded_targets, + loaded_primary, + loaded_site_monitors, + loaded_vpn_settings, + loaded_ping_interval, + loaded_network_sessions, + loaded_network_aliases, + loaded_speed_tests, + loaded_speed_test_duration, + ) = load_history(); + let loaded_current_session = None; let app_state = Arc::new(AppState { ping_history: Mutex::new(loaded_history), @@ -1562,6 +2350,11 @@ pub fn run() { site_monitors: Mutex::new(loaded_site_monitors), vpn_settings: Mutex::new(loaded_vpn_settings), ping_interval_secs: Mutex::new(loaded_ping_interval), + network_sessions: Mutex::new(loaded_network_sessions), + current_session_id: Mutex::new(loaded_current_session), + network_aliases: Mutex::new(loaded_network_aliases), + speed_tests: Mutex::new(loaded_speed_tests), + speed_test_duration_secs: Mutex::new(loaded_speed_test_duration), ..Default::default() }); @@ -1576,6 +2369,11 @@ pub fn run() { .invoke_handler(tauri::generate_handler![ get_current_ping, get_ping_history, + get_network_sessions, + get_speed_tests, + get_session_details, + rename_network_session, + run_speed_test, get_targets, add_target, remove_target, @@ -1596,6 +2394,8 @@ pub fn run() { set_window_visible, get_ping_interval, set_ping_interval, + get_speed_test_duration, + set_speed_test_duration, ]) .setup(move |app| { // Show in Dock - required for ping to work in sandboxed App Store builds @@ -1616,12 +2416,10 @@ pub fn run() { .tooltip("PingZilla - Network Monitor") .menu(&initial_menu) .show_menu_on_left_click(true) // Both left and right click show menu - works in fullscreen! - .on_menu_event(|app, event| { - match event.id.as_ref() { - "dashboard" => open_dashboard_window(app), - "quit" => app.exit(0), - _ => {} - } + .on_menu_event(|app, event| match event.id.as_ref() { + "dashboard" => open_dashboard_window(app), + "quit" => request_app_exit(app), + _ => {} }) .build(app)?; diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 0fcde57..107010e 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,5 +2,13 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { + if std::env::args().any(|arg| arg == "--network-quality-smoke-test") { + if let Err(error) = pingzilla_lib::network_quality_smoke_test() { + eprintln!("{error}"); + std::process::exit(1); + } + return; + } + pingzilla_lib::run() } From 02ad5a93471c830702c63a24ed538b7918632159 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:22:31 -0400 Subject: [PATCH 02/13] Add network-aware history interface --- src/App.css | 128 +++++++++++++ src/App.tsx | 512 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 598 insertions(+), 42 deletions(-) diff --git a/src/App.css b/src/App.css index 783602b..b890bf8 100644 --- a/src/App.css +++ b/src/App.css @@ -22,6 +22,7 @@ body { flex-direction: column; height: 100vh; padding: 12px; + overflow-y: auto; } /* Header */ @@ -391,6 +392,133 @@ body { margin: 0 -8px; } +.history-actions { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin: -20px 0 8px; + color: #777; + font-size: 10px; +} + +.speed-test-btn, +.network-name-editor button { + border: 1px solid #3f4b5f; + border-radius: 5px; + background: #263449; + color: #dbeafe; + padding: 5px 8px; + font-size: 10px; + cursor: pointer; +} + +.speed-test-btn:disabled { + cursor: progress; + opacity: 0.6; +} + +.speed-test-error { + margin-bottom: 8px; + color: #fca5a5; + font-size: 10px; +} + +.point-details { + margin-bottom: 10px; + padding: 12px; + border: 1px solid #343c49; + border-radius: 8px; + background: #22262d; +} + +.point-details-time { + color: #aab3c2; + font-size: 10px; +} + +.point-details-network { + font-size: 14px; + font-weight: 650; +} + +.point-details-network-row { + display: flex; + align-items: center; + gap: 5px; + margin-top: 3px; +} + +.network-edit-btn { + border: 0; + background: transparent; + color: #8b95a5; + padding: 1px 4px; + font-size: 14px; + line-height: 1; + cursor: pointer; +} + +.network-edit-btn:hover { + color: #dbeafe; +} + +.network-name-editor { + display: flex; + gap: 6px; + margin: 9px 0; +} + +.network-name-editor input { + min-width: 0; + flex: 1; + border: 1px solid #3d4654; + border-radius: 5px; + background: #171a1f; + color: #fff; + padding: 5px 7px; + font-size: 11px; + user-select: text; + -webkit-user-select: text; +} + +.network-name-editor .network-name-cancel { + border-color: #444b55; + background: #30343a; + color: #c4c8cf; +} + +.point-details-grid { + display: grid; + grid-template-columns: 1fr auto; + gap: 5px 16px; + margin-top: 8px; + color: #9ca3af; + font-size: 11px; +} + +.point-details-grid strong { + color: #f3f4f6; + font-weight: 600; + text-align: right; +} + +.speed-test-result { + display: flex; + flex-direction: column; + gap: 4px; + margin-top: 10px; + padding-top: 9px; + border-top: 1px solid #363e4a; + color: #9ca3af; + font-size: 10px; +} + +.speed-test-result strong { + color: #dbeafe; + font-size: 11px; +} + /* Footer */ .footer { text-align: center; diff --git a/src/App.tsx b/src/App.tsx index bf8fa30..915669f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,20 @@ // ABOUTME: PingZilla React frontend - displays ping graph and current latency // ABOUTME: Supports multiple targets with tabs and statistics display -import { useEffect, useState, useCallback, useRef } from "react"; +import { useEffect, useState, useCallback, useMemo, useRef } from "react"; import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; import { getVersion } from "@tauri-apps/api/app"; import { enable, disable, isEnabled } from "@tauri-apps/plugin-autostart"; import { - LineChart, + ComposedChart, Line, XAxis, YAxis, ResponsiveContainer, + ReferenceDot, ReferenceLine, + Tooltip, } from "recharts"; import "./App.css"; @@ -69,6 +71,7 @@ interface PingResult { latency_ms: number | null; target: string; method: PingMethod | null; + session_id: string | null; } interface PingStatistics { @@ -80,9 +83,42 @@ interface PingStatistics { failed_pings: number; } -interface ChartData { - time: string; - latency: number | null; +interface NetworkSession { + id: string; + fingerprint: string; + public_ip: string; + isp: string | null; + label: string | null; + started_at: string; + ended_at: string | null; +} + +interface SpeedTestResult { + id: string; + timestamp: string; + session_id: string | null; + download_mbps: number; + upload_mbps: number; + loaded_latency_ms: number | null; + idle_latency_ms: number | null; + responsiveness_rpm: number | null; + interface_name: string | null; +} + +interface SessionDetails { + session: NetworkSession; + median_ms: number | null; + average_ms: number | null; + p95_ms: number | null; + packet_loss_pct: number; + total_pings: number; + latest_speed_test: SpeedTestResult | null; +} + +interface ChartRow { + timestamp: number; + ping: PingResult; + [key: string]: number | PingResult | null; } interface IpInfo { @@ -150,6 +186,49 @@ const countryCodeToFlag = (code: string): string => { .join(""); }; +const NETWORK_COLORS = [ + "#3b82f6", + "#22c55e", + "#f97316", + "#a855f7", + "#06b6d4", + "#eab308", + "#ec4899", +]; + +const stableColor = (value: string): string => { + let hash = 0; + for (const char of value) hash = (hash * 31 + char.charCodeAt(0)) | 0; + return NETWORK_COLORS[Math.abs(hash) % NETWORK_COLORS.length]; +}; + +const downsampleHistory = (history: PingResult[], maximum = 900): PingResult[] => { + if (history.length <= maximum) return history; + const bucketSize = Math.ceil(history.length / (maximum / 2)); + const sampled: PingResult[] = []; + + for (let start = 0; start < history.length; start += bucketSize) { + const bucket = history.slice(start, start + bucketSize); + const timedOut = bucket.find((ping) => ping.latency_ms === null); + const successful = bucket.filter((ping) => ping.latency_ms !== null); + const lowest = successful.reduce( + (best, ping) => !best || (ping.latency_ms ?? Infinity) < (best.latency_ms ?? Infinity) ? ping : best, + null, + ); + const highest = successful.reduce( + (best, ping) => !best || (ping.latency_ms ?? -Infinity) > (best.latency_ms ?? -Infinity) ? ping : best, + null, + ); + for (const ping of [lowest, highest, timedOut]) { + if (ping && !sampled.includes(ping)) sampled.push(ping); + } + } + + return sampled.sort( + (left, right) => new Date(left.timestamp).getTime() - new Date(right.timestamp).getTime(), + ); +}; + function App() { // Detect view mode from URL params const viewMode = getViewMode(); @@ -158,7 +237,7 @@ function App() { const [activeTarget, setActiveTarget] = useState("1.1.1.1"); const [currentPings, setCurrentPings] = useState>({}); const [currentMethods, setCurrentMethods] = useState>({}); - const [histories, setHistories] = useState>({}); + const [histories, setHistories] = useState>({}); const [statistics, setStatistics] = useState(null); const [statsPeriod, setStatsPeriod] = useState(5); // minutes const [threshold, setThreshold] = useState(400); @@ -184,6 +263,16 @@ function App() { const [showVpnSettings, setShowVpnSettings] = useState(false); // Ping interval setting (in seconds) const [pingInterval, setPingInterval] = useState(10); + const [speedTestDuration, setSpeedTestDuration] = useState(7); + const [networkSessions, setNetworkSessions] = useState([]); + const [speedTests, setSpeedTests] = useState([]); + const [selectedPing, setSelectedPing] = useState(null); + const [sessionDetails, setSessionDetails] = useState(null); + const [networkName, setNetworkName] = useState(""); + const [editingNetworkName, setEditingNetworkName] = useState(false); + const [speedTesting, setSpeedTesting] = useState(false); + const [speedTestSecondsRemaining, setSpeedTestSecondsRemaining] = useState(0); + const [speedTestError, setSpeedTestError] = useState(null); // App version from Tauri const [appVersion, setAppVersion] = useState(""); @@ -210,21 +299,12 @@ function App() { setAppVersion(version); // Load history for each target - const newHistories: Record = {}; + const newHistories: Record = {}; const newCurrentPings: Record = {}; for (const target of loadedTargets) { const pingHistory = await invoke("get_ping_history", { target }); - const chartData = pingHistory.slice(-60).map((p) => ({ - time: new Date(p.timestamp).toLocaleTimeString("en-US", { - hour12: false, - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - }), - latency: p.latency_ms, - })); - newHistories[target] = chartData; + newHistories[target] = pingHistory; if (pingHistory.length > 0) { const last = pingHistory[pingHistory.length - 1]; @@ -235,6 +315,13 @@ function App() { setHistories(newHistories); setCurrentPings(newCurrentPings); + const [loadedSessions, loadedSpeedTests] = await Promise.all([ + invoke("get_network_sessions"), + invoke("get_speed_tests"), + ]); + setNetworkSessions(loadedSessions); + setSpeedTests(loadedSpeedTests); + // Load IP info try { const loadedIpInfo = await invoke("get_my_ip_info", {}); @@ -268,6 +355,13 @@ function App() { } catch (e) { console.error("Failed to load ping interval:", e); } + + try { + const loadedDuration = await invoke("get_speed_test_duration"); + setSpeedTestDuration(loadedDuration); + } catch (e) { + console.error("Failed to load speed test duration:", e); + } } catch (e) { console.error("Failed to load initial data:", e); } @@ -335,18 +429,10 @@ function App() { setHistories((prev) => { const targetHistory = prev[result.target] || []; - const newData = [ - ...targetHistory, - { - time: new Date(result.timestamp).toLocaleTimeString("en-US", { - hour12: false, - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - }), - latency: result.latency_ms, - }, - ].slice(-60); + const cutoff = Date.now() - 24 * 60 * 60 * 1000; + const newData = [...targetHistory, result].filter( + (ping) => new Date(ping.timestamp).getTime() >= cutoff, + ); return { ...prev, [result.target]: newData }; }); }); @@ -356,6 +442,15 @@ function App() { }; }, []); + useEffect(() => { + const unlisten = listen("network-session-update", async () => { + setNetworkSessions(await invoke("get_network_sessions")); + }); + return () => { + unlisten.then((stop) => stop()); + }; + }, []); + // Listen for site status updates useEffect(() => { const unlisten = listen>("site-status-update", (event) => { @@ -451,11 +546,14 @@ function App() { await invoke("set_notification_threshold", { thresholdMs: threshold }); await invoke("set_display_mode", { mode: displayMode }); await invoke("set_ping_interval", { intervalSecs: pingInterval }); + await invoke("set_speed_test_duration", { + durationSecs: speedTestDuration, + }); setShowSettings(false); } catch (e) { console.error("Failed to save settings:", e); } - }, [threshold, displayMode, pingInterval]); + }, [threshold, displayMode, pingInterval, speedTestDuration]); const toggleLaunchAtLogin = useCallback(async () => { try { @@ -489,6 +587,130 @@ function App() { const currentPing = currentPings[activeTarget] ?? null; const currentMethod = currentMethods[activeTarget] ?? null; const history = histories[activeTarget] || []; + const sessionById = useMemo( + () => new Map(networkSessions.map((session) => [session.id, session])), + [networkSessions], + ); + const chart = useMemo(() => { + const axisEnd = Date.now(); + const axisStart = axisEnd - statsPeriod * 60 * 1000; + const filtered = history.filter( + (ping) => new Date(ping.timestamp).getTime() >= axisStart, + ); + const sampled = downsampleHistory(filtered); + const sessionIds = Array.from( + new Set(sampled.map((ping) => ping.session_id || "unknown")), + ); + const segments = sessionIds.map((sessionId, index) => { + const session = sessionById.get(sessionId); + return { + key: `segment_${index}`, + sessionId, + color: stableColor(session?.label || session?.fingerprint || sessionId), + }; + }); + const segmentKey = new Map( + segments.map((segment) => [segment.sessionId, segment.key]), + ); + const rows: ChartRow[] = sampled.map((ping) => { + const row: ChartRow = { + timestamp: new Date(ping.timestamp).getTime(), + ping, + }; + row[segmentKey.get(ping.session_id || "unknown") || "segment_0"] = + ping.latency_ms; + return row; + }); + const markers = speedTests + .filter((test) => { + const timestamp = new Date(test.timestamp).getTime(); + return timestamp >= axisStart && sampled.length > 0; + }) + .map((test) => { + const timestamp = new Date(test.timestamp).getTime(); + const nearest = sampled.reduce((best, ping) => + Math.abs(new Date(ping.timestamp).getTime() - timestamp) < + Math.abs(new Date(best.timestamp).getTime() - timestamp) + ? ping + : best, + ); + return { + timestamp, + markerLatency: nearest.latency_ms ?? 0, + ping: nearest, + speedTest: test, + }; + }); + return { rows, segments, markers, axisStart, axisEnd }; + }, [history, sessionById, speedTests, statsPeriod]); + + useEffect(() => { + if (!selectedPing?.session_id) { + setSessionDetails(null); + setNetworkName(""); + return; + } + invoke("get_session_details", { + sessionId: selectedPing.session_id, + target: activeTarget, + }) + .then((details) => { + setSessionDetails(details); + setNetworkName(details.session.label || ""); + setEditingNetworkName(false); + }) + .catch((error) => { + console.error("Failed to load session details:", error); + setSessionDetails(null); + }); + }, [activeTarget, selectedPing]); + + const renameSelectedNetwork = useCallback(async () => { + if (!sessionDetails) return; + await invoke("rename_network_session", { + sessionId: sessionDetails.session.id, + label: networkName, + }); + const sessions = await invoke("get_network_sessions"); + setNetworkSessions(sessions); + setSessionDetails(await invoke("get_session_details", { + sessionId: sessionDetails.session.id, + target: activeTarget, + })); + setEditingNetworkName(false); + }, [activeTarget, networkName, sessionDetails]); + + const runSpeedTest = useCallback(async () => { + setSpeedTestSecondsRemaining(speedTestDuration); + setSpeedTesting(true); + setSpeedTestError(null); + try { + const result = await invoke("run_speed_test"); + setSpeedTests((previous) => [...previous, result]); + if (selectedPing?.session_id === result.session_id) { + setSessionDetails(await invoke("get_session_details", { + sessionId: result.session_id, + target: activeTarget, + })); + } + } catch (error) { + setSpeedTestError(String(error)); + } finally { + setSpeedTesting(false); + } + }, [activeTarget, selectedPing, speedTestDuration]); + + useEffect(() => { + if (!speedTesting) { + return; + } + + const countdown = window.setInterval(() => { + setSpeedTestSecondsRemaining((seconds) => Math.max(0, seconds - 1)); + }, 1000); + + return () => window.clearInterval(countdown); + }, [speedTesting]); // Check if using TCP fallback (not real ICMP) const isTcpFallback = currentMethod && currentMethod !== "Icmp"; @@ -670,6 +892,21 @@ function App() { +
+ + + setSpeedTestDuration( + Math.min(30, Math.max(3, Number(event.target.value) || 7)), + ) + } + min={3} + max={30} + /> + sec +
- + { + const activeTimestamp = Number(state.activeLabel); + if (!Number.isFinite(activeTimestamp) || chart.rows.length === 0) { + return; + } + + const nearestRow = chart.rows.reduce((nearest, row) => + Math.abs(row.timestamp - activeTimestamp) < + Math.abs(nearest.timestamp - activeTimestamp) + ? row + : nearest, + ); + setSelectedPing(nearestRow.ping); + }} + > + new Date(timestamp).toLocaleTimeString([], { + hour: "numeric", + minute: "2-digit", + }) + } /> - - + {selectedPing && ( + + )} + null} cursor={{ stroke: "#64748b" }} /> + {chart.segments.map((segment) => ( + + ))} + {chart.markers.map((marker) => ( + setSelectedPing(marker.ping)} + /> + ))} +
+
+ + {chart.rows.length > 0 + ? `${chart.rows.length} plotted samples` + : "No samples in this range"} + + +
+ {speedTestError &&
{speedTestError}
} + + {selectedPing && ( +
+
+ {new Date(selectedPing.timestamp).toLocaleString([], { + dateStyle: "medium", + timeStyle: "medium", + })} +
+
+
+ {sessionDetails?.session.label || + sessionDetails?.session.isp || + "Unknown connection"} +
+ {sessionDetails && !editingNetworkName && ( + + )} +
+ {sessionDetails && editingNetworkName && ( +
+ setNetworkName(event.target.value)} + onKeyDown={(event) => { + if (event.key === "Enter") renameSelectedNetwork(); + if (event.key === "Escape") { + setNetworkName(sessionDetails.session.label || ""); + setEditingNetworkName(false); + } + }} + placeholder="Name this network" + maxLength={80} + autoFocus + /> + + +
+ )} +
+ Ping + + {selectedPing.latency_ms === null + ? "Timeout" + : `${Math.round(selectedPing.latency_ms)} ms`} + + Session duration + + {sessionDetails + ? `${Math.max( + 0, + Math.round( + (new Date( + sessionDetails.session.ended_at || Date.now(), + ).getTime() - + new Date(sessionDetails.session.started_at).getTime()) / + 60000, + ), + )} min` + : "β€”"} + + Session median + + {sessionDetails?.median_ms != null + ? `${Math.round(sessionDetails.median_ms)} ms` + : "β€”"} + + Session average + + {sessionDetails?.average_ms != null + ? `${Math.round(sessionDetails.average_ms)} ms` + : "β€”"} + + 95th percentile + + {sessionDetails?.p95_ms != null + ? `${Math.round(sessionDetails.p95_ms)} ms` + : "β€”"} + + Packet loss + + {sessionDetails + ? `${sessionDetails.packet_loss_pct.toFixed(1)}%` + : "β€”"} + +
+ {sessionDetails?.latest_speed_test && ( +
+
+ Speed test at{" "} + {new Date( + sessionDetails.latest_speed_test.timestamp, + ).toLocaleTimeString([], { + hour: "numeric", + minute: "2-digit", + })} +
+ + ↓ {Math.round(sessionDetails.latest_speed_test.download_mbps)} Mbps + {" "}↑ {Math.round(sessionDetails.latest_speed_test.upload_mbps)} Mbps + +
+ )} +
+ )} + {/* Site Monitors Section */}
From 10e3072cc8810a39f47a36aaf1b9b10e8e0b24be Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:22:36 -0400 Subject: [PATCH 03/13] Document local testing workflows --- CONTRIBUTING.md | 85 ++++++++++++++++++++++++++++++++ README.md | 1 + screenshots/network-history.png | Bin 0 -> 42443 bytes 3 files changed, 86 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 screenshots/network-history.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9c0ae62 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,85 @@ +# Contributing to PingZilla + +- [Contributing to PingZilla](#contributing-to-pingzilla) + - [Testing Changes on Your Mac](#testing-changes-on-your-mac) + - [Which workflow should I use?](#which-workflow-should-i-use) + - [Fast development workflow](#fast-development-workflow) + - [Validation without launching the app](#validation-without-launching-the-app) + - [Testing a local production bundle](#testing-a-local-production-bundle) + +## Testing Changes on Your Mac + +You do not need to uninstall the Mac App Store or `/Applications` copy of PingZilla. Quit it before launching a development or local build so that two PingZilla processes do not monitor and write history at the same time. + +## Which workflow should I use? + +| Goal | Command | Creates a `.app` bundle? | +|------|---------|---------------------------| +| Interactively test UI or Rust/backend behavior | `pnpm tauri dev` | No | +| Reproduce installed-app behavior or test packaging, signing, sandboxing, entitlements, or a release candidate | `pnpm tauri build --bundles app` | Yes | + +For example, `pnpm tauri dev` is sufficient to test both the network-name pencil interaction and whether **Quit PingZilla** exits cleanly. Since a Quit crash can depend on the native packaged runtime, also test a production bundle once before considering that fix release-ready. You do not need to rebuild the bundle after every small UI iteration. + +## Fast development workflow + +Use this for normal frontend and backend development: + +```bash +pnpm install +pnpm tauri dev +``` + +PingZilla starts as a menu-bar app and may not open a window automatically. Click its menu-bar icon and choose **Open Dashboard…**. + +Changes made while `pnpm tauri dev` is running rebuild automatically. When finished: + +1. Stop the development process with `Control-C` in Terminal. +2. Quit the development PingZilla instance if it remains open. +3. Relaunch the installed version from `/Applications` if desired. + +## Validation without launching the app + +For a small UI-only change: + +```bash +pnpm build +``` + +This checks TypeScript and creates the Vite frontend build. It does not create or update a macOS app bundle. + +For Rust/backend changes: + +```bash +cargo test --manifest-path src-tauri/Cargo.toml +pnpm build +``` + +## Testing a local production bundle + +Create a production-style app when testing native runtime, sandbox, entitlement, packaging, installed-app behavior, or release behavior. This is a separate copy for release-like local testing; it is not needed just to make `pnpm tauri dev` pick up current source changes. + +```bash +pnpm tauri build --bundles app +``` + +The app is created at: + +```text +src-tauri/target/release/bundle/macos/PingZilla.app +``` + +For local sandbox testing, apply an ad-hoc signature with PingZilla's entitlements: + +```bash +codesign --force --deep --sign - \ + --entitlements src-tauri/Entitlements.plist \ + src-tauri/target/release/bundle/macos/PingZilla.app +``` + +Then launch it: + +```bash +open src-tauri/target/release/bundle/macos/PingZilla.app +``` + +This ad-hoc signature is for local testing only; it is not a distribution or Mac App Store signature. \ No newline at end of file diff --git a/README.md b/README.md index 2a66e9e..156717c 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ Run `make help` to see all available commands: ## Documentation +- [Contributing and local testing](CONTRIBUTING.md) - Test development changes without removing the installed app - [Marketing Plan](MarketingPlan.md) - Launch strategy and growth plans ## License diff --git a/screenshots/network-history.png b/screenshots/network-history.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9b7087435e7b926b1f4f6b00f04d5b4cdb1037 GIT binary patch literal 42443 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 literal 0 HcmV?d00001 From 1a98518123b75859215409c38358ba3866295909 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:34:41 -0400 Subject: [PATCH 04/13] Refine selected point details layout --- screenshots/network-history.png | Bin 42443 -> 48181 bytes src/App.css | 10 +++++++++- src/App.tsx | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/screenshots/network-history.png b/screenshots/network-history.png index fd9b7087435e7b926b1f4f6b00f04d5b4cdb1037..6c36c3679147160c98a5b316860241b85e9d4e5e 100644 GIT binary patch literal 48181 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 literal 42443 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 diff --git a/src/App.css b/src/App.css index b890bf8..356c0d5 100644 --- a/src/App.css +++ b/src/App.css @@ -432,6 +432,12 @@ body { background: #22262d; } +.point-details-content { + width: 100%; + max-width: 400px; + margin: 0 auto; +} + .point-details-time { color: #aab3c2; font-size: 10px; @@ -492,7 +498,9 @@ body { display: grid; grid-template-columns: 1fr auto; gap: 5px 16px; - margin-top: 8px; + width: 100%; + max-width: 280px; + margin: 8px auto 0; color: #9ca3af; font-size: 11px; } diff --git a/src/App.tsx b/src/App.tsx index 915669f..b74c99f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1110,6 +1110,7 @@ function App() { {selectedPing && (
+
{new Date(selectedPing.timestamp).toLocaleString([], { dateStyle: "medium", @@ -1225,6 +1226,7 @@ function App() {
)} +
)} From b64f0528aea2222e62dd5e22487d12c2771fb32e Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:39:49 -0400 Subject: [PATCH 05/13] Use narrow dashboard screenshot --- screenshots/network-history.png | Bin 48181 -> 125776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshots/network-history.png b/screenshots/network-history.png index 6c36c3679147160c98a5b316860241b85e9d4e5e..fb47f2a417ea22744a8dd0c2218df305e96759bc 100644 GIT binary patch literal 125776 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
gC!8-%M(3@Y)pH|(JG_>m@H1a`o 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

+
+ {historyViewportEnd !== null && ( + + )}

vO!wU;Qg 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 From 305765976df0abe63dc52842259ae526a666d550 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:46:14 -0400 Subject: [PATCH 06/13] Align network name with session details --- src/App.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/App.css b/src/App.css index 356c0d5..d7d14d8 100644 --- a/src/App.css +++ b/src/App.css @@ -452,6 +452,10 @@ body { display: flex; align-items: center; gap: 5px; + width: 100%; + max-width: 280px; + margin-right: auto; + margin-left: auto; margin-top: 3px; } From 58c7dc4065609df4d3c8199a9df4d8b93336942a Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:48:26 -0400 Subject: [PATCH 07/13] Revert "Align network name with session details" This reverts commit 305765976df0abe63dc52842259ae526a666d550. --- src/App.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/App.css b/src/App.css index d7d14d8..356c0d5 100644 --- a/src/App.css +++ b/src/App.css @@ -452,10 +452,6 @@ body { display: flex; align-items: center; gap: 5px; - width: 100%; - max-width: 280px; - margin-right: auto; - margin-left: auto; margin-top: 3px; } From 466fc9e1ce940f66f0d42f12b719998308982af5 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:49:52 -0400 Subject: [PATCH 08/13] Reduce session details label offset --- src/App.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.css b/src/App.css index 356c0d5..8320063 100644 --- a/src/App.css +++ b/src/App.css @@ -500,7 +500,7 @@ body { gap: 5px 16px; width: 100%; max-width: 280px; - margin: 8px auto 0; + margin: 8px 0 0 clamp(0px, calc((100% - 280px) / 2), 30px); color: #9ca3af; font-size: 11px; } From 9b1cb7a7d93f86662bedfd8a6755a48d439bbdf9 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 12:50:49 -0400 Subject: [PATCH 09/13] Balance session details on wide windows --- src/App.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/App.css b/src/App.css index 8320063..ff44021 100644 --- a/src/App.css +++ b/src/App.css @@ -438,6 +438,12 @@ body { margin: 0 auto; } +@media (min-width: 600px) { + .point-details-content { + transform: translateX(30px); + } +} + .point-details-time { color: #aab3c2; font-size: 10px; From 8d3f12883e3bb1567b1239f65d55f92fe177a879 Mon Sep 17 00:00:00 2001 From: Roman Sheydvasser Date: Fri, 17 Jul 2026 17:00:30 -0400 Subject: [PATCH 10/13] Add horizontal history browsing to ping graph --- CONTRIBUTING.md | 14 ++++++++++-- src/App.css | 5 ++++ src/App.tsx | 61 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 72 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9c0ae62..513e219 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -76,10 +76,20 @@ codesign --force --deep --sign - \ src-tauri/target/release/bundle/macos/PingZilla.app ``` -Then launch it: +Quit any running copy of PingZilla before testing the bundle so that two processes do not monitor and write history at the same time. To launch the bundle in place: ```bash open src-tauri/target/release/bundle/macos/PingZilla.app ``` -This ad-hoc signature is for local testing only; it is not a distribution or Mac App Store signature. \ No newline at end of file +To install the local build in `/Applications`, sign it first using the command above. If an older copy is already installed, remove or replace that entire app bundle rather than merging files into it. Then copy and launch the new bundle: + +```bash +rm -rf /Applications/PingZilla.app +cp -R src-tauri/target/release/bundle/macos/PingZilla.app /Applications/ +open /Applications/PingZilla.app +``` + +Signing before copying preserves the completed bundle's signature; modifying files inside the app afterward invalidates it. + +This ad-hoc signature is for local testing only; it is not a distribution or Mac App Store signature. diff --git a/src/App.css b/src/App.css index ff44021..6e9e9b7 100644 --- a/src/App.css +++ b/src/App.css @@ -403,6 +403,7 @@ body { } .speed-test-btn, +.back-to-live-btn, .network-name-editor button { border: 1px solid #3f4b5f; border-radius: 5px; @@ -418,6 +419,10 @@ body { opacity: 0.6; } +.back-to-live-btn { + margin-left: auto; +} + .speed-test-error { margin-bottom: 8px; color: #fca5a5; diff --git a/src/App.tsx b/src/App.tsx index b74c99f..638b7ba 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -240,6 +240,7 @@ function App() { const [histories, setHistories] = useState>({}); const [statistics, setStatistics] = useState(null); const [statsPeriod, setStatsPeriod] = useState(5); // minutes + const [historyViewportEnd, setHistoryViewportEnd] = useState(null); const [threshold, setThreshold] = useState(400); const [displayMode, setDisplayMode] = useState("icon_and_ping"); const [showSettings, setShowSettings] = useState(false); @@ -587,15 +588,19 @@ function App() { const currentPing = currentPings[activeTarget] ?? null; const currentMethod = currentMethods[activeTarget] ?? null; const history = histories[activeTarget] || []; + const historyWindowMs = statsPeriod * 60 * 1000; const sessionById = useMemo( () => new Map(networkSessions.map((session) => [session.id, session])), [networkSessions], ); const chart = useMemo(() => { - const axisEnd = Date.now(); - const axisStart = axisEnd - statsPeriod * 60 * 1000; + const axisEnd = historyViewportEnd ?? Date.now(); + const axisStart = axisEnd - historyWindowMs; const filtered = history.filter( - (ping) => new Date(ping.timestamp).getTime() >= axisStart, + (ping) => { + const timestamp = new Date(ping.timestamp).getTime(); + return timestamp >= axisStart && timestamp <= axisEnd; + }, ); const sampled = downsampleHistory(filtered); const sessionIds = Array.from( @@ -640,9 +645,41 @@ function App() { ping: nearest, speedTest: test, }; - }); + }); return { rows, segments, markers, axisStart, axisEnd }; - }, [history, sessionById, speedTests, statsPeriod]); + }, [history, historyViewportEnd, historyWindowMs, sessionById, speedTests]); + + const scrollHistory = useCallback( + (event: React.WheelEvent) => { + const horizontalDelta = Math.abs(event.deltaX) > Math.abs(event.deltaY) + ? event.deltaX + : event.shiftKey + ? event.deltaY + : 0; + if (horizontalDelta === 0 || history.length === 0) return; + + event.preventDefault(); + const earliestTimestamp = new Date(history[0].timestamp).getTime(); + const earliestEnd = Math.min( + Date.now(), + earliestTimestamp + historyWindowMs, + ); + const millisecondsPerPixel = historyWindowMs / 500; + + setHistoryViewportEnd((currentEnd) => { + const nextEnd = Math.max( + earliestEnd, + Math.min(Date.now(), (currentEnd ?? Date.now()) + horizontalDelta * millisecondsPerPixel), + ); + return Date.now() - nextEnd < 1000 ? null : nextEnd; + }); + }, + [history, historyWindowMs], + ); + + useEffect(() => { + setHistoryViewportEnd(null); + }, [activeTarget, statsPeriod]); useEffect(() => { if (!selectedPing?.session_id) { @@ -1002,7 +1039,11 @@ function App() { )} {/* Ping Graph */} -