diff options
Diffstat (limited to 'apps/db_assembler/includes/functions.sh')
-rw-r--r-- | apps/db_assembler/includes/functions.sh | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/apps/db_assembler/includes/functions.sh b/apps/db_assembler/includes/functions.sh new file mode 100644 index 0000000000..946365372d --- /dev/null +++ b/apps/db_assembler/includes/functions.sh @@ -0,0 +1,348 @@ +# globals +PROMPT_USER="" +PROMPT_PASS="" + +# use in a subshell +function dbasm_resetExitCode() { + exit 0 +} + +function dbasm_mysqlExec() { + confs=$1 + command=$2 + options=$3 + + eval $confs + + if [[ ! -z "${PROMPT_USER// }" ]]; then + MYSQL_USER=$PROMPT_USER + MYSQL_PASS=$PROMPT_PASS + fi + + export MYSQL_PWD=$MYSQL_PASS + + retval=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" $options -e "$command") + if [[ $? -ne 0 ]]; then + err=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" $options -e "$command" 2>&1 ) + if [[ "$err" == *"Access denied"* ]]; then + read -p "Insert mysql user:" PROMPT_USER + read -p "Insert mysql pass:" -s PROMPT_PASS + export MYSQL_PWD=$PROMPT_PASS + + # create configured account if not exists + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -e "CREATE USER '${MYSQL_USER}'@'${MYSQL_HOST}' IDENTIFIED BY '${MYSQL_PASS}' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;" + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -e "GRANT USAGE ON * . * TO '${MYSQL_USER}'@'${MYSQL_HOST}' WITH GRANT OPTION;" + + retval=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -e "$command") + else + exit + fi + fi +} + +function dbasm_isNotEmpty() { + dbname=$1 + conf=$2 + + dbasm_mysqlExec "$conf" "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '${dbname}'" "--skip-column-names" + if (( $retval > 0 )); then + true + else + false + fi +} + +function dbasm_dbExists() { + dbname=$1 + conf=$2 + + dbasm_mysqlExec "$conf" "SHOW DATABASES LIKE '${dbname}'" "--skip-column-names" + if [ "$retval" == "${dbname}" ]; then + true + else + false + fi +} + +function dbasm_createDB() { + database=${1,,} + + uc=${database^^} + + name="DB_"$uc"_CONF" + confs=${!name} + + name="DB_"$uc"_NAME" + dbname=${!name} + + eval $confs + + CONF_USER=$MYSQL_USER + CONF_PASS=$MYSQL_PASS + + if dbasm_dbExists $dbname "$confs"; then + echo "$dbname database exists" + else + echo "Creating DB ${dbname} ..." + dbasm_mysqlExec "$confs" "CREATE DATABASE \`${dbname}\`" "" + dbasm_mysqlExec "$confs" "GRANT ALL PRIVILEGES ON \`${dbname}\` . * TO '${CONF_USER}'@'${MYSQL_HOST}' WITH GRANT OPTION;" + fi +} + +function dbasm_assemble() { + # to lowercase + database=${1,,} + start_sql=$2 + with_base=$3 + with_updates=$4 + with_custom=$5 + + uc=${database^^} + + name="DB_"$uc"_PATHS" + v="$name[@]" + base=("${!v}") + + name="DB_"$uc"_UPDATE_PATHS" + v="$name[@]" + updates=("${!v}") + + name='DB_'$uc'_CUSTOM_PATHS' + v="$name[@]" + custom=("${!v}") + + + suffix_base="_base" + suffix_upd="_update" + suffix_custom="_custom" + + curTime=`date +%Y_%m_%d_%H_%M_%S` + + if [ $with_base = true ]; then + echo "" > $OUTPUT_FOLDER$database$suffix_base".sql" + + + if [ ! ${#base[@]} -eq 0 ]; then + echo "Generating $OUTPUT_FOLDER$database$suffix_base ..." + + for d in "${base[@]}" + do + echo "Searching on $d ..." + if [ ! -z $d ]; then + for entry in "$d"/*.sql "$d"/**/*.sql + do + if [[ -e $entry ]]; then + cat "$entry" >> $OUTPUT_FOLDER$database$suffix_base".sql" + fi + done + fi + done + fi + fi + + if [ $with_updates = true ]; then + updFile=$OUTPUT_FOLDER$database$suffix_upd".sql" + + echo "" > $updFile + + if [ ! ${#updates[@]} -eq 0 ]; then + echo "Generating $OUTPUT_FOLDER$database$suffix_upd ..." + + for d in "${updates[@]}" + do + echo "Searching on $d ..." + if [ ! -z $d ]; then + for entry in "$d"/*.sql "$d"/**/*.sql + do + if [[ ! -e $entry ]]; then + continue + fi + + echo "-- $file" >> $updFile + cat "$entry" >> $updFile + done + fi + done + fi + fi + + if [ $with_custom = true ]; then + custFile=$OUTPUT_FOLDER$database$suffix_custom".sql" + + echo "" > $custFile + + if [ ! ${#custom[@]} -eq 0 ]; then + echo "Generating $OUTPUT_FOLDER$database$suffix_custom ..." + + for d in "${custom[@]}" + do + echo "Searching on $d ..." + if [ ! -z $d ]; then + for entry in "$d"/*.sql "$d"/**/*.sql + do + if [[ ! -e $entry ]]; then + continue + fi + + echo "-- $file" >> $custFile + cat "$entry" >> $custFile + done + fi + done + fi + fi +} + +function dbasm_run() { + echo "===== STARTING ASSEMBLY PROCESS =====" + + mkdir -p "$OUTPUT_FOLDER" + + for db in ${DATABASES[@]} + do + dbasm_assemble "$db" $version".sql" $1 $2 $3 + done + + echo "===== DONE =====" +} + +function dbasm_db_backup() { + echo "backing up $1" + + database=${1,,} + + uc=${database^^} + + name="DB_"$uc"_CONF" + confs=${!name} + + name="DB_"$uc"_NAME" + dbname=${!name} + + eval $confs; + + if [[ ! -z "${PROMPT_USER// }" ]]; then + MYSQL_USER=$PROMPT_USER + MYSQL_PASS=$PROMPT_PASS + fi + + export MYSQL_PWD=$MYSQL_PASS + + now=`date +%s` + + "$DB_MYSQL_DUMP_EXEC" --opt --user="$MYSQL_USER" --host="$MYSQL_HOST" "$dbname" > "${BACKUP_FOLDER}${database}_backup_${now}.sql" && echo "done" + if [[ $? -ne 0 ]]; then + err=$("$DB_MYSQL_DUMP_EXEC" --opt --user="$MYSQL_USER" --host="$MYSQL_HOST" "$dbname" 2>&1 ) + if [[ "$err" == *"Access denied"* ]]; then + read -p "Insert mysql user:" PROMPT_USER + read -p "Insert mysql pass:" -s PROMPT_PASS + export MYSQL_PWD=$PROMPT_PASS + + "$DB_MYSQL_DUMP_EXEC" --opt --user="$PROMPT_USER" --host="$MYSQL_HOST" "$dbname" > "${BACKUP_FOLDER}${database}_backup_${now}.sql" && echo "done" + else + exit + fi + fi +} + +function dbasm_db_import() { + database=${1,,} + type=$2 + + uc=${database^^} + + name="DB_"$uc"_CONF" + confs=${!name} + + name="DB_"$uc"_NAME" + dbname=${!name} + + if [[ $type = "base" && $DB_SKIP_BASE_IMPORT_IF_EXISTS = true ]]; then + if dbasm_isNotEmpty $dbname "$confs"; then + echo "$dbname is not empty, base importing skipped" + return + fi + fi + + echo "importing $1 - $2 ..." + + eval $confs; + + if [[ ! -z "${PROMPT_USER// }" ]]; then + MYSQL_USER=$PROMPT_USER + MYSQL_PASS=$PROMPT_PASS + fi + + export MYSQL_PWD=$MYSQL_PASS + + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" "$dbname" < "${OUTPUT_FOLDER}${database}_${type}.sql" + if [[ $? -ne 0 ]]; then + err=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" "$dbname" 2>&1 ) + if [[ "$err" == *"Access denied"* ]]; then + read -p "Insert mysql user:" PROMPT_USER + read -p "Insert mysql pass:" -s PROMPT_PASS + export MYSQL_PWD=$PROMPT_PASS + + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" "$dbname" < "${OUTPUT_FOLDER}${database}_${type}.sql" + else + exit + fi + fi +} + +function dbasm_import() { + dbasm_run $1 $2 $3 + + with_base=$1 + with_updates=$2 + with_custom=$3 + + echo "===== CHECKING DBs =====" + for db in ${DATABASES[@]} + do + dbasm_createDB "$db" + done + echo "===== DONE =====" + + # + # BACKUP + # + + if [ $BACKUP_ENABLE = true ]; then + echo "===== STARTING BACKUP PROCESS =====" + mkdir -p "$BACKUP_FOLDER" + + for db in ${DATABASES[@]} + do + dbasm_db_backup "$db" + done + echo "===== DONE =====" + fi + + echo "===== STARTING IMPORTING PROCESS =====" + # + # IMPORT + # + if [ $with_base = true ]; then + for db in ${DATABASES[@]} + do + dbasm_db_import "$db" "base" + done + fi + + if [ $with_updates = true ]; then + for db in ${DATABASES[@]} + do + dbasm_db_import "$db" "update" + done + fi + + if [ $with_custom = true ]; then + for db in ${DATABASES[@]} + do + dbasm_db_import "$db" "custom" + done + fi + + echo "===== DONE =====" +} |