#!/bin/bash set -euo pipefail GRAFANA_URL=http://localhost:3000 GRAFANA_USER=admin GRAFANA_PASS=holamundo BACKUP_DIR=/opt/server/backups/grafana_dashboards KEEP=4 mkdir -p "$BACKUP_DIR" STAMP=$(date +%Y%m%d) TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT curl -sf -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/search?type=dash-db" \ | jq -r '.[].uid' \ | while read -r uid; do dashboard_json=$(curl -sf -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/dashboards/uid/$uid") title=$(jq -r '.dashboard.title' <<< "$dashboard_json") safe_title=$(echo "$title" | tr -c 'A-Za-z0-9' '_' | sed 's/_\+/_/g; s/^_//; s/_$//') echo "$dashboard_json" > "$TMP_DIR/${safe_title}__${uid}.json" done tar czf "$BACKUP_DIR/grafana_dashboards_$STAMP.tar.gz" -C "$TMP_DIR" . ls -1t "$BACKUP_DIR"/grafana_dashboards_*.tar.gz | tail -n +$((KEEP + 1)) | xargs -r rm --