Initial commit

This commit is contained in:
Christian Tosta
2024-03-27 10:15:34 -03:00
commit 125ddd20d5
20 changed files with 1959 additions and 0 deletions

120
lib/plugins/dropdb.bash Normal file
View File

@@ -0,0 +1,120 @@
#!/usr/bin/bash
set -euo pipefail
# -- DropDb Class --------------------------------------------------------------
dropdb.__load__() {
return 0
}
dropdb.run() {
local _logdir=$(pwd)/logs
local _pgpassfile=~/.pgpass
declare -A pids=()
function __write_pgpass() {
if [[ ! -z "${host[name]}" ]]; then
touch ${_pgpassfile} && \
chmod 0600 ${_pgpassfile}
printf "%s:%s:*:%s:%s" \
${host[db_host]} \
${host[db_port]} \
${host[db_user]} \
${host[db_pass]} \
> ${_pgpassfile}
fi
}
function __pre() {
${ui}.debug 'text' '\n'
mkdir -p ${_logdir}
__write_pgpass
echo
}
function __post() {
rm -rf ${_pgpassfile}
}
function __wait_processes() {
${ui}.info && \
${ui}.item $"Waiting for processes to complete\n"
${ui}.line 'compact'
while true; do
alive_pids=()
for _pid in "${!pids[@]}"; do
_db=${pids[${_pid}]}
kill -0 "${_pid}" 2>/dev/null \
&& _etime[${_pid}]=$(ps -o etimes= -p ${_pid} || :) \
&& alive_pids+="${_pid} "
${ui}.info && \
${ui}.print '%s ' $(${ui}.color green; echo "[dropdb]")
${ui}.color && \
${ui}.subitem $"process still running "
${ui}.print '%s ' \
$(${ui}.color gold; ${ui}.arrow right; ${ui}.color)
${ui}.print "[db=${_db}, pid=${_pid}, etime=%ss]\n" \
${_etime[${_pid}]}
done
[ ${#alive_pids[@]} -eq 0 ] && break
sleep 5
done
${ui}.print '\n'
${ui}.info && \
${ui}.print '%s ' $(${ui}.color green; echo "[dropdb]")
${ui}.color && ${ui}.subitem $"all processes terminated\n"
${ui}.line 'compact'
}
function __dropdb() {
local _dropdb=$(which dropdb || exit -1)
local _logfile=drop-${db}-$(date +"%Y%m%d%H%M%S").log
local _cmd="${_dropdb} \
-h ${host[db_host]} \
-p ${host[db_port]} \
-U ${host[db_user]} \
${host[drop_extraopts]:-} \
-f --if-exists ${db}"
_cmd=$(echo -ne ${_cmd})
${ui}.debug 'line' 'compact'
${ui}.debug && ${ui}.tab 2
${ui}.debug 'subitem' $"Running command:\n"
#${ui}.debug 'text' "$(${ui}.color gold)${_cmd//${_restoredir}\//} \
${ui}.debug 'text' "$(${ui}.color gold)${_cmd} \
$(${ui}.color)" \
| fold -sw 60 \
| sed "s/^/$(printf '%14s' ' ')/g"
${ui}.debug 'text' '\n'
${ui}.debug && ${ui}.tab 2
${ui}.debug 'subitem' $"Process will run in backgroud [logfile=%s]\n" \
${_logfile}
${_cmd} > ${_logdir}/${_logfile} 2>&1 &
pids+=([$!]=${db})
}
function __run() {
${ui}.debug 'text' '\n'
dbs="${dblist}"
test -f ${cfgdir}/databases/${dblist}.txt && \
dbs=$(< ${cfgdir}/databases/${dblist}.txt);
for db in ${dbs}; do
${ui}.info && \
${ui}.item $"Starting %s %s [host=%s, db=%s]\n" \
"dropdb" \
$(${ui}.color gold; ${ui}.arrow right; ${ui}.color) \
${host[name]} \
${db}
__dropdb
${ui}.debug 'text' '\n'
done
__wait_processes
}
__pre
__run
__post
}
dropdb.__load__
# vim: ts=4:sw=4:sts=4:et