2018-06-09 08:29:15 +00:00
|
|
|
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
|
|
|
|
NC='\033[0m'
|
|
|
|
|
|
|
|
RED='\033[00;31m'
|
|
|
|
GREEN='\033[00;32m'
|
|
|
|
YELLOW='\033[00;33m'
|
|
|
|
BLUE='\033[00;34m'
|
|
|
|
PURPLE='\033[00;35m'
|
|
|
|
CYAN='\033[00;36m'
|
|
|
|
LIGHTGRAY='\033[00;37m'
|
|
|
|
MAGENTA='\033[00;35m'
|
|
|
|
LRED='\033[01;31m'
|
|
|
|
LGREEN='\033[01;32m'
|
|
|
|
LYELLOW='\033[01;33m'
|
|
|
|
LBLUE='\033[01;34m'
|
|
|
|
LPURPLE='\033[01;35m'
|
|
|
|
LCYAN='\033[01;36m'
|
|
|
|
WHITE='\033[01;37m'
|
|
|
|
|
|
|
|
GRAFANA_URL=http://admin:admin@localhost:3000
|
|
|
|
|
|
|
|
|
|
|
|
grafana_api() {
|
|
|
|
local verb=$1
|
|
|
|
local url=$2
|
|
|
|
local params=$3
|
|
|
|
local bodyfile=$4
|
|
|
|
local response
|
|
|
|
local cmd
|
|
|
|
|
|
|
|
cmd="curl -L -s --fail -H \"Accept: application/json\" -H \"Content-Type: application/json\" -X ${verb} -k ${GRAFANA_URL}${url}"
|
|
|
|
[[ -n "${params}" ]] && cmd="${cmd} -d \"${params}\""
|
|
|
|
[[ -n "${bodyfile}" ]] && cmd="${cmd} --data @${bodyfile}"
|
|
|
|
echo -e "Running ${cmd}"
|
|
|
|
eval ${cmd} || return 1
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
wait_for_api() {
|
|
|
|
echo -e "${BLUE}Waiting for Grafana to be available...${NC}"
|
|
|
|
while ! grafana_api GET /api/user/preferences
|
|
|
|
do
|
|
|
|
echo -e "${BLUE}Waiting still...${NC}"
|
|
|
|
sleep 15
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
replace_datasource() {
|
|
|
|
local dashboard_file=$1
|
|
|
|
local datasource_name=$2
|
2018-06-10 13:44:52 +00:00
|
|
|
local old_datasource_name=$3
|
|
|
|
cmd="sed -i.bak_remove \"s/${old_datasource_name}/${datasource_name}/g\" ${dashboard_file}"
|
2018-06-09 08:29:15 +00:00
|
|
|
eval ${cmd} || return 1
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
install_dashboards() {
|
|
|
|
local dashboard
|
|
|
|
|
2018-06-10 13:44:52 +00:00
|
|
|
for dashboard in /var/lib/grafana/ds/dashboards/*.json
|
2018-06-09 08:29:15 +00:00
|
|
|
|
|
|
|
do
|
|
|
|
if [[ $(grep "\"name\": \"DS_INFLUXDB\"," ${dashboard}) ]]; then
|
|
|
|
echo -e "${PURPLE}Dashboard ${dashboard} seems to be for InfluxDB datasource${NC}"
|
2018-06-10 13:44:52 +00:00
|
|
|
old_datasource_name="\\\${DS_INFLUXDB}"
|
2018-06-09 08:29:15 +00:00
|
|
|
datasource_name="influxdb"
|
|
|
|
fi
|
|
|
|
if [[ $(grep "\"name\": \"DS_PROMETHEUS\"," ${dashboard}) ]]; then
|
|
|
|
echo -e "${PURPLE}Dashboard ${dashboard} seems to be for Prometheus datasource${NC}"
|
2018-06-10 13:44:52 +00:00
|
|
|
old_datasource_name="\\\${DS_PROMETHEUS}"
|
2018-06-09 08:29:15 +00:00
|
|
|
datasource_name="prometheus"
|
|
|
|
fi
|
|
|
|
if [[ -f "${dashboard}" ]]; then
|
|
|
|
echo -e "${LCYAN}Installing dashboard ${dashboard}${NC}"
|
2018-06-10 13:44:52 +00:00
|
|
|
replace_datasource ${dashboard} ${datasource_name} ${old_datasource_name}
|
2018-06-09 08:29:15 +00:00
|
|
|
cp ${dashboard} ${dashboard}.wrapped
|
|
|
|
sed -i '1s/^/{"dashboard":\n/' ${dashboard}.wrapped
|
|
|
|
echo "}" >> ${dashboard}.wrapped
|
|
|
|
|
|
|
|
if grafana_api POST /api/dashboards/db "" "${dashboard}.wrapped"; then
|
|
|
|
echo -e "\n** ${GREEN}installed ok **${NC}"
|
|
|
|
else
|
|
|
|
echo -e "\n** ${RED}installation of: ${PURPLE}\"${dashboard}\"${RED} failed **${NC}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
configure_grafana() {
|
|
|
|
wait_for_api
|
|
|
|
install_dashboards
|
|
|
|
}
|
|
|
|
|
|
|
|
configure_grafana
|
2018-06-10 13:44:52 +00:00
|
|
|
rm -vf /var/lib/grafana/ds/dashboards/*.{wrapped,bak_remove}
|
2018-06-09 08:29:15 +00:00
|
|
|
|