mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-03-07 09:50:50 +01:00
164 lines
3.4 KiB
Bash
164 lines
3.4 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
|
|
START=65
|
|
STOP=10
|
|
|
|
USE_PROCD=1
|
|
PROG=/usr/sbin/bbfdmd
|
|
|
|
BBFDM_JSON_INPUT="/etc/bbfdm/input.json"
|
|
BBFDM_MICROSERVICE_DIR="/etc/bbfdm/micro_services"
|
|
BBFDM_TEMP_DIR="/tmp/bbfdm"
|
|
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
log() {
|
|
echo "${@}"|logger -t bbfdmd.init -p info
|
|
}
|
|
|
|
validate_bbfdm_bbfdmd_section()
|
|
{
|
|
uci_validate_section bbfdm bbfdmd "bbfdmd" \
|
|
'enable:bool:true' \
|
|
'sock:string' \
|
|
'debug:bool:false' \
|
|
'loglevel:uinteger:1' \
|
|
'refresh_time:uinteger:0' \
|
|
'transaction_timeout:uinteger:30' \
|
|
'subprocess_level:uinteger'
|
|
}
|
|
|
|
validate_bbfdm_micro_service_section()
|
|
{
|
|
uci_validate_section bbfdm micro_services "micro_services" \
|
|
'enable:bool:true' \
|
|
'enable_core:bool:false' \
|
|
'enable_respawn:bool:true'
|
|
}
|
|
|
|
bbfdm_add_micro_service()
|
|
{
|
|
local name path cmd
|
|
local enable enable_core enable_respawn
|
|
|
|
validate_bbfdm_micro_service_section || {
|
|
log "Validation of micro_service section failed"
|
|
return 1;
|
|
}
|
|
|
|
[ "${enable}" -eq "0" ] && return 0
|
|
|
|
path="${1}"
|
|
name="$(basename ${path})"
|
|
name="${name//.json}"
|
|
|
|
json_init
|
|
json_add_string name "bbfdm.services"
|
|
json_add_object "instances"
|
|
json_add_object "${name}"
|
|
json_add_array "command"
|
|
json_add_string "" "${PROG}"
|
|
json_add_string "" "-m"
|
|
json_add_string "" "${path}"
|
|
json_close_array
|
|
|
|
if [ "${enable_core}" -eq "1" ]; then
|
|
json_add_object "limits"
|
|
json_add_string "core" "unlimited"
|
|
json_close_object
|
|
json_add_boolean "stdout" 1
|
|
json_add_boolean "stderr" 1
|
|
fi
|
|
|
|
if [ "${enable_respawn}" -eq "1" ]; then
|
|
json_add_array "respawn"
|
|
json_add_string "" "3600"
|
|
json_add_string "" "5"
|
|
json_add_string "" "5"
|
|
json_close_array
|
|
fi
|
|
json_close_object
|
|
json_close_object
|
|
|
|
cmd="$(json_dump)"
|
|
ubus call service add "${cmd}"
|
|
}
|
|
|
|
_add_microservice()
|
|
{
|
|
local enable loglevel input_json name
|
|
|
|
name="${1}"
|
|
input_json="$(jq -r '.daemon.input.name' ${name})"
|
|
|
|
if [ -f "${input_json}" ]; then
|
|
bbfdm_add_micro_service "${name}"
|
|
else
|
|
log "Input json [${input_json}] does not defined/present"
|
|
fi
|
|
|
|
}
|
|
|
|
configure_bbfdm_micro_services()
|
|
{
|
|
if [ -d "${BBFDM_MICROSERVICE_DIR}" ]; then
|
|
FILES="$(ls -1 ${BBFDM_MICROSERVICE_DIR}/*.json)"
|
|
|
|
for service in $FILES;
|
|
do
|
|
[ -e "$service" ] || continue
|
|
_add_microservice $service
|
|
done
|
|
fi
|
|
ubus call service state '{"name":"bbfdm.services", "spawn":true}'
|
|
}
|
|
|
|
configure_bbfdmd()
|
|
{
|
|
local enable debug sock
|
|
local jlog jrefresh jtimeout jlevel
|
|
|
|
config_load bbfdm
|
|
validate_bbfdm_bbfdmd_section || {
|
|
log "Validation of bbfdmd section failed"
|
|
return 1;
|
|
}
|
|
|
|
[ "${enable}" -eq 0 ] && return 0
|
|
|
|
if [ -f "${BBFDM_JSON_INPUT}" ]; then
|
|
echo "$(jq --arg log ${loglevel} --arg tran ${transaction_timeout} --arg refresh ${refresh_time} --arg level ${subprocess_level} '.daemon.config += {"loglevel": $log, "refresh_time": $refresh, "transaction_timeout": $tran, "subprocess_level": $level}' ${BBFDM_JSON_INPUT})" > "${BBFDM_TEMP_DIR}/input.json"
|
|
fi
|
|
|
|
procd_set_param command ${PROG}
|
|
if [ "${debug}" -eq 1 ]; then
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
fi
|
|
|
|
if [ -f "${sock}" ]; then
|
|
procd_append_param command -s "${sock}"
|
|
fi
|
|
}
|
|
|
|
start_service()
|
|
{
|
|
mkdir -p ${BBFDM_TEMP_DIR}
|
|
|
|
configure_bbfdm_micro_services
|
|
|
|
procd_open_instance "bbfdm"
|
|
configure_bbfdmd
|
|
procd_set_param respawn
|
|
procd_close_instance "bbfdm"
|
|
}
|
|
|
|
stop_service()
|
|
{
|
|
ubus call service delete '{"name":"bbfdm.services"}'
|
|
}
|
|
|
|
service_triggers()
|
|
{
|
|
procd_add_reload_trigger "bbfdm"
|
|
}
|