ramore
ramore monitoring and reporting. ramore installs its own side on the box serving a site (an nginx request log in its JSON format, and optionally a sampler of the box's memory, disks and units). ramore report pulls both logs over ssh, archives every request in a partitioned parquet store, sorts sessions into bots and humans, and publishes an anonymized static report site to the app repo's GitHub Pages branch. Extracted from the reporting pipeline of rankless.
The demo report renders an example site's synthetic traffic; uvx ramore demo builds the same locally.
Install
uv tool install ramore # or, from a checkout with the locked versions: make install
Use
The app's repo commits a ramore.toml; every command reads the one in the working directory, or the one --config-file names.
ramore report # box check → pull → archive → aggregate → render → publish
ramore report --no-publish --mode local
ramore report --dry-run # pull and parse, no writes, the box included
ramore box # install or update ramore's side of the box (sudo over ssh)
ramore box --check # current or outdated, exit 1 when outdated
ramore monitor # probe the site, mail incidents (--once: print one round)
ramore units --report --monitor # this host's systemd user units (--remove to drop them)
ramore reset # wipe the store and the published history
ramore demo --out ramore-demo # an example app and its synthetic traffic, rendered
Mail goes through SMTP over SSL with RAMORE_SMTP_HOST, RAMORE_SMTP_USER and RAMORE_SMTP_PASSWORD from the environment, to RAMORE_MAIL_TO (default: the user). The units read them from ~/.config/environment.d/.
ramore.toml
Relative paths resolve against the file's directory. A variant (another box, say) starts with extends = "ramore.toml" and replaces whole tables; publish = false keeps it local.
name = "Example" # the site title: "Example reports"
store = "reports" # archive, aggregates, rendered sites, run logs, state
[source]
ssh = "example-live" # the box serving the site; its user needs passwordless sudo
hosts = ["www.example.org", "api.example.org"] # the vhosts reported on; every other row is dropped
[routes]
sveltekit = "." # a SvelteKit project: its src/routes pages, endpoints and data routes
api = "gen/routes.py:API_ROUTES" # a literal list of API paths assigned in a Python file
[search] # optional: the search route, a strong human signal
route = "/v1/search/{kind}"
param = "q"
[login] # optional: a login card and chart on the landing page
route = "/callback"
ok_status = 302
label = "Logins"
[monitor] # optional: `ramore monitor`; defaults in `config.Monitor`
url = "https://www.example.org/" # probed with `follow` random same-site links from it
max_latency_s = 2 # a slower answer fails
report_url = "https://example.github.io/example/" # optional: alert when the published report goes stale
[alerts] # optional: report-time thresholds on the box sample, in % of
disk_pct = 85 # each limit (memory_pct, disk_pct, unit_anon_pct, unit_fds_pct);
# defaults in `config.Alerts`
[metrics] # optional: the box sampler and the local site's box page
units = ["app-*.service", "nginx.service"] # unit-name globs
interval_s = 30 # default DEFAULT_METRICS_INTERVAL_S
mounts = ["/", "/data"] # default DEFAULT_METRICS_MOUNTS
[site]
include = { poster = "docs/poster" } # directories published under the site as-is
[publish] # optional: without it the site stays local
branch = "gh-pages" # default DEFAULT_BRANCH
remote = "origin" # the app repo's remote; default DEFAULT_REMOTE
How the report works, what it stores and what it installs on the box: docs/report.md.
Metadata
Release files for ramore 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ramore-0.2.1.tar.gz | 85.8 kB | Without provenance | Details for ramore-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ramore-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for ramore-0.2.1-py3-none-any.whl |
Total release size: 173.0 kB
Release files / ramore-0.2.1.tar.gz
| Download URL | ramore-0.2.1.tar.gz |
|---|---|
| Size | 85.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5a7ac7056097e81f66e4573ec25a8bbc8cf1177cd28876751053ba244713b6a
|
|
BLAKE2b-256 checksum How to use checksums |
238549f858424a40b44ab069624869bc882a9ee335c09acdccaba1295126dfa2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ramore-0.2.1-py3-none-any.whl
| Download URL | ramore-0.2.1-py3-none-any.whl |
|---|---|
| Size | 87.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
246978544f66ad81ffeb0c0a2f8b4d1dd54597ea375393dde7b510fca069cabe
|
|
BLAKE2b-256 checksum How to use checksums |
77fbf9fc6753737019181f6a7bbbbeb36b7add86291a6eb5f8763fabe539dddd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ramore 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.