Implement executing tasks
This commit is contained in:
@@ -3,21 +3,39 @@ set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
STACK_ENV="${STACK_ENV:-$ROOT_DIR/stack.env}"
|
||||
POD_NAME="gia"
|
||||
|
||||
REDIS_CONTAINER="redis_gia"
|
||||
SIGNAL_CONTAINER="signal"
|
||||
MIGRATION_CONTAINER="migration_gia"
|
||||
COLLECTSTATIC_CONTAINER="collectstatic_gia"
|
||||
APP_CONTAINER="gia"
|
||||
ASGI_CONTAINER="asgi_gia"
|
||||
UR_CONTAINER="ur_gia"
|
||||
SCHED_CONTAINER="scheduling_gia"
|
||||
STACK_ID="${GIA_STACK_ID:-${STACK_ID:-}}"
|
||||
STACK_ID="$(echo "$STACK_ID" | tr -cs 'a-zA-Z0-9._-' '-' | sed 's/^-*//; s/-*$//')"
|
||||
|
||||
name_with_stack() {
|
||||
local base="$1"
|
||||
if [[ -n "$STACK_ID" ]]; then
|
||||
echo "${base}_${STACK_ID}"
|
||||
else
|
||||
echo "$base"
|
||||
fi
|
||||
}
|
||||
|
||||
POD_NAME="$(name_with_stack "gia")"
|
||||
|
||||
REDIS_CONTAINER="$(name_with_stack "redis_gia")"
|
||||
SIGNAL_CONTAINER="$(name_with_stack "signal")"
|
||||
MIGRATION_CONTAINER="$(name_with_stack "migration_gia")"
|
||||
COLLECTSTATIC_CONTAINER="$(name_with_stack "collectstatic_gia")"
|
||||
APP_CONTAINER="$(name_with_stack "gia")"
|
||||
ASGI_CONTAINER="$(name_with_stack "asgi_gia")"
|
||||
UR_CONTAINER="$(name_with_stack "ur_gia")"
|
||||
SCHED_CONTAINER="$(name_with_stack "scheduling_gia")"
|
||||
CODEX_WORKER_CONTAINER="$(name_with_stack "codex_worker_gia")"
|
||||
|
||||
REDIS_DATA_DIR="${QUADLET_REDIS_DATA_DIR:-$ROOT_DIR/.podman/gia_redis_data}"
|
||||
WHATSAPP_DATA_DIR="${QUADLET_WHATSAPP_DATA_DIR:-$ROOT_DIR/.podman/gia_whatsapp_data}"
|
||||
SQLITE_DATA_DIR="${QUADLET_SQLITE_DATA_DIR:-$ROOT_DIR/.podman/gia_sqlite_data}"
|
||||
VRUN_DIR="/code/vrun"
|
||||
if [[ -n "${STACK_ID}" ]]; then
|
||||
VRUN_DIR="/code/vrun/${STACK_ID}"
|
||||
else
|
||||
VRUN_DIR="/code/vrun"
|
||||
fi
|
||||
|
||||
load_env() {
|
||||
set -a
|
||||
@@ -134,6 +152,7 @@ down_stack() {
|
||||
rm_if_exists "$ASGI_CONTAINER"
|
||||
rm_if_exists "$UR_CONTAINER"
|
||||
rm_if_exists "$SCHED_CONTAINER"
|
||||
rm_if_exists "$CODEX_WORKER_CONTAINER"
|
||||
}
|
||||
|
||||
start_stack() {
|
||||
@@ -153,7 +172,15 @@ start_stack() {
|
||||
chmod 0666 "$HOST_DATABASE_FILE" 2>/dev/null || true
|
||||
down_stack
|
||||
|
||||
podman pod create --name "$POD_NAME" -p "${APP_PORT:-5006}:8000" -p "8080:8080" >/dev/null
|
||||
local port_offset="${GIA_STACK_PORT_OFFSET:-}"
|
||||
if [[ -z "$port_offset" && -n "$STACK_ID" ]]; then
|
||||
port_offset="$(( $(printf '%s' "$STACK_ID" | cksum | awk '{print $1}') % 500 + 1 ))"
|
||||
fi
|
||||
port_offset="${port_offset:-0}"
|
||||
local app_port="${APP_PORT:-$((5006 + port_offset))}"
|
||||
local signal_port="${SIGNAL_PUBLIC_PORT:-$((8080 + port_offset))}"
|
||||
|
||||
podman pod create --name "$POD_NAME" -p "${app_port}:8000" -p "${signal_port}:8080" >/dev/null
|
||||
|
||||
podman run -d \
|
||||
--replace \
|
||||
@@ -182,6 +209,7 @@ start_stack() {
|
||||
run_worker_container "$ASGI_CONTAINER" "rm -f /var/run/asgi-gia.sock && . /venv/bin/activate && python -m pip install --disable-pip-version-check -q uvicorn && python -m uvicorn app.asgi:application --uds /var/run/asgi-gia.sock --workers 1" 0 1
|
||||
run_worker_container "$UR_CONTAINER" ". /venv/bin/activate && python manage.py ur" 1 1
|
||||
run_worker_container "$SCHED_CONTAINER" ". /venv/bin/activate && python manage.py scheduling" 1 0
|
||||
run_worker_container "$CODEX_WORKER_CONTAINER" ". /venv/bin/activate && python manage.py codex_worker" 1 0
|
||||
}
|
||||
|
||||
render_units() {
|
||||
@@ -211,18 +239,23 @@ case "${1:-}" in
|
||||
status)
|
||||
require_podman
|
||||
podman pod ps --format "table {{.Name}}\t{{.Status}}" | grep -E "^$POD_NAME\b" || true
|
||||
podman ps --format "table {{.Names}}\t{{.Status}}" | grep -E "^($APP_CONTAINER|$ASGI_CONTAINER|$UR_CONTAINER|$SCHED_CONTAINER|$REDIS_CONTAINER|$SIGNAL_CONTAINER)\b" || true
|
||||
podman ps --format "table {{.Names}}\t{{.Status}}" | grep -E "^($APP_CONTAINER|$ASGI_CONTAINER|$UR_CONTAINER|$SCHED_CONTAINER|$CODEX_WORKER_CONTAINER|$REDIS_CONTAINER|$SIGNAL_CONTAINER)\b" || true
|
||||
;;
|
||||
logs)
|
||||
require_podman
|
||||
if is_remote; then
|
||||
podman logs -f "$APP_CONTAINER"
|
||||
else
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER"
|
||||
podman logs -f "$APP_CONTAINER" "$ASGI_CONTAINER" "$UR_CONTAINER" "$SCHED_CONTAINER" "$CODEX_WORKER_CONTAINER" "$REDIS_CONTAINER" "$SIGNAL_CONTAINER"
|
||||
fi
|
||||
;;
|
||||
watch)
|
||||
require_podman
|
||||
load_env
|
||||
exec "$ROOT_DIR/scripts/quadlet/watchdog.sh"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {install|up|down|restart|status|logs}" >&2
|
||||
echo "Usage: $0 {install|up|down|restart|status|logs|watch}" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user