#!/usr/bin/env bash # ---- Functions _env_usage() { echo "Usage: $0 --config --pair " } get_tcp_port() { local start="$1" local end="$2" local port for ((port=start; port<=end; port++)); do if ! ss -ltn "sport = :$port" | grep -q ":$port"; then echo "$port" return 0 fi done echo "" return 1 } _extract_base_currency() { local s="$1" local rest local _prefix local base local _quote rest="${s#*:}" if [[ "$rest" == "$s" ]]; then echo "" return 1 fi IFS='-' read -r _prefix base _quote <<< "$rest" if [[ -z "$base" ]]; then echo "" return 1 fi echo "$base" } # Detect whether script is sourced _env_is_sourced() { [[ "${BASH_SOURCE[0]}" != "$0" ]] } pair_to_project_name() { local pair="$1" pair="${pair,,}" # lowercase pair="${pair//-/_}" # replace - with _ echo "$pair" } # ============================== CONFIG="" PAIR="" while [[ $# -gt 0 ]]; do case "$1" in --config) CONFIG="$2" shift 2 ;; --pair) PAIR="$2" shift 2 ;; -h|--help) _env_usage _env_is_sourced && return 0 || exit 0 ;; *) echo "Unknown argument: $1" >&2 _env_usage >&2 _env_is_sourced && return 1 || exit 1 ;; esac done if [[ -z "$CONFIG" ]]; then echo "Missing --config" >&2 _env_usage >&2 _env_is_sourced && return 1 || exit 1 fi if [[ -z "$PAIR" ]]; then echo "Missing --pair" >&2 _env_usage >&2 _env_is_sourced && return 1 || exit 1 fi if [[ ! -f "$CONFIG" ]]; then echo "Config file not found: $CONFIG" >&2 _env_is_sourced && return 1 || exit 1 fi required_commands="jq hjson" for cmd in ${required_commands}; do if ! command -v $cmd >/dev/null 2>&1; then echo "Error: $cmd is required but not installed" >&2 _env_is_sourced && return 1 || exit 1 fi done BOOK_VALUE="$(hjson -j "${CONFIG}" | jq -r '.book // empty' )" INST_A_VALUE="$(hjson -j "${CONFIG}" | jq -r --arg pair "$PAIR" '.pairs[$pair].INST_A // empty' )" INST_B_VALUE="$(hjson -j "${CONFIG}" | jq -r --arg pair "$PAIR" '.pairs[$pair].INST_B // empty' )" if [[ -z "$BOOK_VALUE" ]]; then echo "Missing .book in config: $CONFIG" >&2 _env_is_sourced && return 1 || exit 1 fi if [[ -z "$INST_A_VALUE" || -z "$INST_B_VALUE" ]]; then echo "Pair not found or incomplete: $PAIR" >&2 _env_is_sourced && return 1 || exit 1 fi export BOOK="$BOOK_VALUE" export INST_A="$INST_A_VALUE" export INST_B="$INST_B_VALUE" echo "BOOK=$BOOK" echo "INST_A=$INST_A" echo "INST_B=$INST_B" export DOCKER_PAIR_NAME="$(_extract_base_currency ${INST_A})-$(_extract_base_currency ${INST_B})" export PROJECT_NAME=$(pair_to_project_name "${DOCKER_PAIR_NAME}") export SP_QUANT_BOOK="${BOOK}" export SP_QUANT_INST_A="${INST_A}" export SP_QUANT_INST_B="${INST_B}" export CVTT_DOCKER_REGISTRY=cloud16.cvtt.vpn:5543 ###################################### export SP_QUANT_VERSION=2.3.5 ###################################### export SP_QUANT_APP_NAME=SPQ export SP_QUANT_LOG_DIR=/logs export SP_QUANT_LOG_FILE=%T.sp_quant.${DOCKER_PAIR_NAME}.log export SP_QUANT_ADD_ARGS= # CVTT settings export SP_QUANT_CONFIG_SERVICE=cloud16.cvtt.vpn:6789 export SP_QUANT_CONFIG_FILE=http://cloud16.cvtt.vpn:6789/apps/stat_pairs/stat_pair_quant export SP_QUANT_FGW_BASE_URL=http://cld32-tester.cvtt.vpn:23456 # Local settings export SP_QUANT_REST_HOST=$(hostname).cvtt.vpn export SP_QUANT_REST_PORT=$(get_tcp_port 52000 53000) # -------------------