-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathdashboards.sh
executable file
·141 lines (119 loc) · 3.39 KB
/
dashboards.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#/bin/bash
if [ "$TRAVIS_COMMIT_RANGE" = "" ]; then
echo "This only works in travis-ci. Branches need at least 2 commits."
exit 1
fi
CHANGES=$(git diff --name-only --diff-filter=AM $TRAVIS_COMMIT_RANGE)
echo "CHANGED (per git):"
echo "$CHANGES"
declare -a DASHMAP
WHERE="v2.0.0/"
# Map of grafana.com public shared dashboard ID to filename.
DASHMAP[11312]="UniFi-Poller_ USW Insights - Prometheus.json"
DASHMAP[10417]="UniFi-Poller_ USW Insights - InfluxDB.json"
DASHMAP[11313]="UniFi-Poller_ USG Insights - Prometheus.json"
DASHMAP[10416]="UniFi-Poller_ USG Insights - InfluxDB.json"
DASHMAP[11314]="UniFi-Poller_ UAP Insights - Prometheus.json"
DASHMAP[10415]="UniFi-Poller_ UAP Insights - InfluxDB.json"
DASHMAP[11311]="UniFi-Poller_ Network Sites - Prometheus.json"
DASHMAP[10414]="UniFi-Poller_ Network Sites - InfluxDB.json"
DASHMAP[11315]="UniFi-Poller_ Client Insights - Prometheus.json"
DASHMAP[10418]="UniFi-Poller_ Client Insights - InfluxDB.json"
DASHMAP[11310]="UniFi-Poller_ Client DPI - Prometheus.json"
DASHMAP[10419]="UniFi-Poller_ Client DPI - InfluxDB.json"
SAVEIFS=$IFS
# unobtainium
IFS=$(echo -en "\n\b")
# Simple function to make sure no stray files got uploaded.
function check {
echo
echo -n "Checking dashboards in: "
pushd "${WHERE}"
local file=""
for file in *; do
local found=0
local i=""
[ "$file" != "README.md" ] || continue
# Check for this file's existence in the DASHMAP variable.
for i in ${!DASHMAP[@]}; do
if [ "${DASHMAP[$i]}" = "$file" ]; then
found=1
echo "found! $file -> $i"
break
fi
done
if [ "$found" = "0" ]; then
echo "uh oh. file not found in DASHMAP: $file"
popd >> /dev/null
exit 2
fi
done
popd >> /dev/null
}
# Simple function to make sure no expected files are missing.
function check2 {
echo
echo -n "Checking file existence in: "
pushd "${WHERE}"
local files=$(ls)
popd >> /dev/null
local i=""
for i in ${!DASHMAP[@]}; do
local found=0
local file=""
for file in $files; do
if [ "${DASHMAP[$i]}" = "$file" ]; then
local found=1
echo "found! $i -> $file"
break
fi
done
if [ "$found" = "0" ]; then
echo "uh oh. configured DASHMAP file missing: ${DASHMAP[$i]}"
exit 2
fi
done
}
# check if a dashboard (or file) has been modified
function isChanged {
local changed=false
local filename=$1
local file=""
for file in $CHANGES; do
if [ "$file" = "$filename" ]; then
local changed=true
break
fi
done
if [ "$changed" = "true" ]; then
true
else
false
fi
}
# Upload all the (changed) dashboards to grafana.com.
function deploy {
local i=""
for i in ${!DASHMAP[@]}; do
isChanged "${WHERE}${DASHMAP[$i]}"
if [ "$?" = "1" ]; then
echo "Not changed (skipping): ${WHERE}${DASHMAP[$i]}"
continue
fi
echo "curl -H \"Content-Type: multipart/form-data\" \
https://grafana.com/api/dashboards/$i/revisions --form \"json=@${WHERE}${DASHMAP[$i]};type=application/json\""
curl -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${GRAFANA_API_KEY}" \
"https://grafana.com/api/dashboards/$i/revisions" --form "json=@${WHERE}${DASHMAP[$i]};type=application/json"
echo
done
}
if [ "$1" = "deploy" ]; then
deploy
elif [ "$1" = "check" ]; then
check
check2
echo
else
echo "provide command: deploy or check"
exit 1
fi