mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-02-01 01:10:52 +01:00
105 lines
2.5 KiB
Bash
Executable File
105 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
|
|
# 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 "$@"
|