#!/usr/bin/env bash


function importDataSource()
{
    local grURL="${1}/api/datasources"  # Grafana API URL
    local dsName=${2} # Datasource Name
    local dsURL="${3}" # Datasource URL
    local dsType="prometheus" # Datasource type

    cmd="curl"


    data=$(cat <<__EOF__
{"name":"${dsName}","type":"${dsType}","url":"${dsURL}","access":"direct"}
__EOF__
    )

    echo -ne "\tCreating datasource for Prometheus "
    res=$(${cmd} "${grURL}" -H "Content-Type: application-json" --data-binary "${data}" 2>&1 )
    excode=${?}
    case $res in
        *"already exists"*)
            echo " ... [Exists]"
            ;;
        *"Datasource added"*)
            echo " ... [OK]"
            ;;
        *)
            echo " ... Ooops ${res}"
            ;;
    esac
}

function importDashboardFromMarket()
{
    local grURL="${1}/api/dashboards/import" # API URL to create new Dashboard
    local dsName="${2}"                  # Datasource name (to link dashboard to data)
    local dhID="${3}"                    # Dashboard ID in the market
    local dhRev="${4}"                   # Dashboard Revision to download
    local tmpFile=$(mktemp)
    local dhFile=$(mktemp)

    # URL To download the json file for dashboard
    local pubDashBoardURL="https://grafana.com/api/dashboards/${dhID}/revisions/${dhRev}/download"

    local cmd="curl"

    local dh=$(${cmd} --silent ${pubDashBoardURL} 2>&1)

    cat <<_EOF_ > ${tmpFile}
{
  "inputs": [ { "name":"DS_LOCALHOST", "type":"datasource", "pluginId":"prometheus", "value":"${dsName}" } ],
  "dashboard": { "title": "Surveillance Système", ${dh:1:-1} },
  "folderId": 0,
  "overwrite": true
}
_EOF_

    res=$(${cmd} "${grURL}" -H "Content-Type: application-json" --data-binary "@${tmpFile}" 2>&1 )
    excode=${?}
    case $res in
        *"\"imported\":true"*)
            echo " ... [Overwrited]"
            ;;
        *"Datasource added"*)
            echo " ... [OK]"
            ;;
        *)
            echo " ... Ooops ${res}"
            ;;
    esac
#    rm -rf ${tmpFile}
}

grafanaHost=$(CreoleGet srvGrafanaIP 127.0.0.1)
grafanaPort=$(CreoleGet srvGrafanaPort 3000)
grafanaUser="admin"
grafanaPasswd=$(CreoleGet grafana_admin_passwd admin)
grafanaURL="http://${grafanaUser}:${grafanaPasswd}@${grafanaHost}:${grafanaPort}"
datasource_name=$(CreoleGet promDataSource "prometheus")
promHost=$(CreoleGet adresse_ip_eth0)
promPort='9090'
datasourceURL="http://${promHost}:${promPort}"

importDataSource ${grafanaURL} ${datasource_name} ${datasourceURL}
echo
echo -ne "\tImporting Node Exporter Full Dashboard "
importDashboardFromMarket ${grafanaURL} ${datasource_name} 1860 11

rm -rf ${dashBoardFile}