isitup is a small CLI that periodically checks whether servers respond to ping and, depending on how the target is written, HTTP or a TCP port:
| Target | Checks |
|---|---|
example.com |
ping only |
example.com:1337 |
ping + TCP connect to port 1337 |
http://example.com / https://example.com |
ping + HTTP (catching a 500, a DNS failure, an expired TLS certificate, a redirect loop, etc.) |
https://example.com:1337 |
ping + HTTP, against that port |
Ping is checked independently from the HTTP/TCP probe: many hosts (behind
load balancers, CDNs, or firewalls) drop ICMP but serve their actual service
just fine, so a blocked ping alone doesn't mark a target down: the "Status"
column is based on the probe (HTTP or TCP), with ping shown alongside as
extra diagnostic info. A target only shows as OFFLINE when both ping and
the probe fail; a ping-only target's status is based on ping alone, since
there's nothing else to check.
If the same host appears more than once (e.g. example.com and
https://example.com/health), it's only pinged once per round. The ping
result is shared across all targets pointing at that host.
While checks are running you get a live spinner and a progress bar per
target counting down its timeout; results are then shown in a table that
updates in place (via rich) rather
than reprinting on every round.
Each target also keeps a rolling window of its last 20 response times for the session (HTTP response time or TCP connect time, whichever applies), shown as Min/Max latency columns and a tiny sparkline ("Trend"), along with the last time it was seen online and the last time it was seen offline. This history is in-memory only and resets each time you start the tool.
Installation
The package is published on PyPI as isitup-cli, but it installs a plain
isitup command:
uv tool install isitup-cli
# or: pipx install isitup-cli
# or: pip install isitup-cli
To try unreleased changes straight from main instead (no PyPI release
needed):
uv tool install git+https://github.com/ramsesoriginal/isitup
Either way, remove it later with uv tool uninstall isitup.
Usage
isitup --url example.com --url https://example.org --url db.internal:5432
Or with a config file:
cp config.example.yaml config.yaml
# edit config.yaml
isitup --config config.yaml
Config files and --url flags can be combined; the tool watches the union of
both. The config file is watched for changes and reloaded automatically:
add, remove, or edit targets without restarting the tool (--url targets
can't change at runtime, only what's in the file).
Options
| Flag | Description |
|---|---|
-c, --config PATH |
YAML file listing targets; reloaded automatically on change |
-u, --url TARGET |
a target to monitor (repeatable): hostname, hostname:port, or a URL |
-i, --interval SECONDS |
seconds between check rounds (default: 30) |
--ping-timeout SECONDS |
ping reply timeout (default: 2) |
--http-timeout SECONDS |
timeout for the HTTP request or TCP connect (default: 5) |
--no-ping |
skip ICMP entirely, HTTP/TCP-only checks |
--once |
run a single round and exit; exit code is 1 if any target is down, 0 otherwise. Useful as a cron/CI health gate |
--plain |
print one plain-text line per target per round instead of the live UI (for logging/piping) |
--json |
print one JSON object per target per round instead of the live UI (for machine consumption) |
--plain and --json are mutually exclusive with each other, and both skip
the interactive spinner/progress UI entirely.
Note on ping
Some servers/networks (common on cloud providers, behind load balancers or
CDNs) block ICMP echo requests entirely even though the service itself is
perfectly reachable. The "Status" column already accounts for this and
won't flag such a target as down (unless it's ping-only, in which case ping
is the only signal there is). If you'd rather not run ping checks against
a target at all (e.g. to skip the ~2s ping timeout), either set ping: false
for it in the config file, or pass --no-ping to disable ICMP checks
globally. Note that a ping-only target (bare hostname, no port) can't have
ping: false, there would be nothing left to check.
Failure classification
When the HTTP or TCP probe fails, the specific reason is captured as
error_kind (visible in --json output, and shown as a short tag like
DOWN (DNS) in the Service column otherwise):
error_kind |
Meaning |
|---|---|
dns |
the hostname failed to resolve |
tls |
a TLS/certificate error (HTTP only, e.g. expired or self-signed cert) |
redirect |
too many redirects (HTTP only, possible redirect loop) |
timeout |
didn't complete within --http-timeout |
connection |
connection refused or otherwise unreachable |
client_error / server_error |
got a 4xx / 5xx HTTP response |
request_error |
anything else requests raised |
Development
uv sync
uv run isitup --once --url https://example.com
uv run pytest # tests
uv run ruff check . # lint
uv run ruff format . # format
uv run mypy src tests # type check
Every push and pull request runs this same lint/type-check/test suite via GitHub Actions, across Linux and Windows.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file isitup_cli-0.1.3.tar.gz.
File metadata
- Download URL: isitup_cli-0.1.3.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b031eb4fab953250cf8e2a2aca94a810fe90626d26a2bffb4daae5c11d39f78f
|
|
| MD5 |
21cff17748a7bed3d5aac689b8762a59
|
|
| BLAKE2b-256 |
66fc5cdececb1a271f9ec5c4e8eb0814939610a8ed3a312e8296e6d7da4efd16
|
File details
Details for the file isitup_cli-0.1.3-py3-none-any.whl.
File metadata
- Download URL: isitup_cli-0.1.3-py3-none-any.whl
- Upload date:
- Size: 30.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25dfe54292bacd475f5fe5a686fae380d127aa9f113778b877827df00eb1d54a
|
|
| MD5 |
b8774a62d7e35799284e631d43e7c815
|
|
| BLAKE2b-256 |
99bffaa31f6308663815a6cf31cf6c13008c35dd6150d2721695fe5ffaa445c0
|