After hours spent trying to get netwatch to work for me I ended up writing my own failover script. Would be happy to hear peoples suggestions on what I have come up with.
https://gist.github.com/ilium007/5cbe63ce9a148746a7842c1dc55bb967
The script is configurable for the destination ping check address, the number of ping requests to send, the required % of successful responses, the responses must be below a configurable latency value and the script handles debounce (if required) on the down and up state changes.
The failover script is scheduled to run every 30 seconds.
NOTE: the route distance changes are commented out in the script to avoid causing any loss of connectivity until fully tested.
A successful run in the logs:
2025-04-26 19:43:21 script,info Failover Check: Ping seq=0 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=1 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=2 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=3 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=4 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=5 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=6 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=7 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=8 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=9 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=10 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=11 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=12 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=13 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: Ping seq=14 latency=133 ms - ALLOW
2025-04-26 19:43:21 script,info Failover Check: 15/15 successful pings (100%)
Forced latency in ICMP response causes WAN failover to secondary_route after 2 failed check cycles:
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=0 latency=114 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=1 latency=111 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,info Failover Check: Ping seq=2 latency=106 ms - ALLOW
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=3 latency=125 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=4 latency=127 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,info Failover Check: Ping seq=5 latency=69 ms - ALLOW
2025-04-26 19:49:21 script,info Failover Check: Ping seq=6 latency=86 ms - ALLOW
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=7 latency=116 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=8 latency=125 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=9 latency=119 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,info Failover Check: Ping seq=10 latency=76 ms - ALLOW
2025-04-26 19:49:21 script,info Failover Check: Ping seq=11 latency=71 ms - ALLOW
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=12 latency=113 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,warning Failover Check: Ping seq=13 latency=131 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:21 script,info Failover Check: Ping seq=14 latency=102 ms - ALLOW
2025-04-26 19:49:21 script,info Failover Check: 6/15 successful pings (40%)
2025-04-26 19:49:21 script,warning Failover Check: DOWN debounce in progress - 1/2 failures.
2025-04-26 19:49:39 script,info Failover Check: Ping seq=0 latency=92 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=1 latency=90 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=2 latency=100 ms - ALLOW
2025-04-26 19:49:39 script,warning Failover Check: Ping seq=3 latency=118 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:39 script,info Failover Check: Ping seq=4 latency=82 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=5 latency=93 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=6 latency=91 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=7 latency=92 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=8 latency=106 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=9 latency=88 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=10 latency=101 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: Ping seq=11 latency=104 ms - ALLOW
2025-04-26 19:49:39 script,warning Failover Check: Ping seq=12 latency=120 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:39 script,warning Failover Check: Ping seq=13 latency=122 ms EXCEEDS threshold (110 ms) - DISCARD
2025-04-26 19:49:39 script,info Failover Check: Ping seq=14 latency=81 ms - ALLOW
2025-04-26 19:49:39 script,info Failover Check: 12/15 successful pings (80%)
2025-04-26 19:49:39 script,warning Failover Check: Transitioned DOWN after 2 consecutive failures. Set distance=3.
WAN failover to primary_route after 3 successful check cycles:
2025-04-26 19:51:04 script,info Failover Check: Ping seq=0 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=1 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=2 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=3 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=4 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=5 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=6 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=7 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=8 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=9 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=10 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=11 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=12 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=13 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: Ping seq=14 latency=133 ms - ALLOW
2025-04-26 19:51:04 script,info Failover Check: 15/15 successful pings (100%)
2025-04-26 19:51:04 script,info Failover Check: UP debounce in progress - 1/3 successes.
2025-04-26 19:51:10 script,info Failover Check: Ping seq=0 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=1 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=2 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=3 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=4 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=5 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=6 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=7 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=8 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=9 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=10 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=11 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=12 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=13 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: Ping seq=14 latency=133 ms - ALLOW
2025-04-26 19:51:10 script,info Failover Check: 15/15 successful pings (100%)
2025-04-26 19:51:10 script,info Failover Check: UP debounce in progress - 2/3 successes.
2025-04-26 19:51:15 script,info Failover Check: Ping seq=0 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=1 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=2 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=3 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=4 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=5 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=6 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=7 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=8 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=9 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=10 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=11 latency=136 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=12 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=13 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: Ping seq=14 latency=133 ms - ALLOW
2025-04-26 19:51:15 script,info Failover Check: 15/15 successful pings (100%)
2025-04-26 19:51:15 script,info Failover Check: Transitioned UP after 3 consecutive successes. Set distance=1.
Let me know your thoughts.