naywatch: add naywatch
[feed/routing.git] / naywatch / files / naywatch.init
diff --git a/naywatch/files/naywatch.init b/naywatch/files/naywatch.init
new file mode 100644 (file)
index 0000000..ac39a99
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/sh /etc/rc.common
+
+USE_PROCD=1
+START=95
+STOP=01
+
+log() {
+    local msg="$1"
+    logger -t naywatch "$msg"
+}
+
+wait_for_network()
+{
+    ubus -t 15 wait_for network.interface.$1 2>/dev/null
+}
+
+boot()
+{
+    local _interfaces
+    config_load naywatch
+    config_get _interfaces general interface
+
+    for interface in $_interfaces; do
+        wait_for_network interface
+    done
+
+    rc_procd start_service
+}
+
+start_service() {
+    procd_open_instance
+
+    config_load naywatch
+    local _check_interval
+    local _watchdog_timeout
+    local _use_watchdog
+    local _save_logs
+    local _interfaces
+
+    config_get _check_interval general "check_interval"
+    config_get _watchdog_timeout general "watchdog_timeout"
+    config_get _use_watchdog general "use_watchdog"
+    config_get _save_logs general "save_logs"
+    config_get _interfaces general "interface"
+
+    procd_set_param command /usr/bin/naywatch "$_check_interval" "$_watchdog_timeout" "$_use_watchdog" "$_save_logs" "$_interfaces"
+
+    procd_set_param respawn 3600 15 0
+
+    procd_set_param stdout 1
+    procd_set_param stderr 1
+
+    procd_close_instance
+}
+
+stop_service() {
+    exec 3>&- # close file again
+    sync && wait
+}
+
+service_stopped() {
+    log "Naywatch Stopped!"
+    log "Handover Watchdog to procd again:"
+    ubus call system watchdog '{"magicclose":true,"stop":false}' > /dev/null
+}