#!/usr/bin/env bash

CORES=$(grep -c '^processor' /proc/cpuinfo)
WORKERS=$(expr 2 \* ${CORES} + 1)
THREADS=$(expr 2 \* ${CORES})

# If we're unable to determine workers, just set a default
THREADS=${THREADS:-2}
WORKERS=${WORKERS:-3}

ASGI_PORT=${SOVEREIGN_PORT:-8080}
ASGI_BIND=${SOVEREIGN_HOST:-0.0.0.0}
ASGI_KEEPALIVE=${SOVEREIGN_KEEPALIVE:-5}
ASGI_APPLICATION_PATH=${SOVEREIGN_APPLICATION_PATH:-sovereign.app:app}

gunicorn \
    --bind ${ASGI_BIND}:${ASGI_PORT} \
    --reload \
    --reuse-port \
    --threads ${THREADS} \
    --workers ${WORKERS} \
    --worker-class uvicorn.workers.UvicornWorker \
    --keep-alive ${ASGI_KEEPALIVE} \
    --log-level warning \
    ${ASGI_APPLICATION_PATH}
