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
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 apppack_stats-0.4.0.tar.gz.
File metadata
- Download URL: apppack_stats-0.4.0.tar.gz
- Upload date:
- Size: 17.4 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25a38b844d9c0e589a95443879be92368f52bf243f45c42dc73b7d14345e0432
|
|
| MD5 |
ac15e23640d9c6df001379954618057b
|
|
| BLAKE2b-256 |
7b29a2fdcb6ce464722c953fd9edac010ce7d894c8338cc2bbb17299645d6f07
|
File details
Details for the file apppack_stats-0.4.0-py3-none-any.whl.
File metadata
- Download URL: apppack_stats-0.4.0-py3-none-any.whl
- Upload date:
- Size: 16.6 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
100c20c83cedabffa9c1b964d5a6dccccfb0dbfde5a98edd92785efd53f53808
|
|
| MD5 |
5b383b445ad2696cb8283af75891b171
|
|
| BLAKE2b-256 |
7179c45cf4d4d0ae57c37122c738bd3b62dcb9af94ce433d73208ef02dfd495e
|