#!/bin/bash -e

#
# backupCleaner.sh
#
# Rimuove, qualora necessario, il backup meno
# recente tra quelli nella directory containers
# (risp., data)
#

#
# Parametri
#
# caller:		nome dello script chiamante
# container:    identificativo Proxmox del container che eroga il
#               servizio
# pathOfData:   path della directory che contiene i dati. "NULL" nel caso
#               in cui il servizio non utilizzi un'area dati.
#               Impostato da specificParametersSetup.
# maxNoOfBackups:
#               max numero di backup nella directory remota di servizio
# logFilePath:  path del file di log all'interno del buffer locale di
#               servizio
#

########################################################################
#
# 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
#
########################################################################

# Controllo sul numero dei parametri
checkParams $# 5 "$(dateTime) $msgIncorrectParameterNumber \
                                         <callers> \
                                         <container> \
                                         <pathOfData> \
                                         <maxNoOfBackups> \
                                         <logFilePath>"
           
# Variabili mnemoniche per i parametri                                        
caller=$1
container=$2	
pathOfData=$3		
maxNoOfBackups=$4
logFilePath=$5

# Traccia l'ingresso nello script
appendToLog "$(dateTime) $msgIntoTheScript" \
                         "$logFilePath"

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

# Conta il numero di backup di container nella directory containers
noOfBackups=$(ls -1 "$PATH_OF_CONTAINER_BACKUPS" | grep CT$container | wc -l)

# Fin quando tale numero è maggiore del massimo consentito
while [ $noOfBackups -gt $maxNoOfBackups ]
do
                         
   # Recupera il nome del backup di container meno recente
   # all'interno della directory containers
   olderContainerBackup=$(ls -1 "$PATH_OF_CONTAINER_BACKUPS" | grep CT$container | head -n 1)
   
   # Cancella il backup di container meno recente
   # all'interno della directory containers
   rm -f $PATH_OF_CONTAINER_BACKUPS/$olderContainerBackup

   # Traccia la rimozione del backup di container meno recente
   # appena cancellato
   appendToLog "$(dateTime) $msgMaxNroOfBackupsExceeded"\
                            "$logFilePath"

   appendToLog "$(dateTime) $msgRemovedBackup $olderContainerBackup"\
                            "$logFilePath"

   # Conta il numero di backup di container nella directory containers
   noOfBackups=$(ls -1 "$PATH_OF_CONTAINER_BACKUPS" | grep CT$container | wc -l)
                        
done

# Gestisce in maniera analoga il backup dei dati, se previsto
if test "$pathOfData" = "NULL"
then
   exit
fi

# Conta il numero di backup di container nella directory data
noOfBackups=$(ls -1 "$PATH_OF_DATA_BACKUPS" | grep CT$container | wc -l)

# Fin quando tale numero è maggiore del massimo consentito
while [ $noOfBackups -gt $maxNoOfBackups ]
do                      
   # Recupera il nome del backup di dati meno recente
   # all'interno della directory data
   olderDataBackup=$(ls -1 "$PATH_OF_DATA_BACKUPS" | grep CT$container | head -n 1)

   # Cancella il backup di dati meno recente
   # all'interno della directory data
   rm -f $PATH_OF_DATA_BACKUPS/$olderDataBackup

   # Traccia la rimozione del backup di dati meno recente
   # appena cancellato
   appendToLog "$(dateTime) $msgMaxNroOfBackupsExceeded"\
                            "$logFilePath"

   appendToLog "$(dateTime) $msgRemovedBackup $olderDataBackup"\
                            "$logFilePath"

   # Conta il numero di backup di container nella directory containers
   noOfBackups=$(ls -1 "$PATH_OF_DATA_BACKUPS" | grep CT$container | wc -l)                      
done
                        
# Traccia l'uscita dallo script
appendToLog "$(dateTime) $msgOutOfTheScript" \
                         "$logFilePath"
                         
exit






