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 example.com https://example.org db.internal:5432

--url/-u work the same way and can be freely mixed with positional targets: isitup example.com -u https://example.org is the same as isitup example.com https://example.org:

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 CLI-supplied targets (positional or --url) 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 (CLI-supplied 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
TARGET (positional) a target to monitor: same as -u/--url, just without the flag (repeatable)
-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.

Changelog

See CHANGELOG.md.

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.4.tar.gz (29.8 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.4-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file isitup_cli-0.1.4.tar.gz.

File metadata

  • Download URL: isitup_cli-0.1.4.tar.gz
  • Upload date:
  • Size: 29.8 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.4.tar.gz
Algorithm Hash digest
SHA256 82da74dc86a92500f875c0ba79fb727aeda3976d99fb70952deff2bdc14e459a
MD5 81eb3d636dcbae12396904a390e39e89
BLAKE2b-256 13a539039c145c9625f9525b750b089ad5f40e2d43002ac9ddecc2f5781666e4

See more details on using hashes here.

File details

Details for the file isitup_cli-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: isitup_cli-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 30.7 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d457aa95668f254acc7016878486c9083a2bcbaa87fa9308bc2edf4f345d9a83
MD5 20215527ba153b5995790ece6f7f8f5f
BLAKE2b-256 8e2019a4b15ab6b8b110cd3c3bd1cace6580deb4ec606d1b34aedec29e01ed01

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 files

0.1.3

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