#!/bin/bash

## Script de atualização do MD2 QualityManager
## Versão 0.1 - 09/01/2020 - Autor: Danilo Soares

## Preparação de execuçãoi
exec &> >(tee -a "logUpdate.log")
clear
. update.config


##Função principal
Main() {
     echo 
     echo "MENU ATUALIZAÇÃO"
     echo "--------------------------------"
     echo "Opcões:"
     echo
     echo "1. Atualização de versão"
     echo "2. Rollback"
     echo "3. Sair"
     echo 
     echo -n "Qual a opção desejada? "
     read option
     case $option in
        1) Update;;
        2) Rollback;;
        3) exit ;;
        *) printf "\nOpção desconhecida!\n\n" ; Main ;;
     esac
}

Update() {
     printf "\nAtualização em andamento.\n"

## Backup do War
     echo "(1/11) Copia de .war em andamento."
     if [[ -d /var/lib/tomcat10/webapps ]] 
     then 
          dir="/var/lib/tomcat10/webapps"
     fi
     if [[ -d /opt/tomcat/webapps ]]
     then 
           dir="/opt/tomcat/webapps"
     fi

     echo $dir
     cp $dir'/qualityManager-prj.war' ./qualityManager-prj_$(date +\%Y\%m\%d_\%I_\%M_\%p).war
     echo "(2/11) Cópia de backup da aplicação finalizada."

## Backup do database
     echo "(3/11) Cópia do banco de dados em andamento."
     pg_dump -h 127.0.0.1 -U md2net -d qualitymanager | gzip --best > ./bkp_DB_QM_$(date +\%Y\%m\%d_\%I_\%M_\%p).psql.gz
     echo "(4/11) Cópia de backup do banco de dados finalizada."

## Parando serviço Tomcat
     echo "(5/11) Parando o serviço Tomcat."
     sudo systemctl stop $tomcat
     sleep 5s
     sudo systemctl is-active --quiet $tomcat && failStopTomcat

## Apagar cache e app antiga
	 echo "(6/11) Apagando arquivos antigos da app"
	 sudo rm -rf $dir'/qualityManager-prj.war'
	 sudo rm -rf $dir'/qualityManager-prj'
 
## Copiando a nova versão
     echo "(7/11) Copiando a nova versão."
     sudo cp -rf ./qualityManager-prj.war $dir'/qualityManager-prj.war'
     echo "(8/11) Cópia da nova versão finalizada"

## Subindo o serviço Tomcat
     echo "(9/11) Subindo o serviço Tomcat."
     sudo systemctl start $tomcat
     sleep 5
     sudo systemctl is-active --quiet $tomcat || failStartTomcat

## Aguardar a aplicação subir
     echo "(10/11) Aguardando a aplicação subir."
     sleep 60
     curl -sSfk $varURL > /dev/null || failUpApp
     echo "(11/11) Nova versão do MD2 QualityManager implantada com sucesso!"

     Main
}

Rollback() {
     fileDBBkp=$(ls -t | grep bkp_DB_QM | head -n1)
     #echo $fileDBBkp

     fileWarBkp=$(ls -t | grep qualityManager-prj_ | head -n1)
     #echo $fileWarBkp

     echo "O rollback serão para os arquivos de DB $fileDBBkp e do app $fileWarBkp."
     read -p "Tem certeza disso? (S/N) " -n 1 -r
     echo   
     if [[ $REPLY =~ ^[YySs]$ ]]
         then
## Parando serviço Tomcat
         echo "(1/6) Parando o serviço Tomcat."
         sudo systemctl stop $tomcat
         sleep 5s
         sudo systemctl is-active --quiet $tomcat && failStopTomcat

## Limpando conexão Postgres
         echo "(2/6) Limpando conexão com banco de dados Postgres"
         sudo systemctl restart postgresql.service
         sleep 5s

## Voltando o backup do banco de dados.
         echo "(3/6) Efetuando restore do banco de dados."
         dropdb qualitymanager
         createdb qualitymanager
         gunzip -c $fileDBBkp | psql qualitymanager

## Subindo o serviço Tomcat
         echo "(4/6) Subindo o serviço Tomcat."
         sudo systemctl start $tomcat
         sleep 5
         sudo systemctl is-active --quiet $tomcat || failStartTomcat

## Aguardar a aplicação subir
          echo "(5/6) Aguardando a aplicação subir."
          sleep 60
          curl -sSfk $varURL > /dev/null || failUpApp
          echo "(6/6) Rollback do MD2 QualityManager realizado com sucesso!"

## Fim do IF de confirmação 
     fi

     Main
}

failStopTomcat() {
     echo "Falha ao parar o Tomcat!"
     Main
} 

failStartTomcat() {
     echo "Falha ao iniciar o Tomcat!"
     Main
}

failUpApp() {
    echo "Falha ao subir o QualityManager!"
    Main   
}

Main

