#!/bin/bash -e

#
# serviceBackup.sh
#
# Effettua il backup di un servizio, in particolare del container 
# che lo eroga e dell'eventuale area dati da questo gestita.
#

#
# Parametri
#
# caller:		nome dello script chiamante

# serviceName:  nome del servizio
# container:    identificativo del container che eroga il
#               servizio
# pathOfData:   path dell'area dati gestita dal servizio, se presente,
#               "NULL" altrimenti.
# dataBackupPath:
#               path del file per il backup dell'area dati gestita
#               dal servizio
# containerBackupPath:
#               path del file per il backup del container
# logFilePath:
#               path del file di log per il backup
#

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

#
# Attenzione!!!!
#    la variabile pmxBackupRestorePath e' valorizzata all'interno
#    del file /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
#
########################################################################
	
# Controlla che il numero dei parametri sia corretto
checkParams $# 7 "$(dateTime) $msgIncorrectParameterNumber \
                                            <caller> \
                                            <serviceName> \
                                            <container> \
                                            <pathOfData> \
                                            <dataBackupPath> \
                                            <containerBackupPath> \
                                            <logFilePath>"
                                        
# Inizializza le variabili mnemoniche per i parametri
caller=$1
serviceName=$2
container=$3
pathOfData=$4            
dataBackupPath=$5
containerBackupPath=$6
logFilePath=$7			
          
# Traccia l'ingresso nello script
appendToLog "$(dateTime) $msgIntoTheScript" \
            "$logFilePath"

# Traccia il chiamante lo script
appendToLog "$(dateTime) $msgScriptCaller $caller" \
            "$logFilePath"

# Traccia il container e il nome del servizio erogato
appendToLog "$(dateTime) $msgContainerId $container - $serviceName" \
            "$logFilePath"

# Acquisisce lo stato corrente del container
currentContainerStatus=$(containerStatus $container)
            
# Traccia lo stato corrente del container
appendToLog "$(dateTime) $msgCurrentContainerStatus \
             $currentContainerStatus" \
            "$logFilePath"
            
# Ricorda lo stato del container precedente all'inizio
# del backup
containerStatusBeforeBackuping=$currentContainerStatus

# Se il container e' acceso lo spegne
if test $currentContainerStatus = "RUNNING"
then
   lxc-stop -n $container
fi

# Acquisisce lo stato corrente del container
currentContainerStatus=$(containerStatus $container)

# Traccia lo stato del container durante l'esecuzione del backup
appendToLog "$(dateTime) $msgContainerStatusDuringBackup \
             $currentContainerStatus" \
            "$logFilePath"

# Assegna alla variabile caller il proprio nome
caller=$(basename $0)

# Lancia il backup dell'area dati gestita dal servizio, 
# quando presente
if test "$pathOfData" != "NULL"
then
   # Effettua il backup dell'area dati gestita dal servizio
   $PATH_OF_SCRIPTS/dataBackup.sh \
                          "$caller" \
                          "$pathOfData" \
                          "$dataBackupPath" \
                          "$logFilePath"
fi

# Effettua il backup del container
$PATH_OF_SCRIPTS/containerBackup.sh \
                             "$caller" \
                             "$container" \
                             "$containerBackupPath" \
                             "$logFilePath"
                                        
# Ripristina lo stato del container precedente al backup
if test $containerStatusBeforeBackuping = "RUNNING"
then
   lxc-start -n $container
fi
                                        
# Acquisisce lo stato del container
currentContainerStatus=$(containerStatus $container)

# Traccia lo stato del container al termine del backup
appendToLog "$(dateTime) $msgContainerStatusAfterBackup \
             $currentContainerStatus" \
            "$logFilePath"

# Gestisce la compressione del backup dell'area dati gestita
# dal servizio, quando presente
if test "$pathOfData" != "NULL"
then
   # Traccia l'inizio della compressione del backup dell'area dati
   appendToLog "$(dateTime) $msgCompressionStartingTime" \
                            "$logFilePath"
                         
   # Comprime il backup dell'area dati, poi lo cancella
   lzop --delete "$dataBackupPath"

   # Traccia il termine della compressione del backup dell'area dati
   appendToLog "$(dateTime) $msgCompressionEndingTime" \
                            "$logFilePath"
fi

# Traccia l'uscita dallo script
appendToLog "$(dateTime) $msgOutOfTheScript" \
            "$logFilePath"                                       

exit

                                        
                                  


