'use strict';
'require form';
'require fs';
'require view';
const driver_path = '/lib/nut/';
const ups_daemon = '/usr/sbin/upsd';
return view.extend({
load: function() {
return Promise.all([
L.resolveDefault(fs.exec_direct('/usr/bin/ldd', [ups_daemon]), []).catch(function(err) {
throw new Error(_('Unable to run ldd: %s').format(err.message));
}).then(function(stdout) {
return stdout.includes('libssl.so');
}),
L.resolveDefault(fs.list(driver_path), []).then(function(entries) {
var files = [];
entries.forEach(object => {
if (object.type == 'file') {
files.push(object.name);
}
});
return files;
}),
])
},
render: function(loaded_promises) {
let m, s, o;
const have_ssl_support = loaded_promises[0];
const driver_list = loaded_promises[1];
m = new form.Map('nut_server', _('NUT Server'),
_('Network UPS Tools Server Configuration'));
// User settings
s = m.section(form.TypedSection, 'user', _('NUT Users'));
s.addremove = true;
s.anonymous = true;
o = s.option(form.Value, 'username', _('Username'));
o.optional = false;
o = s.option(form.Value, 'password', _('Password'));
o.password = true;
o.optional = false;
o = s.option(form.MultiValue, 'actions', _('Allowed actions'));
// o.widget = 'select'
o.value('set', _('Set variables'));
o.value('fsd', _('Forced Shutdown'));
o.optional = true;
o = s.option(form.DynamicList, 'instcmd', _('Instant commands'), _('Use %s to see full list of commands your UPS supports (requires %s package)'.format('upscmd -l', 'upscmd')));
o.optional = true;
o = s.option(form.ListValue, 'upsmon', _('Role'));
o.value('slave', _('Auxiliary'));
o.value('master', _('Primary'));
o.optional = false;
// Listen settings
s = m.section(form.TypedSection, 'listen_address', _('Addresses on which to listen'));
s.addremove = true;
s.anonymous = true;
o = s.option(form.Value, 'address', _('IP Address'));
o.optional = false;
o.datatype = 'ipaddr';
o.placeholder = '127.0.0.1';
o = s.option(form.Value, 'port', _('Port'));
o.optional = true;
o.datatype = 'port';
o.placeholder = '3493';
// Server global settings
s = m.section(form.NamedSection, 'upsd', 'upsd', _('UPS Server Global Settings'));
s.addremove = true;
o = s.option(form.Value, 'maxage', _('Maximum Age of Data'), _('Period after which data is considered stale'));
o.datatype = 'uinteger'
o.optional = true;
o.placeholder = 15;
o = s.option(form.Value, 'runas', _('RunAs User'), _('Drop privileges to this user'));
o.optional = true;
o.placeholder = 'nut'
o = s.option(form.Value, 'statepath', _('Path to state file'));
o.optional = true;
o.placeholder = '/var/run/nut'
o = s.option(form.Value, 'maxconn', _('Maximum connections'));
o.optional = true;
o.datatype = 'uinteger'
o.placeholder = 24;
if (have_ssl_support) {
o = s.option(form.Value, 'certfile', _('Certificate file (SSL)'));
o.optional = true;
}
// Drivers global settings
s = m.section(form.NamedSection, 'driver_global', 'driver_global', _('Driver Global Settings'));
s.addremove = true;
o = s.option(form.Value, 'chroot', _('chroot'), _('Run drivers in a chroot(2) environment'));
o.optional = true;
o = s.option(form.Value, 'driverpath', _('Driver Path'), _('Path to drivers (instead of default)'));
o.optional = true;
o.placeholder = '/lib/lnut';
o = s.option(form.Value, 'maxstartdelay', _('Maximum Start Delay'), _('Default for UPSes without this field.'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'maxretry', _('Maximum Retries'), _('Maximum number of times to try starting a driver.'));
o.optional = true;
o.placeholder = 1
o.datatype = 'uinteger';
o = s.option(form.Value, 'retrydelay', _('Retry Delay'), _('Time in seconds between driver start retry attempts.'));
o.optional = true;
o.placeholder = 5
o.datatype = 'uinteger';
o = s.option(form.Value, 'pollinterval', _('Poll Interval'), _('Maximum time in seconds between refresh of UPS status'));
o.optional = true;
o.placeholder = 2
o.datatype = 'uinteger';
o = s.option(form.Flag, 'synchronous', _('Synchronous Communication'), _('Driver waits for data to be consumed by upsd before publishing more.'));
o.optional = true;
o.default = false;
o = s.option(form.Value, 'user', _('RunAs User'), _('User as which to execute driver; requires device file accessed by driver to be read-write for that user.'));
o.optional = true;
o.placeholder = 'nut';
// Drivers
s = m.section(form.TypedSection, 'driver', _('Driver Configuration'),
_('The name of this section will be used as UPS name elsewhere'));
s.addremove = true;
s.anonymous = false;
o = s.option(form.Value, 'bus', _('USB Bus(es) (regex)'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'community', _('SNMP Community'));
o.optional = true;
o.placeholder = 'private';
o = s.option(form.Value, 'desc', _('Description (Display)'), _('This is passed through to the driver, so make sure your driver supports this option'));
o.optional = true;
o = s.option(form.ListValue, 'driver', _('Driver'),
_('If this list is empty you need to %s'.format('%s'.format(_('install drivers')))));
driver_list.forEach(driver => {
o.value(driver);
});
o.optional = false;
o = s.option(form.Flag, 'enable_usb_serial', _('Set USB serial port permissions'),
_('Enables a hotplug script that makes all ttyUSB devices (e.g. serial USB) group read-write as user %s'.format('nut')));
o.optional = true;
o.default = false;
o = s.option(form.Flag, 'ignorelb', _('Ignore Low Battery'));
o.optional = true;
o.default = false;
o = s.option(form.Flag, 'interruptonly', _('Interrupt Only'));
o.optional = true;
o.default = false;
o = s.option(form.Value, 'interruptsize', _('Interrupt Size'), _('Bytes to read from interrupt pipe'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'maxreport', _('Max USB HID Length Reported'), _('Workaround for buggy firmware'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'maxstartdelay', _('Maximum Start Delay'), _('Time in seconds that upsdrvctl will wait for driver to finish starting'));
o.optional = true;
o.datatype = 'uinteger';
o.placeholder = 45;
o = s.option(form.Value, 'mfr', _('Manufacturer (Display)'), _('This is passed through to the driver, so make sure your driver supports this option'));
o.optional = true;
o = s.option(form.Value, 'model', _('Model (Display)'), _('This is passed through to the driver, so make sure your driver supports this option'));
o.optional = true;
o = s.option(form.Flag, 'nolock', _('No Lock'), _('Do not lock port when starting driver'));
o.optional = true;
o.default = false;
o = s.option(form.Flag, 'notransferoids', _('No low/high voltage transfer OIDs'));
o.optional = true;
o.default = false;
o = s.option(form.Value, 'offdelay', _('Off Delay(s)'), _('Delay for kill power command'));
o.optional = true;
o.placeholder = 20;
// function o.validate(self, cfg, value);
// if n:cfgvalue(cfg) <= value then
// return nil
// end
// end
o = s.option(form.Value, 'ondelay', _('On Delay(s)'), _('Delay to power on UPS if power returns after kill power'));
o.optional = true;
o.placeholder = 30;
// function o.validate(self, cfg, value);
// if o.cfgvalue(cfg) >= value then
// return nil
// end
// end
o = s.option(form.Value, 'pollfreq', _('Polling Frequency(s)'));
o.optional = true;
o.datatype = 'integer';
o.placeholder = 30;
o = s.option(form.Value, 'port', _('Port'));
o.optional = false;
o.default = 'auto';
o = s.option(form.Value, 'product', _('Product (regex)'));
o.optional = true;
o = s.option(form.Value, 'productid', _('USB Product Id'));
o.optional = true;
o = s.option(form.Value, 'sdorder', _('Driver Shutdown Order'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'sdtime', _('Additional Shutdown Time(s)'));
o.optional = true;
o = s.option(form.Value, 'serial', _('Serial Number'), _('This is passed through to the driver, so make sure your driver supports this option'));
o.optional = true;
o = s.option(form.Value, 'snmp_retries', _('SNMP retries'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.Value, 'snmp_timeout', _('SNMP timeout(s)'));
o.optional = true;
o.datatype = 'uinteger';
o = s.option(form.ListValue, 'snmp_version', _('SNMP version'));
o.optional = true;
o.value('v1', _('SNMPv1'));
o.value('v2c', _('SNMPv2c'));
o.value('v3', _('SNMPv3'));
o.value('', '');
o.placeholder = ''
o = s.option(form.Value, 'vendor', _('Vendor (regex)'));
o.optional = true;
o = s.option(form.Value, 'vendorid', _('USB Vendor Id'));
o.optional = true;
o = s.option(form.Flag, 'synchronous', _('Synchronous Communication'), _('Driver waits for data to be consumed by upsd before publishing more.'));
o.optional = true;
o.default = false;
return m.render();
}
});