1
0
Fork 0
mirror of https://github.com/sdr-enthusiasts/docker-adsb-ultrafeeder.git synced 2024-12-04 19:50:10 +00:00
docker-adsb-ultrafeeder/rootfs/scripts/interpret_ultrafeeder_config
Matthias Wirth 031c3cf7f6 move adsb.lol station map check out of interpret_ultrafeeder_config
this script is sourced by multiple scripts and we only need to do show
the station map URL once

also curl has long maximum timeouts which can block important services
from starting up if there is an issue with adsb.lol or the network / DNS
2024-11-10 18:15:59 +01:00

157 lines
7.6 KiB
Text
Executable file

#!/command/with-contenv bash
# shellcheck shell=bash disable=SC2015,SC2154
#
# This scripts should be sourced by the /etc/services.d/xxx/run modules for
# readsb, mlat-client, and mlathub. It interprets the ULTRAFEEDER_CONFIG / ULTRAFEEDER_NET_CONNECTOR parameter
# and makes individual net-connector strings available for these three modules.
#
#---------------------------------------------------------------------------------------------
# Copyright (C) 2023-2024, Ramon F. Kolb (kx1t) and contributors
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>.
#---------------------------------------------------------------------------------------------
#
# Note:
# ULTRAFEEDER_CONFIG and ULTRAFEEDER_NET_CONNECTOR can be used interchangeably
# If both are defined, they will be considered jointly.
#
# Format:
# ULTRAFEEDER_CONFIG=adsb,host,port,protocol[,uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX][,extra-arguments]
# ULTRAFEEDER_CONFIG=mlat,host,port[,return_port][,uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX][,extra-arguments]
# ULTRAFEEDER_CONFIG=mlathub,host,port,protocol[,uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX][,extra-arguments]
#
# The ULTRAFEEDER_CONFIG parameter can have multiple config strings, separated by a `;`
# Please note that the config strings cannot contain `;` or `,` -- undefined things may happen if these characters are present.
#
# In the above configuration strings:
# `host` is an IP address. Specify an IP/hostname/containername for incoming or outgoing connections.
# `port` is a TCP port number
# `protocol` can be one of the following:
# `beast_reduce_out`: Beast-format output with lower data throughput (saves bandwidth and CPU)
# `beast_reduce_plus_out`: Beast-format output with extra data (UUID). This is the preferred format when feeding the "new" aggregator services
# `beast_out`: Beast-format output
# `beast_in`: Beast-format input
# `raw_out`: Raw output
# `raw_in`: Raw input
# `sbs_out`: SBS-format output
# `vrs_out`: SBS-format output
# `uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX` is an optional parameter that sets the UUID for this specific instance.
# It will override the global `UUID` parameter. This is only needed when you want to send different UUIDs to different aggregators.
# `input_connect=host:port is an optional parameter that sets the input_connect values for this instance`
# `lat=xxxx` is an optional parameter that sets the latitude for this specific instance
# `lon=xxxx` is an optional parameter that sets the longitude for this specific instance
# `alt=xxxx` is an optional parameter that sets the altitude for this specific instance
# `extra-arguments` can be any additional command line argument you want to pass to readsb, mlathub, or mlat-client
# Example: `--net-only`. Please make sure to only once pass in an extra argument for each of the adsb|mlat|mlathub service.
# Do some prep work:
# combine ULTRAFEEDER_CONFIG and ULTRAFEEDER_NET_CONNECTOR
ULTRAFEEDER_CONFIG="${ULTRAFEEDER_CONFIG}${ULTRAFEEDER_CONFIG:+;}${ULTRAFEEDER_NET_CONNECTOR}"
# remove any newlines:
ULTRAFEEDER_CONFIG="${ULTRAFEEDER_CONFIG//$'\n'/}"
# Strip any extraneous spaces:
ULTRAFEEDER_CONFIG="${ULTRAFEEDER_CONFIG#"${ULTRAFEEDER_CONFIG%%[![:space:]]*}"}" # strip leading space
ULTRAFEEDER_CONFIG="${ULTRAFEEDER_CONFIG//; /;}"
# Now read each entry and parse it:
READSB_CONF_ARR=()
MLATHUB_CONF_ARR=()
readarray -td ";" configs < <(printf '%s' "${ULTRAFEEDER_CONFIG}")
# Now loop through the MLAT_CONFIG items and start up an Mlat_client for each of them:
for instance in "${configs[@]}"
do
[[ -z "${instance}" ]] && continue || true
# put individual params into the $params array:
readarray -td "," param < <(printf '%s' "${instance}")
# Process based on parameter string type in param[0]:
param[0]="${param[0],,}"
case "${param[0]}" in
adsb)
# parse arguments for main readsb
# build net-connector string into $readsb_str
# and add any extra arguments in as individual entries into READSB_CONF_ARR()
readsb_str="${param[1]},${param[2]},${param[3]}"
for ((i=4; i<${#param[*]}; i++))
do
if [[ "${param[i]:0:5}" == "uuid=" ]]; then
readsb_str="${readsb_str},${param[i]}"
elif [[ -n "${param[i]}" ]]; then
READSB_CONF_ARR+=("${param[i]}")
fi
done
# Now add $readsb_str to the READSB_CONF_ARR() as --net-connector argument:
READSB_CONF_ARR+=("--net-connector=${readsb_str}")
;;
mlat)
# parse arguments for the individual MLAT clients.
# In this case, the mlat-client run module will interpret everything
# as long as it is in the MLAT_CONFIG parameter. So we'll just add that here.
MLAT_CONFIG="${MLAT_CONFIG}${MLAT_CONFIG:+;}${instance#*,}"
;;
mlathub)
# parse arguments for mlat_hub
# build net-connector string into $readsb_str
# and add any extra arguments in as individual entries into MLATHUB_CONF_STR()
mlathub_str="${param[1]},${param[2]},${param[3]}"
for ((i=4; i<${#param[*]}; i++))
do
if [[ "${param[i]:0:5}" == "uuid=" ]]; then
mlathub_str="${readsb_str},${param[i]}"
elif [[ -n "${param[i]}" ]]; then
MLATHUB_CONF_ARR+=("${param[i]}")
fi
done
# Now add $readsb_str to the READSB_CONF_STR as --net-connector argument:
MLATHUB_CONF_ARR+=("--net-connector=${mlathub_str}")
;;
gpsd)
# add gpsd_in parameter to $READSB_CONF_ARR
readsb_str="${param[1]},${param[2]}"
if [[ -n "${param[3]}" ]] && [[ -n "${param[4]}" ]]; then
readsb_str="$readsb_str,${param[3]},${param[4]}"
fi
READSB_CONF_ARR+=("--net-connector=${readsb_str},gpsd_in")
;;
*)
# Check if there's anything in ${ULTRAFEEDER_NET_CONNECTOR} -- if not, it's a bad config element. If yes, add it as if it were ADSB
if [[ -z "${ULTRAFEEDER_NET_CONNECTOR}" ]]; then
echo "[$(date)][${APPNAME}] Warning: skipping unknown ULTRAFEEDER_CONFIG config element \"${instance}\""
else
# parse arguments for main readsb
# build net-connector string into $readsb_str
# and add any extra arguments in as individual entries into READSB_CONF_ARR()
readsb_str="${param[0]},${param[1]},${param[2]}"
for ((i=3; i<${#param[*]}; i++))
do
if [[ "${param[i]:0:5}" == "uuid=" ]]; then
readsb_str="${readsb_str},${param[i]}"
elif [[ -n "${param[i]}" ]]; then
READSB_CONF_ARR+=("${param[i]}")
fi
done
# Now add $readsb_str to the READSB_CONF_ARR() as --net-connector argument:
READSB_CONF_ARR+=("--net-connector=${readsb_str}")
fi
esac
done