#!/bin/bash
set -e

# Get script name
SCRIPT=$(basename "$0")

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: Backup Grafana Dashboards from Url."
    echo "Syntax: $SCRIPT [-h|-c|-o|help]"
    echo "Example: $SCRIPT -h https://monitoring.example.com -k xxxxxxxxxxx -o tmp/erp.zip"
    echo "options:"
    echo "  -u    Grafana endpoint url."
    echo "  -t    API token."
    echo "  -o    Output directory for the dashboard export files. Defaults to '/var/tmp'."
    echo "  help  Show $SCRIPT manual."
    echo
}

# Show help and exit
if [[ "$1" == "help" ]]; then
    Help
    exit
fi

# Process params
while getopts ":u: :t: :o:" opt; do
    case $opt in
        u) URL="$OPTARG";;
        t) TOKEN="$OPTARG";;
        o) OUTPUT="$OPTARG";;
        \?) echo "Invalid option -$OPTARG" >&2
        Help
        exit;;
    esac
done

# Fallback to environment vars and default values
: ${OUTPUT:='/var/tmp'}

# Verify variables
[[ -z "$URL" ]] && { echo "Parameter -u|url is empty" ; exit 1; }
[[ -z "$TOKEN" ]] && { echo "Parameter -t|token is empty" ; exit 1; }

# Ensure output directory exists
mkdir -p "$OUTPUT"

OUT=$(curl -s -H "Authorization: Bearer $TOKEN" -X GET $URL/api/search?folderIds=0&query=&starred=false)
UIDS=$(echo $OUT | jq -r '.[] | .uid')
for ID in $UIDS; do
    EXPORT_FILE="$OUTPUT/grafana-dashboard-$ID.json"
    curl -s -H "Authorization: Bearer $TOKEN" $URL/api/dashboards/uid/$ID | jq > $EXPORT_FILE
    echo "Dashboard with id $ID exported to $EXPORT_FILE."
done
