mirror of
https://github.com/azaion/detections.git
synced 2026-04-22 06:46:32 +00:00
8ce40a9385
- Introduced `AIAvailabilityStatus` class to manage the availability status of AI models, including methods for setting status and logging messages. - Added `AIRecognitionConfig` class to encapsulate configuration parameters for AI recognition, with a static method for creating instances from dictionaries. - Implemented enums for AI availability states to enhance clarity and maintainability. - Updated related Cython files to support the new classes and ensure proper type handling. These changes aim to improve the structure and functionality of the AI model management system, facilitating better status tracking and configuration handling.
70 lines
2.0 KiB
Bash
Executable File
70 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
FIXTURES="$ROOT/e2e/fixtures"
|
|
|
|
LOADER_PORT=8080
|
|
ANNOTATIONS_PORT=8081
|
|
DETECTIONS_PORT=8000
|
|
PIDS=()
|
|
|
|
cleanup() {
|
|
for pid in "${PIDS[@]+"${PIDS[@]}"}"; do
|
|
kill "$pid" 2>/dev/null || true
|
|
done
|
|
wait 2>/dev/null
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
echo "Building Cython extensions ..."
|
|
python setup.py build_ext --inplace
|
|
|
|
for port in $LOADER_PORT $ANNOTATIONS_PORT $DETECTIONS_PORT; do
|
|
if lsof -ti :"$port" >/dev/null 2>&1; then
|
|
echo "Killing stale process on port $port ..."
|
|
lsof -ti :"$port" | xargs kill -9 2>/dev/null || true
|
|
sleep 1
|
|
fi
|
|
done
|
|
|
|
echo "Starting mock-loader on :$LOADER_PORT ..."
|
|
MODELS_ROOT="$FIXTURES" \
|
|
python -m gunicorn --bind "0.0.0.0:$LOADER_PORT" --workers 1 --timeout 120 \
|
|
'e2e.mocks.loader.app:app' >/dev/null 2>&1 &
|
|
PIDS+=($!)
|
|
|
|
echo "Starting mock-annotations on :$ANNOTATIONS_PORT ..."
|
|
python -m gunicorn --bind "0.0.0.0:$ANNOTATIONS_PORT" --workers 1 --timeout 120 \
|
|
'e2e.mocks.annotations.app:app' >/dev/null 2>&1 &
|
|
PIDS+=($!)
|
|
|
|
echo "Starting detections service on :$DETECTIONS_PORT ..."
|
|
LOADER_URL="http://localhost:$LOADER_PORT" \
|
|
ANNOTATIONS_URL="http://localhost:$ANNOTATIONS_PORT" \
|
|
PYTHONPATH="$ROOT/src" \
|
|
python -m uvicorn main:app --host 0.0.0.0 --port "$DETECTIONS_PORT" \
|
|
--log-level warning >/dev/null 2>&1 &
|
|
PIDS+=($!)
|
|
|
|
echo "Waiting for services ..."
|
|
for url in \
|
|
"http://localhost:$DETECTIONS_PORT/health" \
|
|
"http://localhost:$LOADER_PORT/mock/status" \
|
|
"http://localhost:$ANNOTATIONS_PORT/mock/status"; do
|
|
for i in $(seq 1 30); do
|
|
if curl -sf "$url" >/dev/null 2>&1; then break; fi
|
|
if [ "$i" -eq 30 ]; then echo "ERROR: $url not ready" >&2; exit 1; fi
|
|
sleep 1
|
|
done
|
|
done
|
|
|
|
echo "All services ready. Running tests ..."
|
|
echo ""
|
|
|
|
BASE_URL="http://localhost:$DETECTIONS_PORT" \
|
|
MOCK_LOADER_URL="http://localhost:$LOADER_PORT" \
|
|
MOCK_ANNOTATIONS_URL="http://localhost:$ANNOTATIONS_PORT" \
|
|
MEDIA_DIR="$FIXTURES" \
|
|
python -m pytest e2e/tests/ -v --tb=short "$@"
|