#!/bin/bash


# Nome:  Script para restore de base do Xcontact.
# Versão: 2                                                   Rev.: 3                                           Nome:  restaurabase_v2r2.sh
# Autor: Daniel Lauck
#
# Alterações em relacao as versoes anteriores:
#
#
# Ajustado o caminho para salvar os áudios do Xcontact em /opt/xcontact/audios/ 
# Ajustado para migrar bases para cima do Xcontact versão 3.4.0
#
#
#
# O Script faz uso de blocos de  funcoes (function) e "cases", sendo cada tarefa atribuida a uma funcao e depois chamada conforme a
# escolha feita através da chamada do script. O comportamento do scripté determiando pelo parametro $1, chamado junto ao script.
#
#
# ./restaurabase_vNrN "parametro"
#
#  Exemplo:
# [root@xcontact tmp]# ./restaurabase_v2r2.sh restaura xcontact_export-X5-23-05-2018-10:07.tar.bz2
#
#
# restaura     :  somente cria o arquivo tar com o conteudo do backup. Nao envia para os diretórios remotos.
#


#  PREREQUISITOS
#
#  A base a ser restaurada deve ter sido gerada com o script backup_v1r6.sh
#
#
#
#
#
#
#
#
# Define as variáveis

DATA=`date +%d-%m-%Y`
CLIENTE=X5Solucoes
LOG=/var/log/xcontact_upgrade.txt


# Testes prliminares de sanidade
# Verifica a existencia de diretorios e arquivos importantes.



RESULTADO3=`rpm -qa rsync`

if [ ! $RESULTADO3 ]; then
  echo "Pacote rsync não instalado.....instalando"
  yum install rsync -y
else
  echo "Pacote rsync instalado."
fi





function teste_sanidade (){


#cd /opt/xcontact/xcontact-database/
#rm -fr upgrade.sql
#wget http://www.xcontactcenter.com.br/dw/beta/upgrade.sql


cd /tmp/




if [ ! -f /opt/xcontact/xcontact-database/upgrade.sql ]; then
     echo "ERRO FATAL:   Arquivo /opt/xcontact/xcontact-database/upgrade.sql não encontrado! Certifique de possuir a última versão.	 Saindo"
     exit 1
fi




# Cria o diretório /tmp/xcontact-migracao, local temporário para execução do script.
if [ ! -d "/tmp/xcontact-migracao" ]; then
    /bin/mkdir /tmp/xcontact-migracao
fi

}



function extrai_arquivo(){


echo "Extraçao do arquivo de backup em andamento.     AGUARDE COMPLETAR. Pode levar até 2 minutos"

mv $1 data_export.tar.gz
cp data_export.tar.gz /tmp/xcontact-migracao

cd /tmp/xcontact-migracao
#tar -jxvf $1             # Modo verbose.
tar -xzf data_export.tar.gz
}



function restaura_banco(){


echo "Realizando o processo de restauração do banco" >> $LOG

systemctl stop postgresql-10.service

cp /var/lib/pgsql/10/data/pg_hba.conf /tmp/

rm -rf /var/lib/pgsql/


/usr/pgsql-10/bin/postgresql-10-setup initdb


cp /tmp/pg_hba.conf /var/lib/pgsql/10/data/

chown postgres:postgres /var/lib/pgsql/10/data/pg_hba.conf

systemctl start postgresql-10.service


#cd /tmp/xcontact-migracao/tmp/xcontact-export


echo "Vou restaurar a base do cliente. O arquivo sql listado abaixo será restaurado no banco do Xcontact.
Após a confirmação pode demorar até 3 minutos para o processo continar, quando surgirão na tela linhas de comando SQL.

Confirmar que existe um único arquivo SQL listado aqui.

 PRESSIONE ENTER E AGUARDE: "

 
cd /tmp/xcontact-migracao/tmp/xcontact-export/banco_dados
ls
read

echo "Prosseguindo........................" 


cp xc_export*.sql xcontact_exp.sql

psql -U postgres < xcontact_exp.sql



echo "Realizando o processo de restauração do banco........................[OK]" >> $LOG


}



function upgrade_banco (){

if [ -f /opt/xcontact/xcontact-database/upgrade.sql ]; then


psql -U xcontact < /opt/xcontact/xcontact-database/upgrade.sql


fi
}

#############################################################################################

function restaura_configs(){



echo "Realizando o processo de restauração dos arquivos de configuração do asterisk." >> $LOG
echo "Realizando o processo de restauração dos arquivos de configuração do asterisk."



#cp -r /tmp/xcontact-migracao/tmp/xcontact-export/voicemail.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/sip_trunk.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/extensions_custom.conf /etc/asterisk/
# cp -r /tmp/xcontact-migracao/tmp/xcontact-export/confbridge.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/rtp.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/features.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/musiconhold.conf /etc/asterisk/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/sounds/* /var/lib/asterisk/sounds/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/agi/cust* /var/lib/asterisk/agi-bin/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/sounds/moh/* /var/lib/asterisk/sounds/moh/
rsync -Crav /tmp/xcontact-migracao/tmp/xcontact-export/audios/ /gravacoes/Xcontact/						            	 #		<--------------Sincroniza os audios da URA.       Reconferir sempre
rsync -Crav /tmp/xcontact-migracao/tmp/xcontact-export/audios/ /opt/xcontact/audios/
cp -r /tmp/xcontact-migracao/tmp/xcontact-export/motd /etc/
cat /tmp/xcontact-migracao/tmp/xcontact-export/realtime.txt >> /etc/asterisk/extensions_custom.conf                      #      <--------------Ajusta a chamada do Realtime       Reconferir
cat /tmp/xcontact-migracao/tmp/xcontact-export/sip.conf_original | grep register >> /etc/asterisk/sip.conf				 #      <--------------Ajusta os troncos com registro     Reconferir


#cp -r /tmp/xcontact-migracao/tmp/xcontact-export/khomp/* /etc/khomp                                                            <--------------Se houver Khomp
#cp -r /tmp/xcontact-migracao/tmp/xcontact-export/khomp.conf /etc/asterisk/



}

############################################################################################

function limpa () {


        # Apaga dir temp
        echo "Limpando o diretorio temporario: `date +%d-%m-%y_%H:%M:%S`" >> $LOG

#        /bin/rm -rf /tmp/xcontact-migracao/                                                                               <-------------permanece caso necessário analisar os arquivos extraídos


}
###################################################################################################

function reinicia_servicos () {


        # Apaga dir temp
        echo "Reiniciando os serviços: `date +%d-%m-%y_%H:%M:%S`" >> $LOG

        systemctl restart  asterisk
        systemctl restart  xcontact
		
		
		

}
###################################################################################################




case $1 in


restaura)

echo "Passo 1 - Realizando os testes basicos."
teste_sanidade

echo "Passo 2 - Extraindo o arquivo de backup."
extrai_arquivo $2
echo "Extraindo o arquivo de backup.......................[OK]"

echo "Passo 3 - Restaurando o banco de dados original."
restaura_banco
echo "Passo 3 - Restaurando o banco de dados original.....[OK]"

echo "Realizando o upgrade do banco."
upgrade_banco
echo "Realizando o upgrade do banco.......................[OK]"

echo "Restaurando as configurações do Asterisk"
restaura_configs
echo "Restaurando as configurações do Asterisk............[OK]"

echo "Reiniciando os serviços............"
reinicia_servicos
echo "Reiniciando os serviços.............................[OK]"


echo "Xcontact restaurado e atualizado em: `date +%d-%m-%y_%H:%M:%S`" >> $LOG
echo "#"
echo "#"
echo "#"
echo "#"
echo "#"
echo "#"
echo "#"
echo "#"
echo "#"



;;


lista)

echo "Backup Xcontact CRIACAO E ENVIO RSYNC iniciado em: `date +%d-%m-%y_%H:%M:%S`" >> $LOG
echo "Backup Xcontact CRIACAO E ENVIA RSYNC finalizado em: `date +%d-%m-%y_%H:%M:%S`" >> $LOG


;;


*)
echo "."
echo -e '\e[31;1m Uso:        ./restaurabase_vX.sh PARAMETRO ARQUIVO_ORIGEM.tar.bz2 \e[m'
echo "."
echo "."
echo "Os parâmetros são:"
echo "lista      : somente lista o conteúdo do arquivo de backup "
echo "restaura   : restaura o backup no Xcontact e atualiza o banco de dados"
echo "."


esac




exit 0

# FIM
