#!/bin/bash -e

#
# ownCloudPeopleBackup.sh
#
# Implementa il backup del servizio di cloud storage riservato
# alla amministrazione
#

# 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 di questo script
# container:    identificativo Proxmox del container che eroga il
#               servizio
# serviceDataAreaPath:
#               path dell'area dati di servizio
# localServiceBufferPath:
#               path del buffer locale di servizio
# remoteServiceDirCredentials:
#               credenziali di accesso alla directory remota di servizio
# remoteServiceDirPath:
#               path della directory remota di servizio
# remoteBackupDirName:
#               nome della directory remota di backup
# maxNoOfBackups:
#               max numero di backup nella directory remota di servizio
#

# Predispone le variabili per le risorse interessate dal backup
caller=$(basename $0)  
container=309
serviceDataAreaPath="/storage/ownCloudPeopleData"
localServiceBufferPath="/buffer/ownCloudPeople"
remoteServiceDirCredentials="admin@150.146.5.30"
remoteServiceDirPath="/share/CACHEDEV1_DATA/ownCloudPeople"
maxNoOfBackups=7

# Inizializza il nome del file per il backup dell'area dati di servizio
dataBackupName="NULL"

# Cattura l'istante di inizio del backup da utilizzarsi nella formazione
# dei nomi dei file e delle directory utilizzati per il backup
backupTime=$(date +"%Y%m%d-%H%M%S")

#
# predisposizione file system locale
#

# Forma il nome del file di log all'interno del buffer locale di
# servizio
logFileName="CT$container-logFile-$backupTime.txt"

# crea il buffer locale di servizio, se necessario
mkdir -p $localServiceBufferPath

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

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

# Traccia il path del file di backup per il container
appendToLog "$(dateTime) $msgContainerBackupPath \
             $localServiceBufferPath/$containerBackupName" \
            "$localServiceBufferPath/$logFileName"

# Nel caso, traccia l'assenza dell'area dati
if test "$serviceDataAreaPath" = "NULL"
then
appendToLog "$(dateTime) $msgNoServiceDataArea" \
            "$localServiceBufferPath/$logFileName"
fi


# Gestisce l'assenza dell'area dati di servizio
if test "$serviceDataAreaPath" != "NULL"
then
# Forma il nome del file di backup dell'area dati di servizio
dataBackupName="CT$container-dataBackup-$backupTime.tar"

# Traccia il path del file di backup dell'area dati di servizio
appendToLog "$(dateTime) $msgDataBackupPath \
             $localServiceBufferPath/$dataBackupName" \
            "$localServiceBufferPath/$logFileName"
fi

#
# predisposizione file system remoto
#

# Forma il nome della directory remota di backup
remoteBackupDirName=$backupTime

# crea la directory remota di servizio, se necessario
ssh $remoteServiceDirCredentials "mkdir -p $remoteServiceDirPath"

# Traccia il path della directory remota di servizio
appendToLog "$(dateTime) $msgRemoteServiceDirectoryPath \
              $remoteServiceDirPath" \
             "$localServiceBufferPath/$logFileName"

# Forma il nome della directory remota di backup
remoteBackupDirName=$backupTime

# crea la directory remota di backup, se necessario
ssh $remoteServiceDirCredentials \
    "mkdir -p $remoteServiceDirPath/$remoteBackupDirName"
    
# Traccia il path della directory remota di backup
appendToLog "$(dateTime) $msgRemoteBackupDirectoryPath \
             $remoteServiceDirPath/$remoteBackupDirName" \
            "$localServiceBufferPath/$logFileName"

# avvia il backup     
$scriptsForBackupLocation/containerBackup.sh \
                                       "$caller" \
                                       "$container"\
                                       "$serviceDataAreaPath" \
                                       "$localServiceBufferPath" \
                                       "$containerBackupName" \
                                       "$dataBackupName" \
                                       "$logFileName" \
                                       "$remoteServiceDirCredentials" \
                                       "$remoteServiceDirPath" \
                                       "$remoteBackupDirName" \
                                       "$maxNoOfBackups"

# Se necessario, rimuove dalla directory remota di servizio la directory
# remota di backup meno recente
$scriptsForBackupLocation/serviceRemoteDirectoryCleaner.sh \
                                        "$remoteServiceDirCredentials" \
                                        "$remoteServiceDirPath" \
                                        "$maxNoOfBackups" \
                                        "$localServiceBufferPath" \
                                        "$logFileName"

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

# Salva il file di log nella directory remota di backup
scp -q $localServiceBufferPath/$logFileName \
 $remoteServiceDirCredentials:$remoteServiceDirPath/$remoteBackupDirName

# Rimuove il contenuto del buffer locale di servizio
####rm -f $localServiceBufferPath/*
rm -rf $localServiceBufferPath

exit

