Structured results
Jobs publish a predictable snapshot with service identity, status, timing, summary data, and artifacts. Instead of treating every script as a special case, the runner gives every job the same reporting language.
PageDragon tooling
PD Runner turns repeatable operations work into reliable, dashboard-ready reporting. It runs service jobs, captures their results, and packages the outcome so teams can see what happened without digging through logs or private systems.
PD Runner solves a common operations problem: important checks and data pulls happen repeatedly, but their results often end up scattered across shell output, logs, one-off files, and vendor portals. PD Runner gives those jobs a consistent lifecycle and a consistent result shape.
Each configured service can run on demand or on a schedule. The service returns a normalized status, summary, data payload, and optional artifacts. That makes the output usable by humans, dashboards, automations, and audit workflows.
PD Runner is intentionally not a web server, auth system, or database. It is the operational layer that runs the work and prepares structured results for a separate presentation layer.
data/services/<service_id>/latest.json data/artifacts/<service_id>/<run_id>/... static/data/manifest.json static/data/<service_id>/latest.json
Jobs publish a predictable snapshot with service identity, status, timing, summary data, and artifacts. Instead of treating every script as a special case, the runner gives every job the same reporting language.
Runner state can be exported directly into a static dashboard. The dashboard stays fast and simple because it reads prepared JSON instead of calling private services at runtime.
Secrets are treated as runtime-only configuration. They are not baked into the public dashboard output, and sensitive artifacts are excluded unless a private deployment explicitly opts in.
A PD Runner plugin is a service worker. The runner loads service configuration, finds the matching worker, gives it a run context, and lets the worker return normalized data.
Plugins can be scheduled as top-level services, kept manual-only, or used as chained services that run when another worker calls them. That makes it possible to split a larger workflow into small, named jobs without turning the runner into a heavy orchestration platform.
The plugin boundary keeps the runner generic. The runner owns scheduling, execution, storage, and dashboard export; each plugin owns the domain-specific work for one service.
cd <pd-runner-repo> pip install -e . pd init pd validate pd list-services pd run-service usgs_earthquake pd run-services
Runs PD Runner with an optional config directory and verbose logging.
| Argument | Description |
|---|---|
| --config, -c <dir> | Configuration directory. Defaults to config. |
| --verbose, -v | Enable verbose logging. |
Initializes a headless PD Runner workspace with config, plugin, and data directories.
Validates YAML configuration and reports loaded services and views.
Lists configured services, enabled state, schedule type, and worker module.
Writes example environment variable files for bundled plugins.
| Argument | Description |
|---|---|
| --force | Overwrite existing example files. |
| --split | Write per-service example files instead of one combined example. |
Runs one service by id and persists its latest snapshot and artifacts.
| Argument | Description |
|---|---|
| <service_id> | Configured service id to execute. |
| --data-dir <dir> | Runner data directory. Defaults to the workspace data directory. |
Runs enabled scheduled services by default, then persists latest snapshots and artifacts.
| Argument | Description |
|---|---|
| --data-dir <dir> | Runner data directory. Defaults to the workspace data directory. |
| --services <ids> | Comma-separated service ids to run. |
| --all-services | Include unscheduled manual or chained services in the top-level run set. |
Initializes a managed dashboard website target.
| Argument | Description |
|---|---|
| --target <dir> | Website output directory to manage. Required. |
| --with-netlify-identity | Include Netlify Identity wiring. |
| --no-netlify-identity | Generate without Netlify Identity wiring. |
Generates dashboard files from existing latest snapshots.
| Argument | Description |
|---|---|
| --target <dir> | Website output directory. Required. It may be a deployable static site folder or another managed target folder. |
| --wipe | Wipe generated content while preserving git metadata, dependencies, and local framework cache. |
| --wipe-all | Wipe more aggressively, preserving only git metadata and the dashboard sentinel. |
| --data-dir <dir> | Runner data directory. |
| --services <ids> | Comma-separated service ids to include. |
| --copy-artifacts | Copy service artifacts into static dashboard output. |
| --include-sensitive | Include artifacts marked sensitive. Use only for private dashboards. |
| --git-commit | Commit generated changes when the website directory is version controlled. |
| --git-push | Push committed dashboard changes. |
| --branch <name> | Branch to push. Defaults to main. |
| --message <text> | Commit message. Defaults to Update dashboard. |
| --with-netlify-identity / --no-netlify-identity | Override the dashboard identity setting. |
Updates a dashboard, optionally running services first.
| Argument | Description |
|---|---|
| --run-services | Run services before generating the dashboard. |
| --from-latest | Generate from existing latest snapshots. This is the default. |
| --all-services | When running services, include unscheduled manual or chained services. |
| All generate-dashboard options | Accepts the same target, wipe, service, artifact, git, identity, and message options. |