#!/bin/bash
#
# Script para realizar backups de una base de datos postgres
#
# Author: Diego Rodriguez <daigor.dev@gmail.com>

# Marca de tiempo de ejecución
date=`date +%Y%m%d%H%M`

# Usuario por defecto de Postgresql
USER='postgres'
# Usuario por defecto de Mongo
USERM='sisoft'
# manejoMongo='n'

# Manejo y asignación de las opciones del script
while getopts ':w:h:p:d:n:b:m:' flag; do
  case "${flag}" in
    w) pg_pass="${OPTARG}" ;;
    h) host="${OPTARG}" ;;
    p) port="${OPTARG}" ;;
    d) database="${OPTARG}" ;;
    n) dir_name="${OPTARG}" ;;
    b) base_path="${OPTARG}" ;;
    m) tipo="${OPTARG}" ;;
    :) echo "Error - La opción ${OPTARG} requiere un argumento"; exit 1 ;;
    \?) echo "Error - Opción no esperada -${OPTARG}"; exit 1 ;;
  esac
done

case $tipo in
  "POSTGRES")
    filename="${dir_name}_${date}.sql.gz"
    ;;
  "MONGO")
    filename="${dir_name}_${date}.archive"
    ;;
esac

# Directorio temporal para almacenar todos los archivos en proceso
tmp_dir=`mktemp -d`
tmp_path="${tmp_dir}/${filename}"

# Directorio final del backup
backup_dir="${base_path}/${dir_name}";
backup_path="${backup_dir}/${filename}"

# Crea el directorio final si no existe
if [[ ! -d $backup_dir ]]; then
    mkdir -p $backup_dir
fi

case $tipo in
  "POSTGRES")
    # Crea el backup lo comprime y lo mueve al directorio final
    PGPASSWORD=$pg_pass pg_dump -U $USER -w -h $host -p $port -d $database -f ${tmp_path%.*} \
      && gzip ${tmp_path%.*} \
      && mv $tmp_path $backup_path \
      && echo "${filename}" \
      || exit 1

    #Elimina el directorio temporal
    rm -rf $tmp_dir
    ;;
  "MONGO")
    mongodump --host $host --port $port --db $database --username $USERM --password $pg_pass --authenticationDatabase admin --forceTableScan --archive > ${backup_path} \
    && gzip ${backup_path} \
    && echo "${filename}.gz" \
    || exit 1
    ;;
esac