diff --git a/README.md b/README.md index 167849d..876d221 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,13 @@ with Prometheus keeping the history and six alert rules on top. One container, one file. Nothing is discovered: a repo is on the board because you listed it in `repos.yml`, and for no other reason. +![The fleet board: tiles counting repos monitored, open PRs and issues, CI red on main, PRs with red checks, local clones out of sync, dirty working copies, branch protection and Dependabot, above a seven-day trend of open problems by kind.](dashboard.png) + +The top tiles are what the forge says about the repos, the next row is what this +machine says about your clones, and every tile that counts something opens the +table of exactly which repos are behind its number — see +[the dashboard tour](docs/dashboard.md). + ## Recipe Write a `repos.yml` — one entry per repo you want on the board: @@ -55,9 +62,9 @@ there is nothing to clone and nothing on your disk but `repos.yml`. | | | |---|---| | `-v .../repos.yml:/config/repos.yml:ro` | Required. The fleet — [details](docs/configuration.md) | -| `-v "$HOME:/host:ro"` | Your home directory, read-only, so `~/...` in `repos.yml` resolves. Leave it out and the working-copy panels stay empty; everything GitHub reports still works | +| `-v "$HOME:/host:ro"` | Your home directory, read-only, so `~/...` in `repos.yml` resolves. Leave it out and the working-copy panels stay empty; everything the forge reports still works | | `-v jq-fleet-data:/data` | Prometheus history and Grafana's database. Leave it out and both start empty at every run | -| `-e GITHUB_TOKEN=...` | Needs `repo` and `read:org`, and must read every repo you listed. Without one GitHub allows 60 calls an hour, which is not a fleet | +| `-e GITHUB_TOKEN=...` | Needs `repo` and `read:org`, and must read every GitHub repo you listed. Without one GitHub allows 60 calls an hour, which is not a fleet | | `-e GITLAB_TOKEN=...` | Only if the fleet has a GitLab repo in it. Needs `read_api` | `docker compose up -d` does the same thing with the flags written down; see diff --git a/dashboard.png b/dashboard.png new file mode 100644 index 0000000..5a55120 Binary files /dev/null and b/dashboard.png differ diff --git a/docs/dashboard.md b/docs/dashboard.md index 5cfc1fb..ea9c21d 100644 --- a/docs/dashboard.md +++ b/docs/dashboard.md @@ -8,12 +8,16 @@ keywords: grafana dashboard, promql, panel json, alert rules, state timeline, gr ## Clicking a tile -Every tile except *Repos monitored* links to a table listing exactly what is +Every tile that counts a set of repos links to a table listing exactly what is behind that number — collapsed under *Drill-down* at the bottom, opened full screen by the click. Each drill-down's row count is the tile's value by -construction, and each repo name links to that repo on its own forge — the URL +construction, and each repo name links to that repo on its own forge: the URL comes from the API that reported it, so a GitLab row opens GitLab. +Two tiles have no drill-down, because neither is a set of repos. *Repos +monitored* is the fleet itself, and *Data age* is the collector's own +freshness. + The tiles are laid out in two rows because that is how the data splits. The top row is what **the forge** says about the repos — a headline count, the two workload counts (open PRs, open issues), then the three problem counts. The bottom row is