Files
luci/applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js
Ivan Diaz c3946f1f9a luci-app-watchcat: allow multiple IP addresses in ping hosts field
The watchcat backend supports multiple hosts but the UI was limited to single entry. Changed datatype from 'host' to 'list(host)' to accept space-separated IP addresses.

Signed-off-by: Ivan Diaz <diaz.it@icloud.com>
2025-12-09 18:18:42 +01:00

125 lines
5.7 KiB
JavaScript

'use strict';
'require view';
'require form';
'require tools.widgets as widgets';
return view.extend({
render: function () {
let m, s, o;
m = new form.Map('watchcat',
_('Watchcat'),
_("Here you can set up several checks and actions to take in the event that a host becomes unreachable. \
Click the <b>Add</b> button at the bottom to set up more than one action."));
s = m.section(form.TypedSection, 'watchcat', _('Watchcat'), _('These rules will govern how this device reacts to network events.'));
s.anonymous = true;
s.addremove = true;
s.tab('general', _('General Settings'));
o = s.taboption('general', form.ListValue, 'mode',
_('Mode'),
_("Ping Reboot: Reboot this device if a ping to a specified host fails for a specified duration of time. <br /> \
Periodic Reboot: Reboot this device after a specified interval of time. <br /> \
Restart Interface: Restart a network interface if a ping to a specified host fails for a specified duration of time. <br />\
Run Script: Run a script if a ping to a specified host fails for a specified duration of time. <br />"));
o.value('ping_reboot', _('Ping Reboot'));
o.value('periodic_reboot', _('Periodic Reboot'));
o.value('restart_iface', _('Restart Interface'));
o.value('run_script', _('Run Script'));
o = s.taboption('general', form.Value, 'script',
_('Script to run'),
_(`Script to run when the host has not responded for the specified duration of time. The script is passed the interface name as $1`));
o.datatype = 'file';
o.default = "/etc/watchcat.user.sh";
o.depends({ mode: "run_script" });
o = s.taboption('general', form.Value, 'period',
_('Period'),
_("In Periodic Reboot mode, it defines how often to reboot. <br /> \
In Ping Reboot mode, it defines the longest period of \
time without a reply from the Host To Check before a reboot is engaged. <br /> \
In Network Restart or Run Script mode, it defines the longest period of \
time without a reply from the Host to Check before the interface is restarted or the script is run. \
<br /><br />The default unit is seconds, without a suffix, but you can use the \
suffix <b>m</b> for minutes, <b>h</b> for hours or <b>d</b> \
for days. <br /><br />Examples:<ul><li>10 seconds would be: <b>10</b> or <b>10s</b></li><li>5 minutes would be: <b>5m</b></li><li> \
1 hour would be: <b>1h</b></li><li>1 week would be: <b>7d</b></li><ul>"));
o.default = '6h';
o = s.taboption('general', form.Value, 'pinghosts', _('Host To Check'), _(`IP addresses or hostnames to ping.`));
o.datatype = 'list(host)';
o.default = '8.8.8.8 1.1.1.1';
o.depends({ mode: "ping_reboot" });
o.depends({ mode: "restart_iface" });
o.depends({ mode: "run_script" });
o = s.taboption('general', form.ListValue, 'addressfamily',
_('Address family for pinging the host'));
o.default = 'any';
o.depends({ mode: 'ping_reboot' });
o.depends({ mode: 'restart_iface' });
o.depends({ mode: "run_script" });
o.value('any', _('Any'));
o.value('ipv4');
o.value('ipv6');
o = s.taboption('general', form.Value, 'pingperiod',
_('Check Interval'),
_("How often to ping the host specified above. \
<br /><br />The default unit is seconds, without a suffix, but you can use the suffix <b>m</b> for minutes, <b>h</b> for hours or <b>d</b> for days. <br /><br /> \
Examples:<ul><li>10 seconds would be: <b>10</b> or <b>10s</b></li><li>5 minutes would be: <b>5m</b></li><li>1 hour would be: <b>1h</b></li><li>1 week would be: <b>7d</b></li><ul>"));
o.default = '30s';
o.depends({ mode: "ping_reboot" });
o.depends({ mode: "restart_iface" });
o.depends({ mode: "run_script" });
o = s.taboption('general', form.ListValue, 'pingsize',
_('Ping Packet Size'));
o.value('small', _('Small: 1 byte'));
o.value('windows', _('Windows: 32 bytes'));
o.value('standard', _('Standard: 56 bytes'));
o.value('big', _('Big: 248 bytes'));
o.value('huge', _('Huge: 1492 bytes'));
o.value('jumbo', _('Jumbo: 9000 bytes'));
o.default = 'standard';
o.depends({ mode: 'ping_reboot' });
o.depends({ mode: 'restart_iface' });
o.depends({ mode: "run_script" });
o = s.taboption('general', form.Value, 'forcedelay',
_('Force Reboot Delay'),
_("<i>Applies to Ping Reboot and Periodic Reboot modes</i> <br /> When rebooting the router, the service will trigger a soft reboot. \
Entering a non-zero value here will trigger a delayed hard reboot if the soft reboot were to fail. \
Enter the number of seconds to wait for the soft reboot to fail or use 0 to disable the forced reboot delay."));
o.default = '1m';
o.depends({ mode: 'ping_reboot' });
o.depends({ mode: 'periodic_reboot' });
o = s.taboption('general', widgets.DeviceSelect, 'interface',
_('Interface'),
_('Interface to monitor and/or restart'),
_('<i>Applies to Ping Reboot, Restart Interface, and Run Script modes</i> <br /> Specify the interface to monitor and react if a ping over it fails.'));
o.depends({ mode: 'ping_reboot' });
o.depends({ mode: 'restart_iface' });
o.depends({ mode: 'run_script' });
o = s.taboption('general', widgets.NetworkSelect, 'mmifacename',
_('Name of ModemManager Interface'),
_("<i>Applies to Ping Reboot and Restart Interface modes</i> <br /> If using ModemManager, \
you can have Watchcat restart your ModemManager interface by specifying its name."));
o.depends({ mode: 'restart_iface' });
o.optional = true;
o = s.taboption('general', form.Flag, 'unlockbands',
_('Unlock Modem Bands'),
_('If using ModemManager, then before restarting the interface, set the modem to be allowed to use any band.'));
o.default = '0';
o.depends({ mode: 'restart_iface' });
return m.render();
}
});