#!/bin/bash -e

#
# Inserire nel file di log il massimo numero
# di backup
#

#
# backup.sh
#
# Predispone il backup di un servizio e lo lancia. Inoltre mantiene
# il numero di tali backup al di sotto del max previsto per lo
# stesso servizio. 
#

#
# Parametri
#
# specificParametersSetup:
#               nome dello script, all'interno della directory
#               parametersSetup, che imposta i parametri specifici del
#               servizio.
#
# serviceName: nome del servizio
#               Impostato dallo script di set up dei parametri specifico
#               del servizio.
#
# container:    identificativo del container che eroga il
#               servizio.
#               Impostato dallo script di set up dei parametri specifico
#               del servizio.
#
# pathOfData:   path dell'area dati gestita dal servizio, se presente;
#               "NULL" altrimenti.
#               Impostato dallo script di set up dei parametri specifico
#               del servizio.
#
# maxNoOfBackups:
#               max numero di backup previsto per il servizio.
#               Impostato dallo script di set up dei parametri specifico
#               del servizio.
#
# e_mailAddress:
#               indirizzo di posta elettronica al quale inviare i report
#               relativi ai backup e ai restore.
#               Impostato dallo script di set up dei parametri specifico
#               del servizio.
#

########################################################################
#
# Predispone l'ambiente di esecuzione
#

#
# Attenzione!!!!
#    la variabile pmxBackupRestorePath e' valorizzata all'interno
#    del file /etc/profile
#

# Importa le variabili di ambiente
source /etc/profile

# Importa la definizione delle costanti simboliche
source $pmxBackupRestorePath/scripts/symbolicConstantsSetup.sh

# Importa la definizione delle utilities
source "$UTILITIES"

# Importa la definizione dei messaggi di log
source "$LOG_MESSAGES"
#
########################################################################

# Assegna alla variabile specificParametersSetup il nome dello script di
# setup dei parametri specifico del servizio
specificParametersSetup=$1

# Controlla che il numero dei parametri sia corretto
checkParams $# 1 "$(dateTime) $msgIncorrectParameterNumber \
                                 <specificParametersSetup>"

# Importa la definizione dei parametri specifici del servizio
source "$PATH_OF_PARAMETERS_SETUP/$specificParametersSetup"

# Assegna alla variabile caller il proprio nome
caller=$(basename $0)
            
# Cattura l'istante di inizio del backup da utilizzarsi nella formazione
# dei nomi dei file per questo utilizzati 
backupTime=$(date +"%Y%m%d-%H%M%S")

# Forma il nome del file di log per il backup
logFileName="CT$container-backupLogFile-$backupTime.txt"

# Forma il path assoluto del file di backup
logFilePath=$PATH_OF_LOGS/$logFileName

# Traccia l'ingresso nello script
appendToLog "$backupTime $msgIntoTheScript" \
            "$logFilePath"
            
# Traccia il path del file di log
appendToLog "$(dateTime) \
             $msgLogFilePath \
             $logFilePath" \
            "$logFilePath"

# Forma il nome del file di backup del container
containerBackupName="CT$container-containerBackup-$backupTime.tar.lzo"

# Forma il path del file di backup del container
containerBackupPath="$PATH_OF_CONTAINER_BACKUPS/$containerBackupName"

# Traccia il path del file di backup del container
appendToLog "$(dateTime) $msgContainerBackupPath \
             $containerBackupPath" \
            "$logFilePath"

# Nel caso, traccia l'assenza dell'area dati
if test "$pathOfData" = "NULL"
then
   appendToLog "$(dateTime) $msgNoServiceDataArea" \
               "$logFilePath"
else
   # Altrimenti, costruisce il nome del file di backup dell'area dati

   # Forma il nome del file di backup dell'area dati
   dataBackupName="CT$container-dataBackup-$backupTime.tar"
   
   # Forma il path del file di backup dell'area dati
   dataBackupPath="$PATH_OF_DATA_BACKUPS/$dataBackupName"
   
   # Traccia il path del file di backup dell'area dati di servizio
   appendToLog "$(dateTime) $msgDataBackupPath \
                $PATH_OF_DATA_BACKUPS/$dataBackupPath" \
               "$logFilePath"
fi

# Avvia il backup     
$PATH_OF_SCRIPTS/serviceBackup.sh \
                                  "$caller" \
                                  "$serviceName" \
                                  "$container" \
                                  "$pathOfData" \
                                  "$dataBackupPath" \
                                  "$containerBackupPath" \
                                  "$logFilePath"

# Qualora necessario, rimuove i backup meno recenti tra quelli
# nella directory containers ed eventualmente data
$PATH_OF_SCRIPTS/backupCleaner.sh \
                                  "$caller" \
                                  "$container" \
                                  "$pathOfData" \
                                  "$maxNoOfBackups" \
                                  "$logFilePath"

# Traccia l'uscita dallo script
appendToLog "$(dateTime) $msgOutOfTheScript" \
            "$logFilePath"
            
# Invia per posta elettronica il file di log del backup
# all'indirizzo servicesbackup.iasi@iasi.cnr.it
mail -s "Backup $serviceName - $(dateTime)" \
        "$e_mailAddress" \
        < \
        "$logFilePath"

exit

