Skip to main content
isitup

Is it up? Ping, HTTP, and TCP checks in one small, fast CLI.

PyPI CI License: GPL v3 Python 3.14+ uv Ruff Checked with mypy GitHub stars


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

GPL-3.0: see LICENSE for the full text.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isitup_cli-0.1.3.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

isitup_cli-0.1.3-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

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

Hashes for isitup_cli-0.1.3.tar.gz
Algorithm Hash digest
SHA256 b031eb4fab953250cf8e2a2aca94a810fe90626d26a2bffb4daae5c11d39f78f
MD5 21cff17748a7bed3d5aac689b8762a59
BLAKE2b-256 66fc5cdececb1a271f9ec5c4e8eb0814939610a8ed3a312e8296e6d7da4efd16

See more details on using hashes here.

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

Hashes for isitup_cli-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 25dfe54292bacd475f5fe5a686fae380d127aa9f113778b877827df00eb1d54a
MD5 b8774a62d7e35799284e631d43e7c815
BLAKE2b-256 99bffaa31f6308663815a6cf31cf6c13008c35dd6150d2721695fe5ffaa445c0

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.4

2 files

This release

0.1.3 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page