iop/bin/node.sh

36 lines
1.3 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
CONFIG_FILE="${IOP_NODE_CONFIG:-$REPO_ROOT/configs/node.yaml}"
cd "$REPO_ROOT"
echo "[node] config=$CONFIG_FILE"
EDGE_ADDR="${IOP_EDGE_ADDR:-$(sed -nE 's/^[[:space:]]*edge_addr:[[:space:]]*"?([^"#]+)"?[[:space:]]*(#.*)?$/\1/p' "$CONFIG_FILE" | head -n1)}"
EDGE_ADDR="${EDGE_ADDR//[[:space:]]/}"
EDGE_HOST="${EDGE_ADDR%:*}"
EDGE_PORT="${EDGE_ADDR##*:}"
EDGE_HOST="${EDGE_HOST#[}"
EDGE_HOST="${EDGE_HOST%]}"
WAIT_TIMEOUT="${IOP_NODE_WAIT_TIMEOUT:-30}"
WAIT_INTERVAL="${IOP_NODE_WAIT_INTERVAL:-1}"
if [[ -z "$EDGE_HOST" || -z "$EDGE_PORT" || "$EDGE_HOST" == "$EDGE_PORT" ]]; then
echo "[node] invalid edge_addr in $CONFIG_FILE: ${EDGE_ADDR:-<empty>}" >&2
exit 1
fi
echo "[node] waiting for edge at $EDGE_HOST:$EDGE_PORT timeout=${WAIT_TIMEOUT}s"
deadline=$((SECONDS + WAIT_TIMEOUT))
while ! timeout 1 bash -c 'cat < /dev/null > /dev/tcp/"$1"/"$2"' _ "$EDGE_HOST" "$EDGE_PORT" 2>/dev/null; do
if (( SECONDS >= deadline )); then
echo "[node] edge is not reachable at $EDGE_HOST:$EDGE_PORT; start ./bin/edge.sh first or update configs/node.yaml transport.edge_addr" >&2
exit 1
fi
sleep "$WAIT_INTERVAL"
done
echo "[node] edge is reachable"
exec go run ./apps/node/cmd/node serve --config "$CONFIG_FILE"