#!/bin/bash -e

#
# containerBackup.sh
#
# Script per il backup di un generico servizio erogato da un container
# Proxmox
#

# Importa la definizione delle utilities di interesse generale
source $scriptsForBackupLocation/utilities.sh

# Importa la definizione dei messaggi di log
source $scriptsForBackupLocation/logMessages.sh

#
# Parametri
#
# caller:		nome dello script chiamante
# container:    identificativo Proxmox del container che eroga il
#               servizio
# serviceDataAreaPath:
#               path dell'area dati di servizio
# localServiceBufferPath:
#               path del buffer locale di servizio
# containerBackupName:
#               nome del file per il backup del container
# dataBackupName:
#               nome del file per il backup dell'area dati di servizio
# logFileName:
#               nome del file di log all'interno del buffer locale di
#               servizio
#               credenziali di accesso alla directory remota di servizio
# remoteServiceDirCredentials:
# remoteServiceDirPath:
#               path della directory remota di servizio
# remoteBackupDirName:
#               nome della directory remota di backup
# maxNoOfBackups:
#               max numero di backup nella cartella remota di servizio
#
	
# Controlla che il numero dei parametri sia corretto
checkParams $# 11 "$(dateTime) $msgIncorrectParameterNumber \
                                        <caller> \
                                        <container> \
                                        <serviceDataAreaPath> \
                                        <localServiceBufferPath> \
                                        <containerBackupName> \
                                        <dataBackupName> \
                                        <localFileName> \
                                        <remoteServiceDirCredentials> \
                                        <remoteServiceDirPath> \
                                        <remoteBackupDirName> \
                                        <MaxNoOfBackups> \
                                        <logFileName>"
                                        
# inizializza le variabili mnemoniche per i parametri
caller=$1
container=$2            
serviceDataAreaPath=$3            
localServiceBufferPath=$4
containerBackupName=$5
dataBackupName=$6
logFileName=$7				
remoteServiceDirCredentials=$8			
remoteServiceDirPath=$9	
remoteBackupDirName=${10}		    
MaxNoOfBackups=${11}
            
# Traccia l'ingresso nello script
appendToLog "$(dateTime) $msgIntoTheScript" \
                         "$localServiceBufferPath/$logFileName"

# Traccia il chiamante lo script
appendToLog "$(dateTime) $msgScriptCaller $caller" \
            "$localServiceBufferPath/$logFileName"

# Traccia il nome del container 
appendToLog "$(dateTime) $msgContainerId $container" \
            "$localServiceBufferPath/$logFileName"
                       
# acquisisce lo stato corrente del container
currentContainerStatus=$(containerStatus $container)
            
# Traccia lo stato corrente del container
appendToLog "$(dateTime) $msgCurrentContainerStatus \
             $currentContainerStatus" \
            "$localServiceBufferPath/$logFileName"
            
# ricorda lo stato del container precedente all'inizio
# del backup
containerStatusBeforeBackuping=$currentContainerStatus

# Se il container è acceso lo spegne
if test $currentContainerStatus = "RUNNING"
then
   lxc-freeze -n $container
   currentContainerStatus=$(containerStatus $container) #### Aggiunta Bruno 19/1/2019
fi

# Traccia lo stato del container durante l'esecuzione del backup
appendToLog "$(dateTime) $msgContainerStatusDuringBackup \
             $currentContainerStatus" \
            "$localServiceBufferPath/$logFileName"
                       
# Effettua il backup del container nel buffer locale di servizio
$scriptsForBackupLocation/serviceContainerBackup.sh \
                                         "$container" \
                                         "$localServiceBufferPath" \
                                         "$containerBackupName" \
                                         "$logFileName"

# Gestisce l'assenza dell'area dati di servizio
if test "$serviceDataAreaPath" != "NULL"
then
# Effettua il backup dell'are dati di servizio nel buffer locale di
# servizio
$scriptsForBackupLocation/serviceDataBackup.sh \
                                        "$serviceDataAreaPath" \
                                        "$localServiceBufferPath" \
                                        "$dataBackupName" \
                                        "$logFileName"
fi
                                        
# Ripristina lo stato del container precedente al backup
if test $containerStatusBeforeBackuping = "RUNNING"
then
   lxc-unfreeze -n $container
fi
                                        
# acquisisce lo stato del container
currentContainerStatus=$(containerStatus $container)

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

# Compressione dell'area dati di servizio
if test "$serviceDataAreaPath" != "NULL"
then
# Traccia l'inizio della compressione del backup dell'area dati di servizio
appendToLog "$(dateTime) $msgCompressionStartingTime"

# Comprime il backup dell'area dati di servizio cancellando la
# versione non compressa 
lzop --delete "$localServiceBufferPath/$dataBackupName"

# Traccia l'inizio della compressione del backup dell'area dati di servizio
appendToLog "$(dateTime) $msgCompressionEndingTime"
fi

# salva il backup del container, quello dell'area dati di servizio,
# se prevista, e il relativo file di log, contenuti nel buffer locale
# di servizio, nella directory remota di backup
$scriptsForBackupLocation/serviceBackupSaving.sh \
                                        "$remoteServiceDirCredentials" \
                                        "$remoteServiceDirPath" \
                                        "$remoteBackupDirName" \
                                        "$localServiceBufferPath" \
                                        "$logFileName"

# Traccia l'uscita dallo script
appendToLog "$(dateTime) $msgOutOfTheScript" \
            "$localServiceBufferPath/$logFileName"                                       
exit

                                        
                                  


