k4bench.remote¶
k4bench.remote ¶
Discover and download benchmark run data from a WebEOS HTTP endpoint.
The WebEOS site serves an Apache-style directory listing at K4BENCH_DATA_URL. Expected layout::
{base_url}/
{detector}/ e.g. ALLEGRO_o1_v03/
{platform}/ e.g. x86_64-almalinux9-gcc14.2.0-opt/
{stack}/ e.g. key4hep-2026-05-19/
{sample}/ e.g. single_e-_10GeV/
{YYYY-MM-DD}/ e.g. 2026-05-23/
run_info.json
machine_info.json
{config}_results.csv
{config}_events.json
{config}_regions.json
{config}.log
list_detectors ¶
Return available detector names.
Underscore-prefixed directories at the top level (e.g. _reports/, where
the nightly regression reports live) are reserved for non-detector data and
skipped.
Source code in k4bench/remote.py
list_platforms ¶
list_samples ¶
Return available physics samples for (detector, platform, stack).
Source code in k4bench/remote.py
scan_stack_samples ¶
Return {stack: [samples]} for (detector, platform), newest stack first.
Single source of truth for both the cross-release sample union and the per-sample stack list, so the sidebar scans the release tree only once (one listing per stack) instead of twice. A sample may be added or dropped between Key4hep releases; callers derive the union and the per-sample stacks from this map. Stacks whose listing fails are skipped (logged at debug).
Source code in k4bench/remote.py
list_runs ¶
Return available run dates for a (detector, platform, stack, sample) combination, newest first.
Source code in k4bench/remote.py
list_run_dates_all_stacks ¶
list_run_dates_all_stacks(base_url: str, detector: str, platform: str, sample: str) -> dict[str, list[str]]
Return {stack: [run_dates]} for (detector, platform, sample).
Discovery only — issues directory listings and no file downloads. The
run-date directory names are YYYY-MM-DD, so the full set of available
dates per stack is obtained cheaply; this populates the trend-window control
and lets the caller download only the runs inside the selected window.
Stacks that do not contain sample (or whose listing fails) are skipped.
Source code in k4bench/remote.py
ensure_run_cached ¶
ensure_run_cached(base_url: str, detector: str, platform: str, stack: str, sample: str, date: str, cache_root: str | None = None) -> Path
Download one run into a stable cache path and return it.
Cache layout: {cache_root}/{detector}/{platform}/{stack}/{sample}/{date}/.
Historical runs are immutable, so a run whose .complete sentinel exists is
returned without any HTTP. To stay correct across concurrent reruns and
processes, files are downloaded into a private temp dir and the finished run
is published with a single atomic rename: a reader therefore never sees a
half-written run_dir, and an interrupted download leaves no partial run
behind (the temp dir is discarded) rather than a dir that looks cached.
Source code in k4bench/remote.py
fetch_runs_windowed ¶
fetch_runs_windowed(base_url: str, detector: str, platform: str, sample: str, stacks_dates: dict[str, list[str]], cache_root: str | None = None) -> list[dict]
Fetch every (stack, date) in stacks_dates in parallel, returning a
list of {"stack", "date", "run_dir"} for the runs successfully cached.
Each run is fetched at most once (see :func:ensure_run_cached); callers pass
an already date-windowed stacks_dates so only in-window runs are downloaded.
Runs that fail to download are logged and skipped rather than aborting the load.
Thread count is Python's own default (no max_workers; threads are
created lazily, never more than there is work to do). The concurrency
ceiling lives one level down, in :data:_POOL_MAXSIZE's connection pool
(see :func:_get_session) — threads beyond it just queue for a slot.
Source code in k4bench/remote.py
list_stacks ¶
Return the Key4hep releases benchmarked for (detector, platform), newest first.
Directory names as stored (key4hep-{YYYY-MM-DD}). Discovery only — one
listing, no downloads.
Source code in k4bench/remote.py
fetch_stack_packages ¶
Return the k4h_packages map of a release, or None.
Every detector benchmarked against a given release sourced the same
stack, so any one run under it answers the question — this walks to the
first run it finds and reads only that run_info.json (two listings and
one small GET), rather than downloading a run directory.
None covers both "no run found" and "that run predates provenance
capture": in either case the release's packages are unknown, which a caller
must not confuse with an empty stack.
Source code in k4bench/remote.py
list_report_dates ¶
Return available nightly regression-report dates (newest first).
Reports live at {base_url}/_reports/{YYYY-MM-DD}/report.json, written
by the nightly regression-report CI job. An absent _reports/ tree
(no report generated yet) is not an error — it returns an empty list.
Source code in k4bench/remote.py
fetch_report ¶
Fetch and parse one nightly regression report, or None on failure.
Source code in k4bench/remote.py
fetch_blame ¶
Fetch and parse one night's blame sidecar, or None when absent.
Blame lives beside the report at _reports/{date}/blame.json, written
best-effort by the nightly regression-report job only on nights with a
confirmed regression it could attribute — so most nights have none, and a
404 here is the common case, not an error (logged at debug, returns None).
Uses the same shared, connection-pooled session as every other WebEOS read
(see :func:_get_session) rather than a bare requests.get, so it shares
the one real concurrency ceiling instead of opening its own connections.
Source code in k4bench/remote.py
ensure_latest_run_cached ¶
ensure_latest_run_cached(base_url: str, detector: str, platform: str, stack: str, sample: str, cache_root: str | None = None) -> Path | None
Cache and return only the newest run for (detector, platform, stack, sample).
Single-run tabs only ever display the latest run, so there is no need to download the full date history for the selected stack.