logs-collector/scripts/entrypoint.sh

105 lines
2.5 KiB
Bash
Raw Permalink Normal View History

2023-08-30 15:26:53 +02:00
#!/usr/bin/env sh
2023-09-12 11:03:17 +02:00
# set global variables:
_DB_URL="${DB_URL}"
# parses the database connection url and sets global variables:
#
# _DBMS: {psql, sqlite} default dbms used
# _DB_HOST {domain,ip_address} for connections
# _DB_PORT {5432,3306,etc} for connections
# _DB_USER {root,admin,etc} db username
# _DB_PASSWORD {super_secret} db user password
parse_db_url() {
local db_url=$1
echo "-------- Check used DBMS --------"
if [ -n "${db_url}" ]; then
# ! PARSING:
# -- -- --
# extract the protocol
local proto="$(echo "${db_url}" | grep '://' | sed -e's,^\(.*://\).*,\1,g')"
local dbms=${proto%:*}
# if dpms is "sqlite" we do not need parse url args
if [ "${dbms}" = "psql" ]; then
# remove the protocol (clean url)
local url=$(echo "${db_url}" | sed -e s,"${proto}",,g)
# extract the user and password (if any)
local userpass="$(echo "${url}" | grep @ | cut -d@ -f1)"
local password=$(echo "${userpass}" | grep : | cut -d: -f2)
# extract the host and port connection
local hostport=$(echo "${url}" | sed -e s,$userpass@,,g | cut -d/ -f1)
local port=$(echo "${hostport}" | grep : | cut -d: -f2)
# ! SET VARIABLES:
# -- -- -- -- --
# _DB_HOST or/and _DB_PORT for test db connection
if [ -n "${port}" ]; then
_DB_HOST=$(echo "${hostport}" | grep : | cut -d: -f1)
_DB_PORT="${port}"
else
_DB_HOST="${hostport}"
fi
# _DB_USER or/and _DB_PASSWORD for future features
if [ -n "${password}" ]; then
_DB_USER=$(echo "${userpass}" | grep : | cut -d: -f1)
_DB_PASSWORD="${password}"
else
_DB_USER="${userpass}"
fi
fi
# _DBMS (sqlite or psql)
_DBMS="${dbms}"
echo "${_DBMS} is set as the default DBMS"
else
# _DBMS (sqlite)
_DBMS="sqlite"
echo "${_DBMS} is set as the default DBMS"
fi
}
# waits until the database becomes available for connection
wait_db() {
local dbms=$1
local db_host=$2
local db_port=$3
if [ "${dbms}" = "psql" ];then
echo "------- Waiting for database start -------"
while ! nc -z $db_host $db_port; do
sleep 0.1
done
echo "PostgreSQL started"
fi
}
# app config performs database migration, collects static files
app_config() {
echo "-------- Apply migration --------"
python manage.py migrate --no-input
echo "----- Collect static files ------"
python manage.py collectstatic --no-input
}
# run app wsgi web server
app_run() {
echo "--------- Run gunicorn ----------"
gunicorn logs_collector.wsgi:application
}
# app entrypoint
main() {
parse_db_url $_DB_URL
wait_db $_DBMS $_DB_HOST $_DB_PORT
app_config
app_run
}
# RUN
main
exec "$@"