#!/bin/bash
#
# TT#125701: Backup Redis/KeyDB database on upgrades

set -eu

die() {
  local message="$*"

  echo "ERROR: ${message}" >&2
  exit 1
}

fatal_missing_var() {
  local var_name="$1"
  if [[ ! -v "${var_name}" ]] ; then
    die "Missing mandatory environment variable '\$${var_name}', exiting."
  fi

  local var_value="${!var_name}"
  if [[ -z "${var_value}" ]] ; then
    die "Empty mandatory environment variable '\$${var_name}', exiting."
  fi
}

if [[ "${DO_DB_BACKUP:-}" != "yes" ]] ; then
  echo "INFO: environment var DO_DB_BACKUP=${DO_DB_BACKUP}, finishing step now"
  exit 0
fi

fatal_missing_var BACKUP
fatal_missing_var FORCE_UPGRADE

mkdir -p "${BACKUP}"

if command -v zstd &>/dev/null ; then
  DB_BACKUP_COMPRESSION_COMMAND=(zstd -T0)
  DB_BACKUP_EXT="zst"
elif command -v lz4 &>/dev/null ; then
  DB_BACKUP_COMPRESSION_COMMAND=(lz4)
  DB_BACKUP_EXT="lz4"
elif command -v gzip &>/dev/null ; then
  DB_BACKUP_COMPRESSION_COMMAND=(gzip -1 -v)
  DB_BACKUP_EXT="gz"
else
  die "Compression commands not found"
fi
DB_BACKUP="${BACKUP}/db_backup_redis_permanent_registrations.json.${DB_BACKUP_EXT}"

cmd=ngcp-keydb-backup
if ! command -v ${cmd} &>/dev/null ; then
  cmd=ngcp-redis-migrate
fi

if ! command -v ${cmd} &>/dev/null ; then
  echo "ERROR: command '$cmd' not found on this system," >&2
  echo "         cannot perform backup of Redis/KeyDB database"  >&2
  exit 1
fi

${cmd} --permanent only export | \
  nice -n 19 ionice -c 2 "${DB_BACKUP_COMPRESSION_COMMAND[@]}" > "${DB_BACKUP}"
