#!/bin/sh QPKG_INSTALL_PATH=`/sbin/getcfg -f /etc/config/qpkg.conf CloudLink Install_Path` # change dir to avoid no cwd error cd $QPKG_INSTALL_PATH # files to montir ULINUX_CONFIG_FILE=/etc/config/uLinux.conf QCLOUD_CONFIG_FILE=/etc/config/qid.conf FILES_TO_MONITOR="$ULINUX_CONFIG_FILE $QCLOUD_CONFIG_FILE" # get current QID_STATUS & VLINK_STATUS QID_STATUS=`/sbin/getcfg -f $QCLOUD_CONFIG_FILE "QNAP ID Service" STATUS -d ""` VLINK_STATUS=`/sbin/getcfg -f $QCLOUD_CONFIG_FILE "QNAP VLink Service" STATUS -d Disable` OLD_QID_STATUS=$QID_STATUS OLD_VLINK_STATUS=$VLINK_STATUS # get current web config WEB_ACCESS_PORT=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "Web Access Port" -d "8080"` SECURE_WEB_ACCESS_PORT=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "Stunnel" "Port" -d "443"` FORCE_SSL=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "Force SSL" -d "0"` REGION=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "REGION" -d ""` print_web_config() { echo "current web config: port=$WEB_ACCESS_PORT, \ secure_port: $SECURE_WEB_ACCESS_PORT, force_ssl: $FORCE_SSL, \ region: $REGION" } get_qid_vlink_status() { # get sign-in status QID_STATUS=`/sbin/getcfg -f $QCLOUD_CONFIG_FILE "QNAP ID Service" STATUS -d ""` # get vlink enabled VLINK_STATUS=`/sbin/getcfg -f $QCLOUD_CONFIG_FILE "QNAP VLink Service" STATUS -d Disable` } operate_agents() { echo "$1 tunnel agent" $QPKG_INSTALL_PATH/bin/tunnel_agent_ctl.sh $1 daemon } check_config() { # if sign-in & cloudlink enabled, try to start tunnel_agent if [ "$QID_STATUS" == "3" ] && [ "$VLINK_STATUS" == "Enable" ]; then # get web config NEW_WEB_ACCESS_PORT=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "Web Access Port" -d "8080"` NEW_SECURE_WEB_ACCESS_PORT=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "Stunnel" "Port" -d "443"` NEW_FORCE_SSL=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "Force SSL" -d "0"` NEW_REGION=`/sbin/getcfg -f $ULINUX_CONFIG_FILE "System" "REGION" -d ""` # if web config is different, try to stop & start if [ "$WEB_ACCESS_PORT" != "$NEW_WEB_ACCESS_PORT" ] || \ [ "$SECURE_WEB_ACCESS_PORT" != "$NEW_SECURE_WEB_ACCESS_PORT" ] || \ [ "$FORCE_SSL" != "$NEW_FORCE_SSL" ] || \ [ "$REGION" != "$NEW_REGION" ] || \ [ "$OLD_QID_STATUS" != "$QID_STATUS" ] || \ [ "$OLD_VLINK_STATUS" != "$VLINK_STATUS" ]; then # log echo "stop tunnel agent" # store config WEB_ACCESS_PORT=$NEW_WEB_ACCESS_PORT SECURE_WEB_ACCESS_PORT=$NEW_SECURE_WEB_ACCESS_PORT FORCE_SSL=$NEW_FORCE_SSL REGION=$NEW_REGION # stop for restart operate_agents stop # print current config print_web_config # start agent operate_agents start fi else operate_agents stop fi } flush_analytic_data_when_necessary() { TIMESTAMP=`date +%s` # check analytic tool if [ ! -x '/usr/local/bin/qanalytic_tool' ]; then return fi # check timestamp if [ "y$NEXT_TIMESTAMP" == "y" ]; then NEXT_TIMESTAMP=`expr $TIMESTAMP + 43200 + $RANDOM % 43200` return fi if [ $TIMESTAMP -lt $NEXT_TIMESTAMP ]; then return fi # flush /usr/local/bin/qanalytic_tool flush -p myqnapcloud > /dev/null 2>&1 # update last timestamp NEXT_TIMESTAMP=`expr $TIMESTAMP + 43200 + $RANDOM % 43200` } # print current config print_web_config # start monitoring # not use -m here to avoid gettings a lot of events when star/stop agent echo "start monitoring $FILES_TO_MONITOR ..." while true do FILE_MODIFIED=`/usr/sbin/inotifywait -e close_write -e create -e delete_self -e moved_to --format '%w' -t 600 $FILES_TO_MONITOR` # check if got event if [ "$?" != "0" ]; then flush_analytic_data_when_necessary continue fi # not know why, if get empty, it's uLinux if [ "$FILE_MODIFIED" == "" ]; then FILE_MODIFIED=$ULINUX_CONFIG_FILE fi # log echo "$FILE_MODIFIED modified, check if need to restart tunnel agent..." # process depends on modified file get_qid_vlink_status check_config # a hack to fix the QC-2779 bug OLD_QID_STATUS=$QID_STATUS OLD_VLINK_STATUS=$VLINK_STATUS get_qid_vlink_status while [ "$OLD_QID_STATUS $OLD_VLINK_STATUS" != "$QID_STATUS $VLINK_STATUS" ]; do check_config OLD_QID_STATUS=$QID_STATUS OLD_VLINK_STATUS=$VLINK_STATUS get_qid_vlink_status done done