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