Add transmission dashboard to grafana #5

Merged
eblume merged 7 commits from feature/transmission-dashboard into main 2026-01-14 14:19:12 -08:00
Owner

Summary

  • Add node_exporter ansible role to enable textfile collector at /opt/homebrew/var/node_exporter/textfile
  • Add transmission_metrics ansible role with bash script + LaunchAgent that collects metrics every 60s
  • Update grafana role to provision dashboards from JSON files
  • Add transmission dashboard with status, torrent counts, transfer speeds, and time series graphs

Test plan

  • ansible-playbook --check --diff passes
  • Dependency meta ensures node_exporter and transmission run before transmission_metrics
  • Apply playbook and verify metrics appear in prometheus
  • Verify dashboard loads in grafana at https://grafana.tail8d86e.ts.net

🤖 Generated with Claude Code

## Summary - Add `node_exporter` ansible role to enable textfile collector at `/opt/homebrew/var/node_exporter/textfile` - Add `transmission_metrics` ansible role with bash script + LaunchAgent that collects metrics every 60s - Update `grafana` role to provision dashboards from JSON files - Add transmission dashboard with status, torrent counts, transfer speeds, and time series graphs ## Test plan - [x] ansible-playbook --check --diff passes - [x] Dependency meta ensures node_exporter and transmission run before transmission_metrics - [x] Apply playbook and verify metrics appear in prometheus - [x] Verify dashboard loads in grafana at https://grafana.tail8d86e.ts.net 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Add node_exporter ansible role to enable textfile collector
- Add transmission_metrics role with script and LaunchAgent
  - Collects metrics every 60s via transmission RPC
  - Writes to /opt/homebrew/var/node_exporter/textfile/transmission.prom
- Update grafana role to provision dashboards from files
- Add transmission.json dashboard with:
  - Status indicator, torrent counts
  - Transfer speeds, cumulative stats
  - Time series graphs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Transmission doesn't support HEAD requests, so use -i flag with sed to
parse only the HTTP headers (stopping at the blank line before body).
Also anchor grep pattern to line start to avoid matching HTML content.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Query torrent-get RPC to sum totalSize of all torrents
- Add transmission_torrents_size_bytes gauge metric
- Add "Total Torrent Size" timeseries panel to dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add mise-tasks/provision-indri script to run ansible playbook
- Fix transmission_metrics launchctl load to be idempotent
- Update CLAUDE.md to reference mise run provision-indri

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Check if LaunchAgent is already loaded before attempting to load it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows ansible output in real-time instead of buffered.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
eblume merged commit ba03af15eb into main 2026-01-14 14:19:12 -08:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
eblume/blumeops!5
No description provided.