From 4bc57c3e6cfa27849862466705a1dfbba9106668 Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 16:04:15 -0500 Subject: [PATCH 1/6] update README with subtools, configuration, and integration docs Expand the minimal README with CI badge, subtool descriptions, configuration parameters, and integration details. Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d85a8bf..a684167 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,28 @@ # tool-sysstat -Scripts to help run sysstat tools and post-process its data +[![CI Actions Status](https://github.com/perftool-incubator/tool-sysstat/workflows/crucible-ci/badge.svg)](https://github.com/perftool-incubator/tool-sysstat/actions) -#### rickshaw.json -A config file to describe how to run and post-process sysstat, as well as where sysstat should and should not run. +System performance metric collection and post-processing for the [crucible](https://github.com/perftool-incubator/crucible) framework using the Linux [sysstat](https://github.com/sysstat/sysstat) utilities. + +## Subtools + +Sysstat runs one or more subtools in parallel during test execution. The default set is all four: + +| Subtool | Data Collected | +|---------|---------------| +| mpstat | Per-CPU utilization statistics | +| sar | Memory (paging, swapping, utilization), network device statistics | +| iostat | Disk I/O throughput and latency | +| pidstat | Per-process CPU, memory, and I/O statistics | + +## Configuration + +The start script accepts two parameters: +- `--subtools ` — Comma-separated list of subtools to run (default: `mpstat,sar,iostat,pidstat`) +- `--interval ` — Collection interval in seconds (default: `3`) + +## Integration + +Sysstat runs as a profiler tool on endpoint nodes. It is allowed on profiler, master, and worker collector roles but blocked on client and server roles. The post-processor (`sysstat-post-process`) converts raw sysstat output into crucible's canonical metric format. + +### rickshaw.json +Defines how sysstat integrates with rickshaw: which files to deploy to engines, which endpoint/collector-type combinations are allowed or blocked, and the post-processing script. From 0f907b940400f1fea9c7bf6e241a84bf123907db Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 16:06:59 -0500 Subject: [PATCH 2/6] add CLAUDE.md with project documentation Document purpose, languages, key files, configuration parameters, and conventions for AI-assisted development. Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c4872d7 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,26 @@ +# Sysstat Tool + +## Purpose +Collects system performance metrics using Linux sysstat utilities (mpstat, sar, iostat, pidstat) during benchmark execution and post-processes the raw output into crucible's canonical metric format. + +## Languages +- Bash: collection scripts (`sysstat-start`, `sysstat-stop`) +- Perl: post-processor (`sysstat-post-process`) + +## Key Files +| File | Purpose | +|------|---------| +| `sysstat-start` | Launches configured subtools with `--subtools` and `--interval` parameters | +| `sysstat-stop` | Kills running collectors, compresses output with xz | +| `sysstat-post-process` | Parses raw sysstat output into crucible metrics (uses `toolbox::metrics`, `toolbox::json` from `$TOOLBOX_HOME/perl`) | +| `rickshaw.json` | Rickshaw integration: endpoint allow/block lists, file deployment, post-process script | +| `workshop.json` | Engine image build: compiles sysstat v12.5.1 from source | + +## Configuration +- `--subtools ` — Comma-separated subtools to run (default: `mpstat,sar,iostat,pidstat`) +- `--interval ` — Collection interval (default: `3`) + +## Conventions +- Primary branch is `master` +- Runs as a profiler tool on master/worker/profiler roles, blocked on client/server +- Standard Bash/Perl modelines and 4-space indentation From 677a9538498c9fde9320fbe4a6f346371649b546 Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 16:08:52 -0500 Subject: [PATCH 3/6] feat: merge real/faux crucible-ci workflows into single unified file Replace separate real and faux workflow files with a unified workflow that uses tj-actions/changed-files for docs-only detection. Adds a changes job, conditional real/faux jobs, a completion gate with failure/cancellation checking, concurrency group, and workflow_dispatch support with docs-only bypass. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/crucible-ci.yaml | 52 ++++++++++++++++++++----- .github/workflows/faux-crucible-ci.yaml | 17 -------- 2 files changed, 43 insertions(+), 26 deletions(-) delete mode 100644 .github/workflows/faux-crucible-ci.yaml diff --git a/.github/workflows/crucible-ci.yaml b/.github/workflows/crucible-ci.yaml index 28c1592..00ee596 100644 --- a/.github/workflows/crucible-ci.yaml +++ b/.github/workflows/crucible-ci.yaml @@ -3,18 +3,35 @@ name: crucible-ci on: pull_request: branches: [ master ] - paths-ignore: - - LICENSE - - '**.md' - - '.github/rulesets/**' - - .github/workflows/run-crucible-tracking.yaml - - .github/workflows/crucible-merged.yaml - - .github/workflows/faux-crucible-ci.yaml - - 'docs/**' workflow_dispatch: +concurrency: + group: ${{ github.ref }}/crucible-ci + cancel-in-progress: true + jobs: - call-tool-crucible-ci: + changes: + runs-on: ubuntu-latest + outputs: + only-docs: ${{ steps.filter.outputs.only_changed }} + steps: + - uses: actions/checkout@v4 + - id: filter + uses: tj-actions/changed-files@v47 + with: + files: | + LICENSE + *.md + **/*.md + .github/rulesets/** + .github/workflows/run-crucible-tracking.yaml + .github/workflows/crucible-merged.yaml + .github/workflows/crucible-ci.yaml + docs/** + + call-real-tool-crucible-ci: + needs: changes + if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.only-docs != 'true' }} uses: perftool-incubator/crucible-ci/.github/workflows/tool-crucible-ci.yaml@main with: ci_target: "sysstat" @@ -23,3 +40,20 @@ jobs: secrets: ci_registry_auth: ${{ secrets.CRUCIBLE_CI_ENGINES_REGISTRY_AUTH }} quay_oauth_token: ${{ secrets.CRUCIBLE_QUAYIO_OAUTH_TOKEN }} + + call-faux-tool-crucible-ci: + needs: changes + if: ${{ github.event_name != 'workflow_dispatch' && needs.changes.outputs.only-docs == 'true' }} + uses: perftool-incubator/crucible-ci/.github/workflows/faux-tool-crucible-ci.yaml@main + + crucible-ci-complete: + needs: [ call-real-tool-crucible-ci, call-faux-tool-crucible-ci ] + if: always() + runs-on: ubuntu-latest + steps: + - name: Check Results + if: >- + contains(needs.*.result, 'failure') || + contains(needs.*.result, 'cancelled') + run: exit 1 + - run: echo "crucible-ci complete" diff --git a/.github/workflows/faux-crucible-ci.yaml b/.github/workflows/faux-crucible-ci.yaml deleted file mode 100644 index cb1f09d..0000000 --- a/.github/workflows/faux-crucible-ci.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: faux-crucible-ci - -on: - pull_request: - branches: [ master ] - paths: - - LICENSE - - '**.md' - - '.github/rulesets/**' - - .github/workflows/run-crucible-tracking.yaml - - .github/workflows/crucible-merged.yaml - - .github/workflows/faux-crucible-ci.yaml - - 'docs/**' - -jobs: - call-tool-crucible-ci: - uses: perftool-incubator/crucible-ci/.github/workflows/faux-tool-crucible-ci.yaml@main From fee8aab6a1242368d0e112661098a7cb257def60 Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 16:11:37 -0500 Subject: [PATCH 4/6] remove deprecated k8s endpoint from rickshaw.json The legacy k8s endpoint has been removed from rickshaw. Remove its blacklist and whitelist entries, leaving the equivalent kube endpoint entries which have identical semantics. Co-Authored-By: Claude Opus 4.6 (1M context) --- rickshaw.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/rickshaw.json b/rickshaw.json index b8ca28a..e1db8d5 100644 --- a/rickshaw.json +++ b/rickshaw.json @@ -24,10 +24,6 @@ "endpoint": "remotehosts", "collector-types": [ "client", "server" ] }, - { - "endpoint": "k8s", - "collector-types": [ "client", "server" ] - }, { "endpoint": "kube", "collector-types": [ "client", "server" ] @@ -42,10 +38,6 @@ "endpoint": "remotehosts", "collector-types": [ "profiler" ] }, - { - "endpoint": "k8s", - "collector-types": [ "master", "worker" ] - }, { "endpoint": "kube", "collector-types": [ "master", "worker" ] From 0c29b6782e993ee66920204a0891fa1cdf21a31b Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Sat, 28 Mar 2026 08:12:29 -0500 Subject: [PATCH 5/6] update default-branch ruleset backup Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/rulesets/branches/default-branch.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/rulesets/branches/default-branch.json b/.github/rulesets/branches/default-branch.json index 0b6bf79..5be5a5d 100644 --- a/.github/rulesets/branches/default-branch.json +++ b/.github/rulesets/branches/default-branch.json @@ -25,6 +25,7 @@ "parameters": { "required_approving_review_count": 1, "dismiss_stale_reviews_on_push": true, + "required_reviewers": [], "require_code_owner_review": false, "require_last_push_approval": false, "required_review_thread_resolution": true, @@ -40,7 +41,8 @@ "do_not_enforce_on_create": false, "required_status_checks": [ { - "context": "call-tool-crucible-ci / tool-crucible-ci-complete" + "context": "crucible-ci-complete", + "integration_id": 15368 } ] } From a7189f2efbc66495e343c9156ffdfaecc698a072 Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Sat, 28 Mar 2026 12:18:43 -0500 Subject: [PATCH 6/6] fix: use profiler collector-type for kube whitelist The kube endpoint reads tool commands from the profiler tool-cmds file, not master/worker. Change the kube whitelist collector-types from master/worker to profiler so tools are correctly deployed on kube endpoint tool pods. Co-Authored-By: Claude Opus 4.6 (1M context) --- rickshaw.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rickshaw.json b/rickshaw.json index e1db8d5..995840d 100644 --- a/rickshaw.json +++ b/rickshaw.json @@ -40,7 +40,7 @@ }, { "endpoint": "kube", - "collector-types": [ "master", "worker" ] + "collector-types": [ "profiler" ] } ], "start": "sysstat-start",