#!/usr/bin/env bash set -euo pipefail HOST="" REMOTE_ROOT="/opt/lingniu-go-native" usage() { cat <<'USAGE' Usage: scripts/install-fields-projector-service.sh --host root@115.29.187.205 [--remote-root DIR] Prepares the Kafka RAW-to-fields projector service. It does not disable the legacy bridge projection; switch BRIDGE_DERIVE_FIELDS_FROM_RAW_ENABLED only after the new consumer has started and its offsets are established. USAGE } while [[ $# -gt 0 ]]; do case "$1" in --host) HOST="${2:-}" shift 2 ;; --remote-root) REMOTE_ROOT="${2:-}" shift 2 ;; -h|--help) usage exit 0 ;; *) echo "unknown argument: $1" >&2 usage >&2 exit 2 ;; esac done if [[ -z "$HOST" ]]; then echo "--host is required" >&2 exit 2 fi ssh "$HOST" "REMOTE_ROOT='$REMOTE_ROOT' bash -s" <<'REMOTE' set -euo pipefail env_dir="${REMOTE_ROOT}/env" projector_env="${env_dir}/fields-projector.env" unit="/etc/systemd/system/lingniu-go-fields-projector.service" mkdir -p "${env_dir}" cat >"${projector_env}" <<'ENV' FIELDS_PROJECTOR_GROUP_PREFIX=vehicle-fields-projector-v1 KAFKA_START_OFFSET=last FIELDS_PROJECTOR_WORKERS_PER_PROTOCOL=1 FIELDS_PROJECTOR_BATCH_SIZE=500 FIELDS_PROJECTOR_BATCH_WAIT_MS=20 FIELDS_PROJECTOR_OPERATION_TIMEOUT_MS=30000 FIELDS_PROJECTOR_RETRY_DELAY_MS=500 HEALTH_ADDR=127.0.0.1:20218 ENV chmod 0640 "${projector_env}" cat >"${unit}" <