watchcat: add nopingtime option + refactoring
[feed/packages.git] / utils / watchcat / files / initd_watchcat
index 213186063410a92ba2062be6377cc28d9e4f3d12..b34b50edae8a8291da98018b383aca6887d7d972 100644 (file)
@@ -25,43 +25,80 @@ timetoseconds() {
 
 load_watchcat() {
        config_get period       $1 period
-       config_get mode         $1 mode         "always"
-       config_get pinghosts    $1 pinghosts    "8.8.8.8"
+       config_get mode         $1 mode
+       config_get pinghosts    $1 pinghosts
        config_get pingperiod   $1 pingperiod
-       config_get forcedelay   $1 forcedelay   "0"
-
+       config_get nopingtime   $1 nopingtime
+       config_get forcedelay   $1 forcedelay
+       
+       local nopingtime_dflt="900"
+       local forcedelay_dflt="60"
+       
        # Fix potential typo in mode (backward compatibility).
        [ "$mode" = "allways" ] && mode="always"
 
        error=""
-
-       timetoseconds "$period"
-       period="$seconds"
-       [ "$period" -ge 1 ] \
-               || append_string "error" 'period is not a valid time value (ex: "30"; "4m"; "6h"; "2d")' "; "
+       warn=""
+       
+       if [ -z "$period" ] 
+       then
+               append_string "error" "period is not set! Use time value(ex: '30'; '4m'; '6h'; '2d')." "; "     
+       else
+               timetoseconds "$period";period="$seconds"       
+               [ "$period" -ge 1 ] \
+                       || append_string "error" "period has invalid format! Use time value(ex: '30'; '4m'; '6h'; '2d')" "; "   
+       fi
+       
        [ "$mode" = "always" -o "$mode" = "ping" ] \
-               || append_string "error" "mode must be 'always' or 'ping'" "; "
-       [ -n "$pinghosts" -o "$mode" = "always" ] \
-               || append_string "error" "pinghosts must be set when in 'ping' mode" "; "
-       [ "$mode" = "ping" ] && {
-               if [ -n "$pingperiod" ]
+               || append_string "error" "mode must be 'always' or 'ping'" "; " 
+       
+       if [ -z "$forcedelay" ]
+       then
+               forcedelay="$forcedelay_dflt"           
+               append_string "warn" "forcedelay is not configured! Defaulted to $forcedelay seconds" "; "              
+       else
+               [ "$forcedelay" -ge 0 ] || {
+                       forcedelay="$forcedelay_dflt"           
+                       append_string "warn" "forcedelay is invalid! Defaulted to $forcedelay seconds" "; "             
+               }
+       fi
+       
+       [ -z "$error" -a "$mode" = "ping" ] && {                        
+               [ -z "$pinghosts" ] \
+                       && append_string "error" "pinghosts must be set in 'ping' mode! Use space separated address list (ex: '8.8.8.8 9.9.9.9')" "; "
+       
+               if [ -z "$nopingtime" ]
+               then
+                       nopingtime="$nopingtime_dflt"
+                       append_string "warn" "nopingtime is not configured! Defaulted to $nopingtime seconds" "; "                      
+               else
+                       timetoseconds "$nopingtime";nopingtime="$seconds"
+                       [ "$nopingtime" -ge 0 ] || {
+                               nopingtime="$nopingtime_dflt"
+                               append_string "warn" "nopingtime invalid format! Use time value(ex: '30'; '4m'; '6h'; '2d'). Defaulted to $nopingtime seconds" "; "
+                       }
+               fi
+               
+               local pingperiod_dflt="$((period/5))"
+                               
+               if [ -z "$pingperiod" ] 
                then
-                       timetoseconds "$pingperiod"
-                       pingperiod="$seconds"
-                       if [ "$pingperiod" -ge 0 ]
-                       then
-                               [ "$pingperiod" -lt "$period" ] \
-                                       || append_string "error" "pingperiod must be less than period" "; "
-                       else
-                               append_string "error" 'pingperiod is not a valid time value (ex: "30"; "4m"; "6h"; "2d")' "; "
-                       fi
+                       pingperiod="$pingperiod_dflt"
+                       append_string "warn" "pingperiod is not configured! Defaulted to $pingperiod seconds(1/5 of period)" "; "
                else
-                       pingperiod="$((period/20))"
+                       timetoseconds "$pingperiod";pingperiod="$seconds"
+                       [ "$pingperiod" -ge 0 -a "$pingperiod" -ge "$period" ] && {
+                               pingperiod="$pingperiod_dflt"
+                               append_string "warn" "pingperiod is invalid value(greater than period)! Defaulted to $pingperiod seconds(1/5 of period)" "; "
+                       }
+                       [ "$pingperiod" -ge 0 ] || {
+                               pingperiod="$pingperiod_dflt"                           
+                               append_string "warn" "pingperiod has invalid format! Use time value(ex: '30'; '4m'; '6h'; '2d'). Defaulted to $pingperiod seconds(1/5 of period)" "; "
+                       }                       
                fi
        }
-       [ "$forcedelay" -ge 0 ] \
-               || append_string "error" "forcedelay must be a integer greater or equal than 0, where 0 means disabled" "; "
-
+       
+       [ -n "$warn" ] && logger -p user.warn -t "watchcat" "$1: $warn"
        [ -n "$error" ] && { logger -p user.err -t "watchcat" "reboot program $1 not started - $error"; return; }
 
        if [ "$mode" = "always" ]
@@ -69,8 +106,8 @@ load_watchcat() {
                /usr/bin/watchcat.sh "always" "$period" "$forcedelay" &
                logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;forcedelay=$forcedelay)"
        else
-               /usr/bin/watchcat.sh "period" "$period" "$forcedelay" "$pinghosts" "$pingperiod" &
-               logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;pinghosts=$pinghosts;pingperiod=$pingperiod;forcedelay=$forcedelay)"
+               /usr/bin/watchcat.sh "ping" "$period" "$forcedelay" "$pinghosts" "$pingperiod" "$nopingtime" &
+               logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;pinghosts=$pinghosts;pingperiod=$pingperiod;forcedelay=$forcedelay;nopingtime=$nopingtime)"
        fi
 
        echo $! >> "${PIDFILE}.pids"