1#!/bin/sh 2 3. ${STREAMBOOST_CFGDIR:-/etc/appflow}/rc.appflow 4 5# 6# Environment config 7# 8BINARY="sbsaved" 9NAME=${BINARY} 10DISPLAY_NAME="Persistence Daemon" 11STOP_IS_BLOCKING=yes 12 13# 14# config 15# 16# path to binary 17SAVED_BIN="${BINDIR}/${BINARY}" 18 19# path to pid file 20PIDFILE="${RUNDIR}/${BINARY}.pid" 21 22# path to nodedb save file 23SAVEFILE="/usr/lib/sbsaved/sb.redis" 24 25# Redis server port 26PORT=6379 27 28# event persistence settings 29STATSFILE="${RUNDIR}/stats.redis" 30STATSTREE='eventdb:*' 31 32# Format the command line parameters 33CMDLINE_OPTS="--daemon -o ${PORT} -p ${PIDFILE} -f ${SAVEFILE} --persist-data ${STATSFILE} ${STATSTREE}" 34 35 36# 37# Functions 38# 39 40set_default_max_zone_id() { 41 . $STREAMBOOST_USER_CFG 42 43 # note, zone ids are 0-based. 44 # default to 3 but override based on system and user config 45 local max=3 46 47 if [ -n "${max_zone_id}" ]; then 48 max="${max_zone_id}" 49 elif nss_qdisc_is_installed && [ "${nss_qdisc}" = "yes" ]; then 50 max=1 51 fi 52 53 redis-cli set "settings:max_zone_id" "${max}" >/dev/null 54} 55 56set_defaults() { 57 # setup sbsaved config for nodedb 58 redis-cli sadd settings:saved:channels "nodeevent.*" 59 redis-cli sadd settings:saved:keypats "nodedb:mac:%s:type" 60 redis-cli sadd settings:saved:keypats "nodedb:mac:%s:detection_finished" 61 redis-cli sadd settings:saved:keypats "nodedb:mac:%s:uidata" 62 redis-cli sadd settings:saved:keypats "nodedb:mac:%s:zone" 63 redis-cli set settings:saved:keyset "nodedb:nodeset" 64 65 # check zone config. if any values are missing, supply defaults. 66 if [ $(redis-cli exists "settings:max_zone_id") = "0" ]; then 67 set_default_max_zone_id 68 fi 69 # a default zone config is required 70 local zkey="settings:zone:0" 71 if [ $(redis-cli exists "${zkey}") = "0" ]; then 72 redis-cli hset "${zkey}" "weight:up" 10000 73 redis-cli hset "${zkey}" "weight:down" 10000 74 else 75 if [ $(redis-cli hexists "${zkey}" "weight:up") = "0" ]; then 76 redis-cli hset "${zkey}" "weight:up" 10000 77 fi 78 if [ $(redis-cli hexists "${zkey}" "weight:down") = "0" ]; then 79 redis-cli hset "${zkey}" "weight:down" 10000 80 fi 81 fi 82} 83 84start() { 85 # restore generic data to redis 86 sh /etc/appflow/persistence.sh restore 87 88 # add default values to redis 89 set_defaults 90 91 # restore nodedb to redis 92 [ -e "${SAVEFILE}" ] && redis-cli --pipe < "${SAVEFILE}" 93 94 [ ! -d "${RUNDIR}" ] && { 95 mkdir ${RUNDIR} 96 } 97 98 [ -x ${SAVED_BIN} ] || { 99 echo "${BINARY} not found: ${SAVED_BIN}" 100 exit 2 101 } 102 103 echo -n "Starting ${NAME}: " 104 ${SAVED_BIN} ${CMDLINE_OPTS} "$@" 105 retval=$? 106 echo 107 return ${retval} 108} 109 110boot() { 111 mkdir -p /usr/lib/sbsaved 112 start "$@" 113} 114 115stop() { 116 [ -f "${PIDFILE}" ] && sh /etc/appflow/persistence.sh persist 117 default_stop 118} 119 120action "$@" 121exit $? 122