44 lines
1.2 KiB
Bash
Executable File
44 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
PROJECT_DIR="/app"
|
|
CONFIG_TEMPLATE="${PROJECT_DIR}/config/config.example.yaml"
|
|
CONFIG_PATH="${CONFIG_PATH:-${PROJECT_DIR}/config/local.yaml}"
|
|
LOG_DIR="${PROJECT_DIR}/logs"
|
|
CAMERA_ID="${CAMERA_ID:-store_cam_01}"
|
|
RTSP_URL="${RTSP_URL:-}"
|
|
EVENT_SINK_PATH="${EVENT_SINK_PATH:-logs/events.jsonl}"
|
|
API_HOST="${API_HOST:-0.0.0.0}"
|
|
API_PORT="${API_PORT:-18081}"
|
|
|
|
mkdir -p "${LOG_DIR}" "$(dirname "${CONFIG_PATH}")"
|
|
|
|
if [ ! -f "${CONFIG_PATH}" ]; then
|
|
cp "${CONFIG_TEMPLATE}" "${CONFIG_PATH}"
|
|
fi
|
|
|
|
python - "$CONFIG_PATH" "$CAMERA_ID" "$RTSP_URL" "$EVENT_SINK_PATH" <<'PY'
|
|
from pathlib import Path
|
|
import sys
|
|
import yaml
|
|
|
|
config_path = Path(sys.argv[1])
|
|
camera_id = sys.argv[2]
|
|
rtsp_url = sys.argv[3]
|
|
event_sink_path = sys.argv[4]
|
|
|
|
raw = yaml.safe_load(config_path.read_text(encoding="utf-8")) or {}
|
|
raw["camera_id"] = camera_id
|
|
stream = raw.setdefault("stream", {})
|
|
if rtsp_url:
|
|
stream["rtsp_url"] = rtsp_url
|
|
event_sink = raw.setdefault("event_sink", {})
|
|
event_sink["path"] = event_sink_path
|
|
config_path.write_text(
|
|
yaml.safe_dump(raw, allow_unicode=True, sort_keys=False),
|
|
encoding="utf-8",
|
|
)
|
|
PY
|
|
|
|
exec python -m app.manage_api --config "${CONFIG_PATH}" --host "${API_HOST}" --port "${API_PORT}"
|