Skip to main content

Live response-time stats from streamed AppPack web logs.

Project description

apppack-stats

Live response-time stats from streamed AppPack web logs.

apppack-stats shells out to apppack logs --raw --follow for the app you name, parses the JSON request lines, and renders a live Textual data table grouped by (method, normalized path). Click any column header to re-sort by it; click again to flip the direction.

Slowest endpoints — 1842/1903 lines parsed, 47s elapsed
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┓
┃ Method ┃ Path                          ┃ Count ┃ Avg ms ┃ p95 ms ┃ Max ms ┃ Err ┃
┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━┩
│ GET    │ /reports/<id>/export          │     7 │   1842 │   2210 │   2480 │     │
│ POST   │ /api/v1/orders                │    23 │    412 │    711 │    980 │   2 │
│ GET    │ /dashboard                    │    91 │    188 │    320 │    640 │     │
└────────┴───────────────────────────────┴───────┴────────┴────────┴────────┴─────┘

Usage

No install required — run it straight from PyPI with uv:

uvx apppack-stats <appname>

Press q (or Ctrl+C) to stop.

Keys

Key Action
Click column header Sort by that column (click again to reverse)
n Toggle URL normalization on/off
q Quit

The AppPack CLI must be on your PATH and authenticated against the account that owns the app.

Options

Flag Default Notes
--refresh SEC 1.0 Seconds between redraws
--start DUR 5m How far back to seed history (30m, 2h, 1d, …)
--prefix STRING none AppPack log-group prefix filter — see note below
--no-normalize off Group by raw path instead of normalizing IDs
-o, --output PATH none On exit, write the final stats to PATH as CSV (- for stdout). Rows are sorted by whichever column was active in the UI when you quit.

The table fills the terminal and scrolls when there are more rows than fit.

A note on --prefix

apppack logs --prefix filters on AppPack's underlying CloudWatch log-group names, which don't always begin with the service name shown in the rendered (web/web/<task>) label. Different AppPack apps use different log-group naming conventions, so a fixed default like web silently drops everything for some apps. By default apppack-stats passes no prefix and lets the parser filter — only access-log JSON lines (those with method, path, status, response_time_us) are counted; everything else is skipped.

URL normalization

By default, paths are normalized so that /orders/12345 and /orders/67890 share a row as /orders/<id>. UUIDs become /<uuid>, long hex hashes become /<hash>. Pass --no-normalize to keep raw paths.

Adding support for another log shape

Access-log shapes live in src/apppack_stats/extractors.py. Append a new LogShape(...) to the SHAPES list — pick a time_field key that doesn't collide with existing ones, set time_unit to "us", "ms", or "s", and the parser will pick it up automatically.

Project details


Download files

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

Source Distribution

apppack_stats-0.3.0.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

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

apppack_stats-0.3.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file apppack_stats-0.3.0.tar.gz.

File metadata

  • Download URL: apppack_stats-0.3.0.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for apppack_stats-0.3.0.tar.gz
Algorithm Hash digest
SHA256 b6c9c7e6a89f0faf14abbe87c20ba07d1a9e199a8207c924ca4e970c9876db9d
MD5 34064cde32fb69b3bfe2a8d446b318b6
BLAKE2b-256 5a563acccebc922399609b209009e8a3d0bfb14fc3e5fd39254817305fd21370

See more details on using hashes here.

File details

Details for the file apppack_stats-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: apppack_stats-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for apppack_stats-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9de5949ac685803aac819291b84565eebd7203689df640f4e7515a020a9335de
MD5 0e1fedcfcf174e716193981a1dbfc989
BLAKE2b-256 c8fabbe7449d4cf29f17fad0249a2d36e7f22a113c64ca87ec2de67549c8f0ce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page