sping Documentation
Latest Version: 0.2.10
Modern terminal HTTP/TCP latency monitoring tool with real-time visualization. Think httping
meets modern CLI design with rich terminal UI, phase timing, and advanced analytics.
Status: Feature-complete MVP with HTTP/TCP support, phase timing, outlier detection, and comprehensive monitoring capabilities.
Demo
Real-time latency monitoring with interactive charts showing HTTP response times, outlier detection, and live statistics.
Why?
I’ve frequently found myself using nvitop to diagnose GPU/CPU contention issues.
The two best things about it are:
- It’s easy to install if I can access pip in the container
- It makes a compelling screenshot (which helps me communicate with coworkers.)
With those two lessons in mind: Here is Sping!
Purpose: Help observe and diagnose latency issues at layer 4+ (TCP/HTTP/HTTPS)
Two good things about it:
- It’s easy to install if you have pip. (Available at service-ping-sping on PyPi)
- It makes a compelling screenshot.
Features
- 🌐 HTTP & TCP Monitoring: Support for
http://
,https://
, andtcp://
protocols - 📊 Real-time Visualization: Interactive charts and live statistics in your terminal
- 🔍 Phase Breakdown: DNS, connection, TLS, request, and response timing
- 🚨 Outlier Detection: Automatic outlier detection using MAD (Median Absolute Deviation)
- ⚠️ Threshold Alerting: Warning and critical thresholds with exit codes
- 🌍 DNS Control: IPv4/IPv6 selection and DNS resolution caching
- 📈 Advanced Statistics: Percentiles (p50, p90, p95, p99), standard deviation
- 💾 Multiple Output Formats: Interactive UI, plain text, JSON, and JSON export
- 🔐 Authentication: Bearer tokens and basic auth support
- 🎨 Rich Terminal UI: Beautiful charts, color-coded logs, and responsive layouts
- 🌈 Color Palettes: Choose from 8 themed color schemes (sunset, ocean, forest, volcano, galaxy, arctic, neon, monochrome)
Install
pip install service-ping-sping
For development:
Quick Start
# HTTP monitoring with interactive UI
sping google.com
# TCP connection monitoring
sping tcp://google.com:80
# HTTPS with custom options
sping https://api.example.com --interval 0.5 --count 20
# JSON output for automation
sping google.com --json --count 5
# Advanced monitoring with thresholds
sping example.com --warn 100 --crit 500 --percentiles
# Try different color themes
sping example.com --palette ocean
Usage Examples
HTTP/HTTPS Monitoring
# Basic HTTP monitoring (auto-adds http://)
sping example.com
# HTTPS with custom method and body transfer
sping https://api.example.com --method POST --body
# IPv4 only with DNS caching
sping google.com --ipv4 --resolve-once
# With authentication
sping api.example.com --auth "bearer:your-token"
sping api.example.com --auth "user:password"
TCP Connection Monitoring
# Test TCP connectivity
sping tcp://google.com:80
sping tcp://example.com:443
# Monitor database connections
sping tcp://localhost:5432 --interval 0.1
Advanced Features
# Outlier detection and thresholds
sping example.com --warn 100 --crit 500 --count 100
# Export detailed timing data
sping example.com --export-file results.json --count 50
# Show percentile statistics
sping example.com --percentiles --count 100
# Plain output for scripting
sping example.com --plain --count 5
Outlier Detection
sping automatically detects unusual latency spikes using Median Absolute Deviation (MAD) analysis:
What Counts as an Outlier
- Latency outliers: Response times that deviate significantly from recent baseline performance
- Statistical threshold: Latencies that are more than 6x the MAD away from the median
- Baseline requirement: Needs at least 10 successful samples to establish baseline
- Rolling window: Uses the last 30 successful requests to calculate normal behavior
- Successful requests only: Only analyzes successful responses (errors are tracked separately)
How It Works
- Baseline calculation: Median of recent 30 successful latencies (e.g., 100ms)
- Variability measure: MAD of those latencies (e.g., 15ms)
- Outlier threshold:
|current_latency - median| / MAD > 6.0
- Example: If baseline is 100ms ± 15ms MAD, requests > 190ms or < 10ms would be outliers
Visual Indicators
- Interactive mode: Outlier requests show
[OUTLIER]
marker in the log - Statistics bar: Shows red outlier count when detected (e.g.,
outliers 3
) - JSON output:
"anomaly": true
field in export data (kept for API compatibility)
Note: Outlier detection helps identify performance degradation, network issues, or service problems that might not trigger error thresholds.
Command Line Options
Core Options
-i, --interval FLOAT
: Seconds between probes (default: 1.0)-c, --count INT
: Number of probes then exit--timeout FLOAT
: Request timeout in seconds (default: 10.0)-X, --method TEXT
: HTTP method (default: HEAD)
Protocol & DNS
--ipv4
: Force IPv4 only--ipv6
: Force IPv6 only--resolve-once
: Resolve DNS only once and cache
HTTP Options
--body
: Include full body transfer time--no-keepalive
: Disable persistent connections--user-agent TEXT
: Custom User-Agent string--auth TEXT
: Authentication (user:pass or bearer:token)--insecure
: Skip TLS verification
Monitoring & Alerts
--warn FLOAT
: Warning threshold in milliseconds--crit FLOAT
: Critical threshold in milliseconds--percentiles
: Show percentile statistics in summary
UI & Display
--refresh-rate FLOAT
: UI update throttling in Hz (default: 4.0, higher = more responsive, lower = less CPU)--palette PALETTE
: Color palette for latency visualization (default: sunset)--xterm-colors-only
: Force basic terminal color compatibility (useful for older terminals)
Color Palettes
Choose from beautiful themed color palettes to customize your latency visualization:
Sunset Palette (Default)
Warm oranges and reds reminiscent of a beautiful sunset
#626262
#808080
#6B59C3
#836FFF
#8968CD
#AB82FF
#CD96CD
#FFBBFF
#CD8C95
#FFAEB9
Ocean Palette
Cool blues and teals like ocean depths
#000080
#0000FF
#1874CD
#1E90FF
#009ACD
#00BFFF
#00CDCD
#00FFFF
#66CDAA
#7FFFD4
Forest Palette
Natural greens from deep forest to bright sunlight
#BC8F8F
#D2B48C
#F4A460
#A2CD5A
#BCEE68
#006400
#008B00
#00CD00
#00FF00
#66FF66
Volcano Palette
Fiery reds and oranges like molten lava
#8B0000
#CD0000
#FF0000
#FF4500
#CD6600
#FF8C00
#FFA500
#CDAD00
#FFD700
#FFFF66
Galaxy Palette
Cosmic purples and magentas of deep space
#551A8B
#7D26CD
#AB82FF
#CD00CD
#EE00EE
#FF00FF
#CD6090
#FF1493
#CD919E
#FF00FF
Arctic Palette
Crisp blues and whites of polar ice
#4682B4
#A2B5CD
#CAE1FF
#E0EEEE
#E0FFFF
#FFFFFF
#8DB6CD
#B0E2FF
#87CEEB
#FFFFFF
Neon Palette
Bright electric colors for a cyberpunk feel
#1C1C1C
#4D4D4D
#0000FF
#1E90FF
#00FFFF
#00FF7F
#7FFF00
#FFFF00
#FF1493
#FF00FF
Monochrome Palette
Classic grayscale gradient
#121212
#262626
#3A3A3A
#4D4D4D
#626262
#808080
#9E9E9E
#B2B2B2
#D6D6D6
#EDEDED
# Examples with different palettes
sping example.com --palette ocean
sping example.com --palette volcano --count 20
sping example.com --palette neon --percentiles
Color Compatibility Notes
Terminal Color Support: sping automatically detects your terminal’s color capabilities and adjusts accordingly. However, older terminals or certain environments may experience:
- Limited Color Support: Older terminals may only support basic ANSI colors rather than rich RGB colors
- Solution: Set
TERM=xterm-256color
in your environment or use--xterm-colors-only
for consistent basic colors - Compatibility Mode: Use
--xterm-colors-only
to force basic terminal colors that work everywhere
# For maximum compatibility with older terminals
sping example.com --xterm-colors-only
# Or set environment variable for better color support
TERM=xterm-256color sping example.com
Output Formats
--json
: JSON output mode (one object per line)--plain
: Plain text output mode--export-file FILE
: Export JSON results to file
Output Formats
Interactive Mode (Default)
Real-time terminal UI with:
- Live latency chart with gradient coloring
- Recent requests log with timing details
- Statistics panel with min/mean/max/stdev
- Outlier highlighting and threshold indicators
Plain Text Mode (--plain
)
[1] 1755658486.287: 484.313ms 200 (application/json) from httpbin.org (52.1.207.236)
--- https://httpbin.org/get sping summary ---
1 probes, 1 ok, 0 errors
Latency (ms): min 484.313 mean 484.313 max 484.313
JSON Mode (--json
)
"seq": 1, "timestamp": 1755658729.193, "latency_ms": 11.110, "status_code": 0, "error": null, "bytes_read": 0, "content_type": "tcp/connection", "host_address": "google.com (142.250.65.238)", "anomaly": false, "phases": "dns_ms": 5.444, "connect_ms": 5.598, "tls_ms": null, "request_write_ms": null, "ttfb_ms": null, "body_read_ms": null, "total_ms": 11.110
Phase Timing Breakdown
sping provides detailed timing for each phase of the connection:
- DNS: Domain name resolution time
- Connect: TCP connection establishment
- TLS: TLS/SSL handshake time (HTTPS only)
- Request Write: Time to send HTTP request
- TTFB: Time to first byte (response headers)
- Body Read: Time to read response body
- Total: End-to-end request time
Exit Codes
0
: Success1
: Warning threshold exceeded (when--warn
specified)2
: Critical threshold exceeded (when--crit
specified)
Perfect for monitoring scripts and alerting systems.
Quit Interactive Mode
Press Ctrl+C
to gracefully exit and see the final summary.
Requirements
- Python 3.9+
- Modern terminal with color support recommended
- Works on Linux, macOS, and Windows
License
MIT – see LICENSE.md
Latest documentation • Version 0.2.10 specific docs • Install from PyPI