| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #!/bin/bash
- requiresJsonnet() {
- if ! type "jsonnet" > /dev/null; then
- echo "you need you install jsonnet to run this script"
- echo "follow the instructions on https://github.com/google/jsonnet"
- exit 1
- fi
- }
- setup() {
- STATUS=$(curl -s -o /dev/null -w '%{http_code}' http://admin:admin@grafana.loc/api/alert-notifications/1)
- if [ $STATUS -eq 200 ]; then
- echo "Email already exists, skipping..."
- else
- curl -H "Content-Type: application/json" \
- -d '{
- "name": "Email",
- "type": "email",
- "isDefault": false,
- "sendReminder": false,
- "uploadImage": true,
- "settings": {
- "addresses": "user@test.com"
- }
- }' \
- http://admin:admin@grafana.loc/api/alert-notifications
- fi
- STATUS=$(curl -s -o /dev/null -w '%{http_code}' http://admin:admin@grafana.loc/api/alert-notifications/2)
- if [ $STATUS -eq 200 ]; then
- echo "Slack already exists, skipping..."
- else
- curl -H "Content-Type: application/json" \
- -d '{
- "name": "Slack",
- "type": "slack",
- "isDefault": false,
- "sendReminder": false,
- "uploadImage": true
- }' \
- http://admin:admin@grafana.loc/api/alert-notifications
- fi
- }
- slack() {
- enabled=true
- url=''
- remind=false
- remindEvery='10m'
- while getopts ":e:u:dr" o; do
- case "${o}" in
- e)
- remindEvery=${OPTARG}
- ;;
- u)
- url=${OPTARG}
- ;;
- d)
- enabled=false
- ;;
- r)
- remind=true
- ;;
- esac
- done
- shift $((OPTIND-1))
- curl -X PUT \
- -H "Content-Type: application/json" \
- -d '{
- "id": 2,
- "name": "Slack",
- "type": "slack",
- "isDefault": '$enabled',
- "sendReminder": '$remind',
- "frequency": "'$remindEvery'",
- "uploadImage": true,
- "settings": {
- "url": "'$url'"
- }
- }' \
- http://admin:admin@grafana.loc/api/alert-notifications/2
- }
- provision() {
- alerts=1
- condition=65
- while getopts ":a:c:" o; do
- case "${o}" in
- a)
- alerts=${OPTARG}
- ;;
- c)
- condition=${OPTARG}
- ;;
- esac
- done
- shift $((OPTIND-1))
- requiresJsonnet
- rm -rf grafana/provisioning/dashboards/alerts/alert-*.json
- jsonnet -m grafana/provisioning/dashboards/alerts grafana/provisioning/alerts.jsonnet --ext-code alerts=$alerts --ext-code condition=$condition
- }
- pause() {
- curl -H "Content-Type: application/json" \
- -d '{"paused":true}' \
- http://admin:admin@grafana.loc/api/admin/pause-all-alerts
- }
- unpause() {
- curl -H "Content-Type: application/json" \
- -d '{"paused":false}' \
- http://admin:admin@grafana.loc/api/admin/pause-all-alerts
- }
- usage() {
- echo -e "Usage: ./alerts.sh COMMAND [OPTIONS]\n"
- echo -e "Commands"
- echo -e " setup\t\t creates default alert notification channels"
- echo -e " slack\t\t configure slack notification channel"
- echo -e " [-d]\t\t\t disable notifier, default enabled"
- echo -e " [-u]\t\t\t url"
- echo -e " [-r]\t\t\t send reminders"
- echo -e " [-e <remind every>]\t\t default 10m\n"
- echo -e " provision\t provision alerts"
- echo -e " [-a <alert rule count>]\t default 1"
- echo -e " [-c <condition value>]\t default 65\n"
- echo -e " pause\t\t pause all alerts"
- echo -e " unpause\t unpause all alerts"
- }
- main() {
- local cmd=$1
- if [[ $cmd == "setup" ]]; then
- setup
- elif [[ $cmd == "slack" ]]; then
- slack "${@:2}"
- elif [[ $cmd == "provision" ]]; then
- provision "${@:2}"
- elif [[ $cmd == "pause" ]]; then
- pause
- elif [[ $cmd == "unpause" ]]; then
- unpause
- fi
- if [[ -z "$cmd" ]]; then
- usage
- fi
- }
- main "$@"
|