Skip to main content

ramore

pypi

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)

Source distribution for ramore 0.2.1
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)

Table of built distributions (wheels) for ramore 0.2.1
File Interpreter ABI Platform Actions
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.

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