#!/bin/bash

# Load influx credentials
if [ -f ~/.influx_admin ]; then
  . ~/.influx_admin
fi

BACKUPDIR="/var/backups/influxdb"
DATE="$(date +%Y%m%d-%H%M%S)"
FORMATS="json csv column"

umask 077

mkdir -p "${BACKUPDIR}/${DATE}"
mkdir -p "${BACKUPDIR}/${DATE}/meta"
mkdir -p "${BACKUPDIR}/${DATE}/data"
mkdir -p "${BACKUPDIR}/${DATE}/user"

USERS="$(/usr/bin/influx -format=csv -execute "show users" | tail -n +2 | cut -d',' -f1)"
DATABASES="$(/usr/bin/influx -format=csv -execute "show databases" | tail -n +2 | cut -d',' -f2)"

echo "backup users..."

echo "${USERS}" > "${BACKUPDIR}/${DATE}/user/users"
echo "${DATABASES}" > "${BACKUPDIR}/${DATE}/user/databases"

for FORMAT in ${FORMATS};
do
  /usr/bin/influx -format="${FORMAT}" -execute "show users" > "${BACKUPDIR}/${DATE}/user/users.${FORMAT}"
  /usr/bin/influx -format="${FORMAT}" -execute "show databases" > "${BACKUPDIR}/${DATE}/user/databases.${FORMAT}"
done

for USER in ${USERS};
do
  for FORMAT in ${FORMATS};
  do
    /usr/bin/influx -format="${FORMAT}" -execute "show grants for ${USER}" > "${BACKUPDIR}/${DATE}/user/grants_${USER}.${FORMAT}"
  done
done

echo "backup database meta..."

/usr/bin/influxd backup "${BACKUPDIR}/${DATE}/meta"

for DB in ${DATABASES};
do
  echo "backup database ${DB}..."
  mkdir -p "${BACKUPDIR}/${DATE}/data/${DB}"
  /usr/bin/influxd backup -database "${DB}" "${BACKUPDIR}/${DATE}/data/${DB}"
done
