diff --git a/srv/exo/bin/_cleanBackups.sh b/srv/exo/bin/_cleanBackups.sh new file mode 100755 index 0000000..b436ba0 --- /dev/null +++ b/srv/exo/bin/_cleanBackups.sh @@ -0,0 +1,27 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + + +echo "[INFO] =======================================" +echo "[INFO] = Remove old backups and keep only the ${BACKUP_RETENTION} newest ones ..." +echo "[INFO] =======================================" + +pushd ${BACKUP_DIR} &>/dev/null + +NB_FILES_PER_BACKUP=4 + +LINES=$((BACKUP_RETENTION * NB_FILES_PER_BACKUP + 1 )) +rm -rvf $(find . -maxdepth 1 -type f | xargs ls -t | tail -n +${LINES}) + +echo "[INFO] Done" +popd &>/dev/null diff --git a/srv/exo/bin/_dumpData.sh b/srv/exo/bin/_dumpData.sh new file mode 100755 index 0000000..dc25b77 --- /dev/null +++ b/srv/exo/bin/_dumpData.sh @@ -0,0 +1,31 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +# Initialize working directory +mkdir -p ${BACKUP_WORKING_DIR}/tmp_data +rm -rf ${BACKUP_WORKING_DIR}/tmp_data/* +pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1 + +echo "[INFO] =======================================" +echo "[INFO] = Compressing ${PLF_NAME} data into ${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1 + +display_time tar --directory ${EXO_DATA_DIR} --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 . + +popd >/dev/null 2>&1 +echo "[INFO] Done" diff --git a/srv/exo/bin/_dumpElasticsearch.sh b/srv/exo/bin/_dumpElasticsearch.sh new file mode 100755 index 0000000..cd5abdb --- /dev/null +++ b/srv/exo/bin/_dumpElasticsearch.sh @@ -0,0 +1,31 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +# Initialize working directory +mkdir -p ${BACKUP_WORKING_DIR}/tmp_elasticsearch +rm -rf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/* +pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1 + +echo "[INFO] =======================================" +echo "[INFO] = Compressing ${PLF_NAME} data into ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1 + +display_time tar --directory $(dirname ${ELASTICSEARCH_DATA_DIR}) --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 $(basename ${ELASTICSEARCH_DATA_DIR}) + +popd >/dev/null 2>&1 +echo "[INFO] Done" diff --git a/srv/exo/bin/_dumpMongoDb.sh b/srv/exo/bin/_dumpMongoDb.sh new file mode 100755 index 0000000..bab52ac --- /dev/null +++ b/srv/exo/bin/_dumpMongoDb.sh @@ -0,0 +1,42 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +# Initialize working directory +mkdir -p ${BACKUP_WORKING_DIR}/tmp_mongo +rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/* +pushd ${BACKUP_WORKING_DIR}/tmp_mongo/ >/dev/null 2>&1 + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +# settings : http://docs.mongodb.org/manual/single/index.html#document-tutorial/backup-databases-with-binary-database-dumps + +echo "[INFO] $(display_date)" +echo "[INFO] =======================================" +echo "[INFO] = Dumping MongoDB ${CHAT_DATABASE} into ${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2 ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +TARGET="${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2" + +display_time mongodump -o ${BACKUP_WORKING_DIR}/tmp_mongo --db=${CHAT_DATABASE} + +echo "[INFO] Compress mongo dump into ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET}" +display_time tar --directory ${BACKUP_WORKING_DIR}/tmp_mongo --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET} ${CHAT_DATABASE} + +echo "[INFO] Remove ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}" +display_time rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} + +echo "[INFO] Done" +echo "[INFO] $(display_date)" + +popd >/dev/null 2>&1 diff --git a/srv/exo/bin/_dumpMysqlDatabase.sh b/srv/exo/bin/_dumpMysqlDatabase.sh new file mode 100755 index 0000000..a84139f --- /dev/null +++ b/srv/exo/bin/_dumpMysqlDatabase.sh @@ -0,0 +1,34 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +DUMP_OPTIONS="--single-transaction --add-drop-table" + +# Initialize working directory +mkdir -p ${BACKUP_WORKING_DIR}/tmp_db +rm -rf ${BACKUP_WORKING_DIR}/tmp_db/* +pushd ${BACKUP_WORKING_DIR}/tmp_db >/dev/null 2>&1 + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +TARGET_NAME="${PLF_NAME}-db-${BACKUP_DATE}.sql.bz2" + +echo "[INFO] =======================================" +echo "[INFO] = Dumping database ${EXO_DATABASE} into ${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +display_time mysqldump ${DUMP_OPTIONS} ${EXO_DATABASE} | pbzip2 >${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} + +echo "[INFO] Done" + +popd >/dev/null 2>&1 diff --git a/srv/exo/bin/_functions.sh b/srv/exo/bin/_functions.sh new file mode 100755 index 0000000..eac0d7b --- /dev/null +++ b/srv/exo/bin/_functions.sh @@ -0,0 +1,93 @@ +#!/bin/bash -eu + +#Activate aliases usage in scripts +shopt -s expand_aliases + +# Various command aliases +alias display_time='/usr/bin/time -f "[INFO] Return code : %x\n[INFO] Time report (sec) : \t%e real,\t%U user,\t%S system"' +alias display_date='/bin/date +"%Y-%m-%d %H:%M:%S"' + +getSSHCommand() { + if [ $# -ne 2 ]; then + echo "" + echo "[ERROR] No enough parameters for function getSSHCommand" + echo "[ERROR] The target host and the user must be specified" + exit 1 + fi + TARGET=$1 + USER=$2 + + if [ "${TARGET}" == "localhost" ] || [ "${TARGET}" == "127.0.0.1" ]; then + echo "" + else + echo "ssh ${USER}@${TARGET}" # space is important here + fi +} + +# $1 : Startup time +# $2 : End time +delay() { + if [ $# -lt 2 ]; then + echo "" + echo "[ERROR] No enough parameters for function delay !" + exit 1 + fi + local _start=$1 + local _end=$2 + echo "$(((_end - _start) / 3600)) hour(s) $((((_end - _start) % 3600) / 60)) minute(s) $(((_end - _start) % 60)) second(s)" +} + +# $1 : Message +# $2 : Startup time +# $3 : End time +display_delay() { + if [ $# -lt 3 ]; then + echo "" + echo "[ERROR] No enough parameters for function display_delay !" + exit 1 + fi + echo "[INFO] $1: $(delay $2 $3) ." +} + +# $1 : Action +# $2 : Service +systemd_action() { + if [ $# -lt 2 ]; then + echo "" + echo "[ERROR] No enough parameters for function systemd_action !" + exit 1 + fi + local ACTION=$1 + local SERVICE=$2 + + # check is the service is installed + if [ "$(systemctl list-unit-files ${SERVICE}.service --quiet --no-legend | wc -l)" == 0 ]; then + echo "[ERROR] Service ${SERVICE} not found" + exit 1 + fi + + case ${ACTION} in + start) + sudo systemctl start ${SERVICE} + if $(sudo systemctl -q is-active ${SERVICE}); then + echo "[INFO] Service ${SERVICE} started successfuly" + else + echo "[ERROR] Service ${SERVICE} failed to start" + exit 1 + fi + ;; + stop) + echo "[INFO] Stop ${SERVICE} service" + sudo systemctl stop ${SERVICE} + ;; + status) + sudo systemctl status ${SERVICE} + break + ;; + *) + echo "[ERROR] No systemd action defined !" + exit 1 + ;; + esac + +} diff --git a/srv/exo/bin/_restoreData.sh b/srv/exo/bin/_restoreData.sh new file mode 100755 index 0000000..b44461d --- /dev/null +++ b/srv/exo/bin/_restoreData.sh @@ -0,0 +1,61 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +# Initialize working directory +pushd ${EXO_DATA_DIR} >/dev/null 2>&1 + +ARCHIVE="${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2" + +echo "[INFO] =======================================" +echo "[INFO] Restoring data from ${ARCHIVE}" +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +if ${BACKUP_ON_RESTORE}; then + echo "[INFO] Saving current data ..." + + if [ -e ${EXO_DATA_DIR}/data.beforerestore ]; then + mv -v ${EXO_DATA_DIR}/data.beforerestore ${EXO_DATA_DIR}/data.beforerestore-old + # Can be long process in background + rm -rf ${EXO_DATA_DIR}/data.beforerestore-old & + fi + + if [ -e ${EXO_DATA_DIR}/data ]; then + mv -v ${EXO_DATA_DIR}/data ${EXO_DATA_DIR}/data.beforerestore + fi +else + echo "[INFO] Removing current data ..." + if [ -e ${EXO_DATA_DIR}/data ]; then + mv -v ${EXO_DATA_DIR}/data ${EXO_DATA_DIR}/data.beforerestore + # Can be long process in background + rm -rf ${EXO_DATA_DIR}/data.beforerestore & + fi +fi + +pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1 + +echo "[INFO] = Uncompressing ${ARCHIVE} into ${EXO_DATA_DIR} ..." +display_time tar xf ${ARCHIVE} -C ${EXO_DATA_DIR} +echo "[INFO] $(display_date)" +echo "[INFO] Done" + +rm -v ${ARCHIVE} + +echo "[INFO] = waiting for cleanup to end ..." +# be sure all the cleanup processes are finished +wait + +popd >/dev/null 2>&1 +echo "[INFO] Done" diff --git a/srv/exo/bin/_restoreElasticsearch.sh b/srv/exo/bin/_restoreElasticsearch.sh new file mode 100755 index 0000000..4798bc6 --- /dev/null +++ b/srv/exo/bin/_restoreElasticsearch.sh @@ -0,0 +1,40 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +echo "[INFO] =======================================" +echo "[INFO] Restoring Elasticsearch data" +echo "[INFO] =======================================" + +pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1 + +if ${BACKUP_ON_RESTORE} && [ -e "${ELASTICSEARCH_DATA_DIR}/nodes.old" ]; then + echo "[INFO] Removing previous backup save directory (${ELASTICSEARCH_DATA_DIR}/nodes.old)..." + sudo -u elasticsearch rm -rf ${ELASTICSEARCH_DATA_DIR}/nodes.old +fi + +if ${BACKUP_ON_RESTORE} && [ -e "${ELASTICSEARCH_DATA_DIR}/nodes" ]; then + echo "[INFO] Keeping current data in (${ELASTICSEARCH_DATA_DIR}/nodes.old) directory ..." + sudo -u elasticsearch mv -f ${ELASTICSEARCH_DATA_DIR}/nodes ${ELASTICSEARCH_DATA_DIR}/nodes.old +else + echo "[INFO] Removing current data on (${ELASTICSEARCH_DATA_DIR}/nodes) directory ..." + sudo -u elasticsearch rm -rf ${ELASTICSEARCH_DATA_DIR}/nodes ${ELASTICSEARCH_DATA_DIR}/nodes +fi + +echo "[INFO] = Uncompressing ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 into ${ELASTICSEARCH_DATA_DIR} ..." +echo "[INFO] $(display_date)" +display_time sudo -u elasticsearch tar xf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 -C ${ELASTICSEARCH_DATA_DIR}/.. + +popd >/dev/null 2>&1 +echo "[INFO] Done" diff --git a/srv/exo/bin/_restoreMongoDb.sh b/srv/exo/bin/_restoreMongoDb.sh new file mode 100755 index 0000000..d7f273c --- /dev/null +++ b/srv/exo/bin/_restoreMongoDb.sh @@ -0,0 +1,57 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +# Initialize working directory +mkdir -p ${BACKUP_WORKING_DIR}/tmp_mongo +display_time rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} +pushd ${BACKUP_WORKING_DIR}/tmp_mongo/ >/dev/null 2>&1 + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +echo "[INFO] $(display_date)" +echo "[INFO] =======================================" +echo "[INFO] = restore MongoDB ${CHAT_DATABASE} from ${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2 ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +if ${BACKUP_ON_RESTORE}; then + if [ -e "${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}.old" ]; then + echo "[INFO] = remove previous backup save ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}.old ..." + rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}.old + fi + + echo "[INFO] = Backup current data on ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}.old ..." + display_time mongodump -o ${BACKUP_WORKING_DIR}/tmp_mongo --db=${CHAT_DATABASE} + mv -v ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}.old +fi + +TARGET="${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2" + +echo "[INFO] Uncompress mongo dump on ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}" +display_time tar xvf ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET} --use-compress-program pbzip2 -C ${BACKUP_WORKING_DIR}/tmp_mongo/ + +echo "[INFO]" +echo "[INFO] Restore database ${CHAT_DATABASE} from ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}" +display_time mongorestore --drop --db=${CHAT_DATABASE} ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} + +echo "[INFO]" + echo "[INFO] Remove ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} content ..." +display_time rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE} + +echo "[INFO] Remove ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET} ..." +display_time rm ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET} + +echo "[INFO] Done" +echo "[INFO] $(display_date)" + +popd >/dev/null 2>&1 diff --git a/srv/exo/bin/_restoreMysqlDatabase.sh b/srv/exo/bin/_restoreMysqlDatabase.sh new file mode 100755 index 0000000..debc2aa --- /dev/null +++ b/srv/exo/bin/_restoreMysqlDatabase.sh @@ -0,0 +1,42 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +DUMP_OPTIONS="--single-transaction" + +BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")} + +TARGET_NAME="${PLF_NAME}-db-${BACKUP_DATE}.sql.bz2" + +echo "[INFO] =======================================" +echo "[INFO] = restoring database ${EXO_DATABASE} from ${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} ..." +echo "[INFO] =======================================" +echo "[INFO] $(display_date)" + +if ${BACKUP_ON_RESTORE}; then + BACKUP_FILE="${BACKUP_WORKING_DIR}/tmp_db/mysql-old.sql.bz2" + echo "[INFO] Save current database in ${BACKUP_FILE}" + + DUMP_OPTIONS="--single-transaction --add-drop-table" + + display_time sudo mysqldump ${DUMP_OPTIONS} ${EXO_DATABASE} | pbzip2 >${BACKUP_FILE} + + echo "[INFO] $(display_date)" +fi + +display_time pbzip2 -d -c ${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} | mysql ${EXO_DATABASE} + +echo "[INFO] Clean ${BACKUP_WORKING_DIR}/tmp_db/ content" +display_time rm -rf ${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} + +echo "[INFO] $(display_date)" +echo "[INFO] Done" diff --git a/srv/exo/bin/_startDatabase.sh b/srv/exo/bin/_startDatabase.sh new file mode 100755 index 0000000..efa0d83 --- /dev/null +++ b/srv/exo/bin/_startDatabase.sh @@ -0,0 +1,21 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Starting Database server on ${HOSTNAME}..." +echo "[INFO] =======================================" +echo "" + +systemd_action start mysql + +echo "[INFO] Done" diff --git a/srv/exo/bin/_startElasticsearch.sh b/srv/exo/bin/_startElasticsearch.sh new file mode 100755 index 0000000..7d86f54 --- /dev/null +++ b/srv/exo/bin/_startElasticsearch.sh @@ -0,0 +1,21 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Starting Elasticsearch server on ${HOSTNAME}..." +echo "[INFO] =======================================" +echo "" + +systemd_action start elasticsearch + +echo "[INFO] Done" diff --git a/srv/exo/bin/_startMongo.sh b/srv/exo/bin/_startMongo.sh new file mode 100755 index 0000000..c3e0bb4 --- /dev/null +++ b/srv/exo/bin/_startMongo.sh @@ -0,0 +1,21 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Starting MongoDB server on ${HOSTNAME}..." +echo "[INFO] =======================================" +echo "" + +systemd_action start mongod + +echo "[INFO] Done" diff --git a/srv/exo/bin/_starteXo.sh b/srv/exo/bin/_starteXo.sh new file mode 100755 index 0000000..107528b --- /dev/null +++ b/srv/exo/bin/_starteXo.sh @@ -0,0 +1,55 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Start PLF server on ${HOSTNAME} ..." +echo "[INFO] =======================================" +if [ -e ${PLF_SRV_DIR}/current/bin/catalina.sh -a -e /etc/systemd/system/${PLF_NAME}.service ]; then + + # if no previous startup was found grep return 1, so set -e is needed + set +e + PREVIOUS_START_COUNT=$(grep -c "Server startup in" ${PLF_LOG_DIR}/platform.log) + set -e + + systemd_action start ${PLF_NAME} + + echo -n "[INFO] $(display_date) Waiting for logs availability ." + while [ true ]; do + if [ -e "${PLF_LOG_DIR}/platform.log" ]; then + break + fi + echo -n "." + sleep 1 + done + echo -n " OK" + echo "" + + # Display logs + tail -f ${PLF_LOG_DIR}/platform.log & + _tailPID=$! + # Check for the end of startup + set +e + while [ true ]; do + if [ $(grep -c "Server startup in" ${PLF_LOG_DIR}/platform.log) -gt ${PREVIOUS_START_COUNT} ] ; then + kill ${_tailPID} + wait ${_tailPID} 2>/dev/null + break + fi + sleep .5 + done + set -e + +else + echo "[WARN] $(display_date) ${PLF_NAME} not deployed. Cannot be started !!!" +fi +echo "[INFO] $(display_date) Done" diff --git a/srv/exo/bin/_stopDatabase.sh b/srv/exo/bin/_stopDatabase.sh new file mode 100755 index 0000000..9bc5276 --- /dev/null +++ b/srv/exo/bin/_stopDatabase.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Stopping Database server on ${HOSTNAME}..." +echo "[INFO] =======================================" + +systemd_action stop mysql + +echo "[INFO] Done" diff --git a/srv/exo/bin/_stopElasticsearch.sh b/srv/exo/bin/_stopElasticsearch.sh new file mode 100755 index 0000000..01de1d9 --- /dev/null +++ b/srv/exo/bin/_stopElasticsearch.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Stopping Elasticsearch server on ${HOSTNAME}..." +echo "[INFO] =======================================" + +systemd_action stop elasticsearch + +echo "[INFO] Done" diff --git a/srv/exo/bin/_stopMongo.sh b/srv/exo/bin/_stopMongo.sh new file mode 100755 index 0000000..35cfaa6 --- /dev/null +++ b/srv/exo/bin/_stopMongo.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "[INFO] =======================================" +echo "[INFO] Stoping MongoDB server on ${HOSTNAME}..." +echo "[INFO] =======================================" + +systemd_action stop mongod + +echo "[INFO] Done" diff --git a/srv/exo/bin/_stopeXo.sh b/srv/exo/bin/_stopeXo.sh new file mode 100755 index 0000000..f1567db --- /dev/null +++ b/srv/exo/bin/_stopeXo.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Stop PLF on ${HOSTNAME} ..." +echo "[INFO] =======================================" + +if [ -e ${PLF_SRV_DIR}/current/bin/catalina.sh -a -e /etc/systemd/system/${PLF_NAME}.service ]; then + + systemd_action stop ${PLF_NAME} + + if [ "$(pgrep -U $(id -u) soffice)" != "" ]; then + echo "[INFO] $(display_date) soffice processes of ${USER} exist. Killing them ..." + pgrep -U $(id -u) soffice | xargs kill -9 + fi + +else + echo "[WARN] ${PLF_NAME} not deployed. Cannot be stopped !!!" +fi diff --git a/srv/exo/bin/_sudoers/exo-elasticsearch b/srv/exo/bin/_sudoers/exo-elasticsearch new file mode 100644 index 0000000..6aa8b72 --- /dev/null +++ b/srv/exo/bin/_sudoers/exo-elasticsearch @@ -0,0 +1,3 @@ +Cmnd_Alias EXO_CMD_ES = /bin/systemctl start elasticsearch,/bin/systemctl stop elasticsearch,/bin/systemctl status elasticsearch, /bin/systemctl -q is-active elasticsearch +exo ALL=(ALL) NOPASSWD: EXO_CMD_ES +exo ALL=(elasticsearch) NOPASSWD: ALL diff --git a/srv/exo/bin/_sudoers/exo-exo b/srv/exo/bin/_sudoers/exo-exo new file mode 100644 index 0000000..e2b59a9 --- /dev/null +++ b/srv/exo/bin/_sudoers/exo-exo @@ -0,0 +1,2 @@ +Cmnd_Alias EXO_CMD = /bin/systemctl stop exo,/bin/systemctl start exo,/bin/systemctl status exo, /bin/systemctl -q is-active exo +exo ALL=(ALL) NOPASSWD: EXO_CMD diff --git a/srv/exo/bin/_sudoers/exo-mongo b/srv/exo/bin/_sudoers/exo-mongo new file mode 100644 index 0000000..ff6dbdd --- /dev/null +++ b/srv/exo/bin/_sudoers/exo-mongo @@ -0,0 +1,2 @@ +Cmnd_Alias EXO_CMD_MONGO = /bin/systemctl start mongod,/bin/systemctl stop mongod,/bin/systemctl status mongod, /bin/systemctl -q is-active mongod +exo ALL=(ALL) NOPASSWD: EXO_CMD_MONGO diff --git a/srv/exo/bin/_sudoers/exo-mysql b/srv/exo/bin/_sudoers/exo-mysql new file mode 100644 index 0000000..292e8d3 --- /dev/null +++ b/srv/exo/bin/_sudoers/exo-mysql @@ -0,0 +1,2 @@ +Cmnd_Alias EXO_CMD_MYSQL = /bin/systemctl start mysql, /bin/systemctl stop mysql, /bin/systemctl status mysql, /bin/systemctl -q is-active mysql +exo ALL=(ALL) NOPASSWD: EXO_CMD_MYSQL diff --git a/srv/exo/bin/backup_platform.sh b/srv/exo/bin/backup_platform.sh new file mode 100755 index 0000000..8b58b9e --- /dev/null +++ b/srv/exo/bin/backup_platform.sh @@ -0,0 +1,68 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +SCRIPT_START_TIME=$(date +%s) + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +DOWNTIME_START_TIME=$(date +%s) + +BACKUP_DATE=$(date "+%Y-%m-%d-%H%M%S") + +SSH_COMMAND="$(getSSHCommand ${EXO_PLF_SERVER} ${EXO_USER})" + +# Stop it +${SSH_COMMAND} ${SCRIPT_DIR}/_stopeXo.sh + +# Dump data +${SSH_COMMAND} ${SCRIPT_DIR}/_dumpData.sh ${BACKUP_DATE} + +# Dump database +${SSH_COMMAND} ${SCRIPT_DIR}/_dumpMysqlDatabase.sh ${BACKUP_DATE} + +# Dump MongoDB +${SSH_COMMAND} ${SCRIPT_DIR}/_dumpMongoDb.sh ${BACKUP_DATE} + +# Dump Elastic +${SSH_COMMAND} ${SCRIPT_DIR}/_stopElasticsearch.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_dumpElasticsearch.sh ${BACKUP_DATE} +${SSH_COMMAND} ${SCRIPT_DIR}/_startElasticsearch.sh + +# Start it +${SSH_COMMAND} ${SCRIPT_DIR}/_starteXo.sh + +# Warmup the server +${SSH_COMMAND} ${SCRIPT_DIR}/warmup.sh + +DOWNTIME_END_TIME=$(date +%s) +if [ "${REMOTE_BACKUP}" == true ]; then + rsync -av ${EXO_USER}@${EXO_PLF_SERVER}:${BACKUP_WORKING_DIR}/tmp_data/* ${BACKUP_DIR} + rsync -av ${EXO_USER}@${EXO_DB_SERVER}:${BACKUP_WORKING_DIR}/tmp_db/* ${BACKUP_DIR} + rsync -av ${EXO_USER}@${EXO_MONGO_SERVER}:${BACKUP_WORKING_DIR}/tmp_mongo/* ${BACKUP_DIR} + rsync -av ${EXO_USER}@${EXO_ES_SERVER}:${BACKUP_WORKING_DIR}/tmp_elasticsearch/* ${BACKUP_DIR} +else + rsync -av ${BACKUP_WORKING_DIR}/tmp_data/* ${BACKUP_DIR} + rsync -av ${BACKUP_WORKING_DIR}/tmp_db/* ${BACKUP_DIR} + rsync -av ${BACKUP_WORKING_DIR}/tmp_mongo/* ${BACKUP_DIR} + rsync -av ${BACKUP_WORKING_DIR}/tmp_elasticsearch/* ${BACKUP_DIR} +fi + +${SCRIPT_DIR}/_cleanBackups.sh + +SCRIPT_END_TIME=$(date +%s) + +echo "[INFO] =======================================" +echo "[INFO] = Backup ended - $(date)" +echo "[INFO] =--------------------------------------" +display_delay "= -> Process duration" $SCRIPT_START_TIME $SCRIPT_END_TIME +echo "[INFO] =--------------------------------------" +display_delay "= -> Service downtime" $DOWNTIME_START_TIME $DOWNTIME_END_TIME +echo "[INFO] =======================================" diff --git a/srv/exo/bin/restore_platform.sh b/srv/exo/bin/restore_platform.sh new file mode 100755 index 0000000..add603e --- /dev/null +++ b/srv/exo/bin/restore_platform.sh @@ -0,0 +1,69 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +SCRIPT_START_TIME=$(date +%s) + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +if [ $# -lt 1 ]; then + echo "" + echo "[ERROR] Need backup date to proceede to the restore !" + exit 1 +fi + +SSH_COMMAND="$(getSSHCommand ${EXO_PLF_SERVER} ${EXO_USER})" + +BACKUP_DATE=$1 + +if [ "${REMOTE_BACKUP}" == "true" ] ; then + rsync -av ${BACKUP_DIR}/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 ${EXO_USER}@${EXO_PLF_SERVER}:${BACKUP_WORKING_DIR}/tmp_data/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-db-${BACKUP_DATE}.sql.bz2 ${EXO_USER}@${EXO_DB_SERVER}:${BACKUP_WORKING_DIR}/tmp_db/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2 ${EXO_USER}@${EXO_MONGO_SERVER}:${BACKUP_WORKING_DIR}/tmp_mongo/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 ${EXO_USER}@${EXO_ES_SERVER}:${BACKUP_WORKING_DIR}/tmp_elasticsearch/ +else + rsync -av ${BACKUP_DIR}/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 ${BACKUP_WORKING_DIR}/tmp_data/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-db-${BACKUP_DATE}.sql.bz2 ${BACKUP_WORKING_DIR}/tmp_db/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2 ${BACKUP_WORKING_DIR}/tmp_mongo/ + rsync -av ${BACKUP_DIR}/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 ${BACKUP_WORKING_DIR}/tmp_elasticsearch/ +fi + +DOWNTIME_START_TIME=$(date +%s) + +# Stop it +${SSH_COMMAND} ${SCRIPT_DIR}/_stopeXo.sh + +# restore data +${SSH_COMMAND} ${SCRIPT_DIR}/_restoreData.sh ${BACKUP_DATE} + +# Dump database +${SSH_COMMAND} ${SCRIPT_DIR}/_restoreMysqlDatabase.sh ${BACKUP_DATE} + +# Dump MongoDB +${SSH_COMMAND} ${SCRIPT_DIR}/_restoreMongoDb.sh ${BACKUP_DATE} + +# Dump Elastic +${SSH_COMMAND} ${SCRIPT_DIR}/_stopElasticsearch.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_restoreElasticsearch.sh ${BACKUP_DATE} +${SSH_COMMAND} ${SCRIPT_DIR}/_startElasticsearch.sh + +# Start it +${SSH_COMMAND} ${SCRIPT_DIR}/_starteXo.sh + +DOWNTIME_END_TIME=$(date +%s) +SCRIPT_END_TIME=$(date +%s) + +echo "[INFO] =======================================" +echo "[INFO] = Backup ended - $(date)" +echo "[INFO] =--------------------------------------" +display_delay "= -> Process duration" $SCRIPT_START_TIME $SCRIPT_END_TIME +echo "[INFO] =--------------------------------------" +display_delay "= -> Service downtime" $DOWNTIME_START_TIME $DOWNTIME_END_TIME +echo "[INFO] =======================================" diff --git a/srv/exo/bin/setenv-template.sh b/srv/exo/bin/setenv-template.sh new file mode 100755 index 0000000..c944083 --- /dev/null +++ b/srv/exo/bin/setenv-template.sh @@ -0,0 +1,54 @@ +#!/bin/sh -ue +# +# Copyright (C) 2003-2013 eXo Platform SAS. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 3 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# + +# Directories +PLF_SRV_DIR=/srv/exo +PLF_LOG_DIR=/srv/exo/current/logs +PLF_NAME=exo +EXO_PLF_SERVER=localhost +EXO_ES_SERVER=localhost +EXO_DB_SERVER=localhost +EXO_MONGO_SERVER=localhost +EXO_USER=exo +BACKUP_DIR=/var/backups/exo +BACKUP_WORKING_DIR=/var/backups/tmp +#Database Backup +EXO_DATABASE=exo +# The directory where the eXo "data" directory is present +EXO_DATA_DIR=/srv/data/exo +#Mongo Backup +CHAT_DATABASE=chat +#Elastic Backup +ELASTICSEARCH_DATA_DIR=/srv/data/elasticsearch +# Retrieve the backup on the server launching the restore +REMOTE_BACKUP=false +# Backup the current data before restoring +BACKUP_ON_RESTORE=true +# Number of backups to keep +BACKUP_RETENTION=7 + +## Server Warmup +# This configuration allow to perform +# several requests on the server to initiate +# the js compilation and initial cache loading +WARMUP_ACTIVATED=false +WARMUP_URL=http://localhost:8080 +WARMUP_USER=root +WARMUP_PASSWORD=gtn diff --git a/srv/exo/bin/start_platform.sh b/srv/exo/bin/start_platform.sh new file mode 100755 index 0000000..29a349b --- /dev/null +++ b/srv/exo/bin/start_platform.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +echo $SCRIPT_NAME +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +SSH_COMMAND="$(getSSHCommand ${EXO_PLF_SERVER} ${EXO_USER})" + +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Start ${PLF_NAME} server on ${HOSTNAME} ..." +echo "[INFO] =======================================" + +${SSH_COMMAND} ${SCRIPT_DIR}/_startDatabase.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_startMongo.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_startElasticsearch.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_starteXo.sh + +${SSH_COMMAND} ${SCRIPT_DIR}/warmup.sh + +echo "[INFO] $(display_date)" +echo "[INFO] Plateform started" diff --git a/srv/exo/bin/stop_platform.sh b/srv/exo/bin/stop_platform.sh new file mode 100755 index 0000000..2da75f3 --- /dev/null +++ b/srv/exo/bin/stop_platform.sh @@ -0,0 +1,26 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +SSH_COMMAND="$(getSSHCommand ${EXO_PLF_SERVER} ${EXO_USER})" + +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Stop ${PLF_NAME} (leader:${HOSTNAME})..." +echo "[INFO] =======================================" + +${SSH_COMMAND} ${SCRIPT_DIR}/_stopeXo.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_stopElasticsearch.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_stopDatabase.sh +${SSH_COMMAND} ${SCRIPT_DIR}/_stopMongo.sh + +echo "[INFO] $(display_date) Done" diff --git a/srv/exo/bin/sync_scripts.sh b/srv/exo/bin/sync_scripts.sh new file mode 100755 index 0000000..01dd477 --- /dev/null +++ b/srv/exo/bin/sync_scripts.sh @@ -0,0 +1,52 @@ +#!/bin/bash -eu + +#### +# Copy the management scripts on all the servers +### + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +echo $SCRIPT_NAME +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh +echo "" + +add_server_fingerprint() { + local SERVER=$1 + + if ! $(grep -q ${SERVER} ~/.ssh/known_hosts); then + echo "[INFO] Add ${SERVER} server fingerprint on known_hosts file ..." + ssh-keyscan -H ${SERVER} &>> ~/.ssh/known_hosts + fi +} + +sync_files() { + local CONNECT_STRING=$1 + rsync -avP --delete --backup ${SCRIPT_DIR}/backups --exclude backups ${SCRIPT_DIR} ${CONNECT_STRING}:$(dirname ${SCRIPT_DIR}) +} + +mkdir -p backups + +echo "[INFO] Copying script to eXo server..." +add_server_fingerprint ${EXO_PLF_SERVER} +sync_files ${EXO_USER}@${EXO_PLF_SERVER} + +echo "[INFO] Copying script to database server..." +add_server_fingerprint ${EXO_DB_SERVER} +sync_files ${EXO_USER}@${EXO_DB_SERVER} + +echo "[INFO] Copying script to mongo server..." +add_server_fingerprint ${EXO_MONGO_SERVER} +sync_files ${EXO_USER}@${EXO_MONGO_SERVER} + +echo "[INFO] Copying script to elasticsearch server..." +add_server_fingerprint ${EXO_ES_SERVER} +sync_files ${EXO_USER}@${EXO_ES_SERVER} + +echo "[INFO] $(display_date) Done" diff --git a/srv/exo/bin/warmup.sh b/srv/exo/bin/warmup.sh new file mode 100755 index 0000000..91649f4 --- /dev/null +++ b/srv/exo/bin/warmup.sh @@ -0,0 +1,72 @@ +#!/bin/bash -eu + +# ############################################################################# +# Initialize +# ############################################################################# +SCRIPT_NAME="${0##*/}" +SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +set -o pipefail + +# Load env settings +source ${SCRIPT_DIR}/setenv.sh +# Load common functions +source ${SCRIPT_DIR}/_functions.sh + +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Starting server warmup ..." +echo "[INFO] =======================================" + +set +ue +if [ "${WARMUP_ACTIVATED}" != "true" ]; then + echo "[INFO] Warmup script is disabled" + exit 0 +fi +set -ue + +## Test if curl is installed +set +e +CURL_CMD=$(which curl) +RET=$? +set -e + +if [ $RET -ne 0 ]; then + echo "[ERROR] curl command is not installed on the system" + exit 1 +fi + +COOKIE_TEMP=$(tempfile -m 600 -d /tmp -p warmup) +ASSET_LIST=$(tempfile -m 600 -d /tmp -p warmupassets) + +trap "rm -fv ${COOKIE_TEMP} ${ASSET_LIST}" EXIT + +echo "[INFO] = $(display_date) Login into ${WARMUP_URL} with user ${WARMUP_USER} ..." + +set +e +curl -s -L -c ${COOKIE_TEMP} -b ${COOKIE_TEMP} -XPOST -d "username=${WARMUP_USER}&password=${WARMUP_PASSWORD}" --post302 ${WARMUP_URL} | grep -E -o -e "=[ \"']+/[.a-zA-Z0-9\/-]+\.css[\"']{1}" -e "=[ \"']+/[.a-zA-Z0-9\/-]+\.js[\"']{1}" | tr -d " " | tr -d "\"" | tr -d "=" > ${ASSET_LIST} +RET=$? +set -e + +if [ $RET -ne 0 ]; then + echo "[ERROR] Login failed" + exit 1 +fi + +echo "[INFO] = $(display_date) Login done ..." +echo "[INFO] = $(display_date) $(cat ${ASSET_LIST} | wc -l) assets found ..." +cat ${ASSET_LIST} +echo "[INFO] = $(display_date) Loading them ..." + +set +e +for i in $(cat ${ASSET_LIST}); do + ${CURL_CMD} -s -L -c /tmp/cookies -b /tmp/cookies ${WARMUP_URL}$i > /dev/null +done +set -e + +echo "[INFO] = $(display_date) All assets called ..." + +echo "" +echo "[INFO] =======================================" +echo "[INFO] = $(display_date) Warmup done ..." +echo "[INFO] ======================================="