Skip to content

Commit

Permalink
feat(ns-plug): restart service if connection goes down
Browse files Browse the repository at this point in the history
Make sure that ns-plug always try to connect to the controller.
This fix will allow automatica re-connection in case
of disaster recovery of the remote controller.

#978
  • Loading branch information
stephdl authored Jan 10, 2025
1 parent 27ecb48 commit 15229b4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
1 change: 1 addition & 0 deletions packages/ns-plug/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ define Package/ns-plug/install
$(INSTALL_DIR) $(1)/usr/libexec/mwan-hooks
$(INSTALL_BIN) ./files/ns-plug.init $(1)/etc/init.d/ns-plug
$(INSTALL_BIN) ./files/ns-plug $(1)/usr/sbin/ns-plug
$(INSTALL_BIN) ./files/restart-ns-plug $(1)/usr/libexec/restart-ns-plug
$(INSTALL_BIN) ./files/distfeed-setup $(1)/usr/sbin/distfeed-setup
$(INSTALL_BIN) ./files/remote-backup $(1)/usr/sbin
$(INSTALL_BIN) ./files/send-backup $(1)/usr/sbin
Expand Down
15 changes: 5 additions & 10 deletions packages/ns-plug/files/ns-plug
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,11 @@ fi

# Register the server
valid=0
max_attempts=30 # 60 seconds
watchdog=0
response=""
until [ "${valid}" -eq 1 ] || [ "${watchdog}" -ge "${max_attempts}" ]
until [ "${valid}" -eq 1 ]
do
response=$(curl ${curl_opts} -H "Content-Type: application/json" -H "RegistrationToken: ${token}" ${server}/api/units/register -X POST --data '{"unit_id": "'${unit_id}'", "username": "'${user}'", "password": "'${secret}'", "unit_name": "'${unit_name}'", "version": "'${VERSION_ID}'", "subscription_type": "'${subscription_type}'", "system_id": "'${system_id}'"}')
http_code=$(echo ${response} | jq -r .code)
http_code=$(echo ${response} | jq -r '.code // empty')
if [ "${http_code}" == "409" ]; then
# Duplicate entry, cleanup uci config
uci delete rpcd.controller
Expand All @@ -82,15 +80,11 @@ do
elif [ "${http_code}" == "200" ]; then
valid=1
else
sleep 2 # wait for controller to be reacheable
watchdog=$(( watchdog + 1 ))
logger -t ns-plug "Connection failed. Waiting for the controller ..."
sleep 5 # wait for controller to be reacheable
fi
done

if [ "${watchdog}" -ge "${max_attempts}" ]; then
exit 5
fi

# Save the new password after successfull registration
uci set rpcd.controller.password=${passwd}
uci commit rpcd
Expand All @@ -112,6 +106,7 @@ dev tun-nsplug
tls-client
script-security 2
route-up /usr/sbin/ns-controller-push-info
down "/usr/libexec/restart-ns-plug"
<ca>
${ca}
</ca>
Expand Down
21 changes: 21 additions & 0 deletions packages/ns-plug/files/restart-ns-plug
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

#
# Copyright (C) 2024 Nethesis S.r.l.
# SPDX-License-Identifier: GPL-2.0-only
#

# Restart the ns-plug service when tun-nsplug goes down

# the service can take a while to stop
if /etc/init.d/ns-plug status ; then
sleep 30
fi

# Check if the service is NOT running
if ! /etc/init.d/ns-plug status ; then
exit 0
fi

# Restart the service
/etc/init.d/ns-plug restart

0 comments on commit 15229b4

Please sign in to comment.