# HG changeset patch # User Matt Calmes # Date 1635180995 14400 # Node ID 1f4f55e188887ea72e3e87e31e20e36340ec6a85 # Parent d75786228e6ba60f1e7d4262febb480e0a268899# Parent 08c801c162f9ef7b2f7e5bc9ed4b32ef6026208d INV-197 merge workflow scripts diff -r 08c801c162f9 -r 1f4f55e18888 scripts/backup-container-docker.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/backup-container-docker.sh Mon Oct 25 12:56:35 2021 -0400 @@ -0,0 +1,70 @@ +#!/bin/bash +# Executes a database backup for the specifed database container. +# The current directory is expected to contain a project configured +# as with SSDT conventions for an application database. +# +# When successful, the output file will be in ./backup with the +# container name and timestamp in the file. The format of the output +# is a compressed pg_dump (sql) format. +# +container=${1?Must provide container name to backup} +projectDir=${2:-$PWD} + +cd $projectDir + +source "${SSDT_SCRIPTS:-$(dirname "${BASH_SOURCE[0]}")}/.functions.sh" + +set -o pipefail +mkdir -p ./backup + +if [ "$container" = "invdb" ]; then + function prop { + grep "${1}" .env/ssdt-inventory-shared.properties|cut -d'=' -f2 + } + entityId=$(prop 'entityId' | tr -d '"') + containerName="$entityId-inventory-db" + IRN=$(docker exec $containerName psql --username=postgres --dbname=$container -t -c 'select districtirn from inventoryconfiguration') + ## if database is empty, it will put IRN 000000 + if [ "$IRN" == "" ]; then + echo "no IRN set,using 000000" + IRN=000000 + fi + ##Take out the extra space from IRN returned from db. + IRN=`echo $IRN | sed -e 's/^[[:space:]]*//'` + backupFile=./backup/${IRN}${entityId}-${container}.$(date +%Y-%m-%d-%H-%M-%S).backup + echo "entityId is $entityId" + echo "container name is $containerName" +fi + +if [ "$container" = "workflowsdb" ]; then + function prop { + grep "${1}" .env/ssdt-workflows-shared.properties|cut -d'=' -f2 + } + entityId=$(prop 'entityId' | tr -d '"') + containerName="$entityId-workflows-db" + backupFile=./backup/${entityId}-${container}.$(date +%Y-%m-%d-%H-%M-%S).backup + echo "entityId is $entityId" + echo "container name is $containerName" +fi + +echo "Container is $container" +echo "IRN is $IRN" + +echo "backup file ${backupFile}" +echo "preparing to backup ${container} on current project at ${projectDir}:" +echo " " + +echo "starting backup of $container" +docker exec -t $containerName sh -c "gosu postgres pg_dump -Cc --if-exists --dbname=$container ; (exit $?) " > ${backupFile} +#if [[ $( grep --count "CREATE TABLE" ${backupFile} ) -lt 200 || $( grep --count "PostgreSQL database dump complete" ${backupFile} ) -eq 0 ]]; then +# echo "ERROR: backup verification FAILED" +# echo "Error: empty database" +# echo "ERROR: $(tail ${backupFile})" + # We want the process to continue even if the db is blank + # exit 1 +#fi + +gzip ${backupFile} + +echo "completed backup of $container to ${backupFile}" + diff -r 08c801c162f9 -r 1f4f55e18888 scripts/backup-inventory.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/backup-inventory.sh Mon Oct 25 12:56:35 2021 -0400 @@ -0,0 +1,6 @@ +#!/bin/bash + +source "${SSDT_SCRIPTS:-$(dirname "${BASH_SOURCE[0]}")}/.functions.sh" + +${SSDT_SCRIPTS}/backup-container-docker.sh invdb ${1} + diff -r 08c801c162f9 -r 1f4f55e18888 scripts/backup-workflow.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/backup-workflow.sh Mon Oct 25 12:56:35 2021 -0400 @@ -0,0 +1,5 @@ +#!/bin/bash + +source "${SSDT_SCRIPTS:-$(dirname "${BASH_SOURCE[0]}")}/.functions.sh" + +${SSDT_SCRIPTS}/backup-container-docker.sh workflowdb ${1} diff -r 08c801c162f9 -r 1f4f55e18888 scripts/exec-all-projects-docker.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/exec-all-projects-docker.sh Mon Oct 25 12:56:35 2021 -0400 @@ -0,0 +1,42 @@ +#!/bin/bash +# Scans for standard SSDT docker projects in specified parent path and +# executes the specified command. +# +# The first parameter specifices the parent directory to search for. +# +# The second parameter specifies the command to execute against each +# SSDT standard docker project found under the parent directory. +# +# examples: +# +# /ssdt/scripts/exec-all-projects-docker.sh /data/prod /ssdt/scripts/backup-inventory.sh +# +# runs backup-inventory.sh script against all projects under /data/prod +# +## + +source "${SSDT_SCRIPTS:-$(dirname "${BASH_SOURCE[0]}")}/.functions.sh" + +: ${1?"Usage: {parent path} [command]"} + +ORIGINALDIR=$PWD +PARENTDIR=$1 + +shift +COMMAND=$@ + +for f in $(find $PARENTDIR -type d -name .env) +do + projectdir=`dirname $f` + project=`basename $projectdir` + cd $projectdir + if ls .env/ssdt-*-shared.properties 1> /dev/null 2>&1; then + echo "projectdir is $projectdir" + echo -e "----\n$executing $COMMAND on $project \n----" + + bash -c "${COMMAND}" + echo "" + fi +done + +cd $ORIGINALDIR