hale
hale is a lightweight, high-precision network connection quality monitor. It answers the critical question: "Is my internet connection OK right now?"
Unlike standard ping tools, hale uses concurrent TCP probing across six major global networks to provide an at-a-glance health assessment without requiring root/sudo privileges.
Vision & Purpose
It's often difficult to tell if internet slowness is caused by your own connection, a specific website, or a wider outage. hale provides immediate clarity through:
- Immediate clarity: Big, obvious status indicators (OK/Slow/Disconnected).
- Context-aware feedback: Descriptive explanations when issues are detected.
- High-precision monitoring: Optimized for detecting micro-dropouts and stability issues that standard tools miss.
Key Features
- Dual Mode Operation:
- TUI (Default): A rich, real-time dashboard with historical status bars and per-provider metrics.
- CLI (
--check): A one-shot diagnostic tool with proper exit codes for scripts and automation.
- Intelligent Analysis:
- Multi-Provider Probing: Simultaneously monitors Google, AWS, Azure, Cloudflare, Quad9, and OpenDNS.
- Majority Voting: Uses a 4/6 threshold to filter out localized network noise or single-provider outages.
- High Frequency: 500ms update interval for immediate detection of micro-dropouts.
- Historical Visibility:
- Per-provider status history bars.
- 5-minute and 1-hour aggregate connection overviews.
- Automatic downtime tracking and duration calculation.
- Lean & Safe:
- Resource Efficient: Memory footprint < 5MB, CPU usage < 1%.
- Zero Configuration: Works out of the box with sensible defaults.
- Terminal Safety: Implements panic hooks to ensure your terminal is always restored to its original state.
Installation
Ensure you have the Rust toolchain installed, then:
# Build the release binary
# The binary is now available at
Usage
Terminal User Interface (Interactive)
The default mode provides a full-screen dashboard for continuous monitoring.
- Top Banner: Real-time status, average latency, and uptime timer.
- Targets: Live latency and status history for each of the 6 providers.
- Overview: 5m and 1h sliding windows of your overall connection health.
- Exit: Press
q,ESC, orCtrl+C.
Command Line Interface (One-shot)
Ideal for quick checks or integration into other tools and scripts.
# Basic check
# Verbose output with timestamps
# Machine-readable JSON output
Exit Codes
The CLI mode returns standard Unix exit codes:
0: Connection is OK.1: Connection is Slow or Disconnected.
Architecture & Tech Stack
Technology Stack
- Language: Rust (2021 Edition)
- Async Runtime:
tokio(v1) for concurrent non-blocking probing. - TUI Framework:
ratatuiwithcrosstermbackend. - CLI Parsing:
clap(v4) with derive macros.
Module Structure
- Monitor: Handles concurrent TCP (port 443) handshake probing.
- Analysis: Aggregates raw data and applies majority voting for stability.
- UI: Renders the interactive TUI and formatted CLI outputs.
- Utils: Provides session logging with automatic downtime calculation.
Monitoring Targets
Hale monitors the entry points of the world's most critical internet infrastructure:
- Google:
8.8.8.8 - AWS:
s3.amazonaws.com - Azure:
portal.azure.com - Cloudflare:
1.1.1.1 - Quad9:
9.9.9.9 - OpenDNS:
208.67.222.222
Status Thresholds
- OK: Latency < 100ms.
- Slow: Latency 100-300ms.
- Disconnected: Latency > 300ms or majority (4/6) timeout.
Logging
Hale automatically creates a detailed session log at:
/tmp/hale-{timestamp}.log
This log records every status change and precisely calculates how long each network incident lasted.
Testing
Hale includes a comprehensive suite of unit tests covering its analysis engine and probing logic.
Release Process
This project uses an automated release workflow powered by release-plz.
- Trigger: Pushing to the
mainbranch. - Versioning: Determined automatically based on Conventional Commits.
fix:-> Patch bump.feat:-> Minor bump.BREAKING CHANGE:-> Major bump.
- Publishing: Automatically publishes to crates.io and creates a GitHub release/tag.
License
This project is licensed under the MIT License - see the LICENSE file for details.