Loading...
Loading...
Create, update, and manage Oodle dashboards and folders — safe deletion, panel preservation, and folder organization.
npx skill4agent add oodle-ai/agent-skills oodle-dashboardsbrew install oodle-ai/oodle/oodle
oodle configure
# or
export OODLE_API_KEY=<key>
export OODLE_INSTANCE=<instance>
export OODLE_DEPLOYMENT=<url>oodle dashboards list -o json | jq 'length'
oodle folders list -o json | jq 'length'oodle dashboards list -o jsondeleteget| Task | Command |
|---|---|
| List dashboards | |
| Get dashboard | |
| Create dashboard | |
| Update dashboard | |
| Delete dashboard | |
| List folders | |
| Get folder | |
| Create folder | |
| Delete folder | |
# ✅ CORRECT
oodle dashboards list -o json
# ✅ CORRECT — filter by folder
oodle dashboards list -o json | jq '.[] | select(.folderId=="fld_platform")'
# ❌ WRONG — parsing table output to find an ID
oodle dashboards list | grep "API Overview" | awk '{print $1}'# ✅ CORRECT — fetch the full definition first; preserves all panels and queries
oodle dashboards get dash_123 -o json > dashboard.json
$EDITOR dashboard.json
oodle dashboards update dash_123 -f dashboard.json
# ❌ WRONG — sending an incomplete payload removes panels
oodle dashboards update dash_123 -f <(echo '{"title":"new title"}'){
"title": "API Overview",
"folderId": "fld_platform",
"description": "Latency, error rate, and throughput for the API service.",
"tags": ["service:api", "team:platform"],
"panels": [
{
"title": "Request rate",
"type": "timeseries",
"query": "sum(rate(http_requests_total{service=\"api\"}[5m]))"
},
{
"title": "Error rate",
"type": "timeseries",
"query": "sum(rate(http_requests_total{service=\"api\",status=~\"5..\"}[5m]))"
},
{
"title": "P99 latency",
"type": "timeseries",
"query": "histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket{service=\"api\"}[5m])))"
}
]
}# ✅ CORRECT
oodle dashboards create -f dashboard.json
# ❌ WRONG — no folderId, dashboard ends up in root and is hard to find
oodle dashboards create -f <(echo '{"title":"API Overview","panels":[...]}')# ✅ CORRECT — create folder first, capture id, then create dashboards in it
FOLDER_ID=$(oodle folders create -f <(echo '{"title":"Platform"}') -o json | jq -r '.id')
jq --arg fid "$FOLDER_ID" '.folderId=$fid' dashboard.json > dashboard.with-folder.json
oodle dashboards create -f dashboard.with-folder.json
# ❌ WRONG — creating dashboards before folders, then trying to move them later
oodle dashboards create -f dashboard.json
oodle folders create -f folder.json# ✅ CORRECT — phase 1: rename so users see it's about to be removed
oodle dashboards get dash_123 -o json > dash.json
jq '.title = "[MARKED FOR DELETION] " + .title' dash.json > dash.deletion.json
oodle dashboards update dash_123 -f dash.deletion.json
# wait at least 7 days, then:
oodle dashboards delete dash_123 --force
# ❌ WRONG — immediate hard delete, breaks every existing link
oodle dashboards delete dash_123 --forcegetupdate# ✅ CORRECT
oodle dashboards get dash_123 -o json > dash.json
jq '.panels[0].title = "Request rate (per second)"' dash.json > dash.new.json
oodle dashboards update dash_123 -f dash.new.json
# ❌ WRONG — sends a single-field payload; all panels disappear
oodle dashboards update dash_123 -f <(echo '{"description":"updated"}')folderId# ✅ CORRECT
"folderId": "fld_platform"
# ❌ WRONG — omitting folderId means root
"folderId": null# ✅ CORRECT — phase 1: rename
oodle dashboards update dash_123 -f dash.deletion.json
# wait, confirm no traffic, then phase 2: delete
oodle dashboards delete dash_123 --force
# ❌ WRONG — same-day delete on a shared dashboard
oodle dashboards delete dash_123 --forceserviceteam# ✅ CORRECT
"tags": ["service:api", "team:platform", "env:prod"]
# ❌ WRONG
"tags": []| Error | Cause | Fix |
|---|---|---|
| 401 Unauthorized | Invalid or missing API key | Run |
| 404 Not Found | Dashboard or folder ID does not exist | Verify with |
| connection refused | Wrong | Check |
| | List folders with |
| Panels disappeared after update | | Re-create from the last |
| Cannot delete folder | Folder still contains dashboards | Move or delete the dashboards first; `oodle dashboards list -o json |
| 429 Too Many Requests | Bulk dashboard sync | Add |