mirror of
https://github.com/openwrt/luci.git
synced 2025-02-07 06:59:54 +00:00
0a66188236
Signed-off-by: Paul Donald <newtwen@gmail.com>
186 lines
5.6 KiB
JavaScript
186 lines
5.6 KiB
JavaScript
'use strict';
|
|
'require view';
|
|
'require dom';
|
|
'require fs';
|
|
'require ui';
|
|
'require uci';
|
|
'require form';
|
|
|
|
return view.extend({
|
|
load: function() {
|
|
return Promise.all([
|
|
fs.list('/usr/lib/collectd'),
|
|
fs.list('/usr/share/luci/statistics/plugins'),
|
|
uci.load('luci_statistics')
|
|
]).then(function(data) {
|
|
var installed = data[0],
|
|
plugins = data[1],
|
|
tasks = [];
|
|
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
tasks.push(fs.read_direct('/usr/share/luci/statistics/plugins/' + plugins[i].name, 'json').then(L.bind(function(name, spec) {
|
|
return L.resolveDefault(L.require('view.statistics.plugins.' + name)).then(function(form) {
|
|
if (!uci.get('luci_statistics', 'collectd_' + name))
|
|
uci.add('luci_statistics', 'statistics', 'collectd_' + name);
|
|
|
|
return {
|
|
name: name,
|
|
spec: spec,
|
|
form: form,
|
|
installed: installed.filter(function(e) { return e.name == name + '.so' }).length > 0
|
|
};
|
|
});
|
|
}, this, plugins[i].name.replace(/\.json$/, ''))));
|
|
}
|
|
|
|
return Promise.all(tasks);
|
|
});
|
|
},
|
|
|
|
render: function(plugins) {
|
|
var m, s, o, enabled;
|
|
|
|
for (var i = 0; i < plugins.length; i++)
|
|
plugins[plugins[i].name] = plugins[i];
|
|
|
|
m = new form.Map('luci_statistics', _('Collectd Settings'));
|
|
m.tabbed = true;
|
|
|
|
s = m.section(form.NamedSection, 'collectd', 'statistics', _('Collectd Settings'));
|
|
|
|
o = s.option(form.Value, 'Hostname', _('Hostname'));
|
|
o.load = function() {
|
|
return fs.trimmed('/proc/sys/kernel/hostname').then(L.bind(function(name) {
|
|
this.placeholder = name;
|
|
return uci.get('luci_statistics', 'collectd', 'Hostname');
|
|
}, this));
|
|
};
|
|
|
|
o = s.option(form.Value, 'BaseDir', _('Base Directory'));
|
|
o.default = '/var/run/collectd';
|
|
|
|
o = s.option(form.Value, 'Include', _('Directory for sub-configurations'));
|
|
o.default = '/etc/collectd/conf.d/*.conf';
|
|
|
|
o = s.option(form.Value, 'PluginDir', _('Directory for collectd plugins'));
|
|
o.default = '/usr/lib/collectd/';
|
|
|
|
o = s.option(form.Value, 'PIDFile', _('Used PID file'));
|
|
o.default = '/var/run/collectd.pid';
|
|
|
|
o = s.option(form.Value, 'TypesDB', _('Datasets definition file'));
|
|
o.default = '/etc/collectd/types.db';
|
|
|
|
o = s.option(form.Value, 'Interval', _('Data collection interval'), _('Seconds'));
|
|
o.default = '60';
|
|
|
|
o = s.option(form.Value, 'ReadThreads', _('Number of threads for data collection'));
|
|
o.default = '5';
|
|
|
|
o = s.option(form.Flag, 'FQDNLookup', _('Try to look up fully qualified hostname'));
|
|
o.default = o.disabled;
|
|
o.optional = true;
|
|
o.depends('Hostname', '');
|
|
|
|
var groupNames = [
|
|
'general', _('General plugins'),
|
|
'network', _('Network plugins'),
|
|
'output', _('Output plugins')
|
|
];
|
|
|
|
for (var i = 0; i < groupNames.length; i += 2) {
|
|
s = m.section(form.GridSection, 'statistics_' + groupNames[i], groupNames[i + 1]);
|
|
|
|
s.cfgsections = L.bind(function(category) {
|
|
return this.map.data.sections('luci_statistics', 'statistics')
|
|
.map(function(s) { return s['.name'] })
|
|
.filter(function(section_id) {
|
|
var name = section_id.replace(/^collectd_/, ''),
|
|
plugin = plugins[name];
|
|
|
|
return (section_id.indexOf('collectd_') == 0 && plugin != null &&
|
|
plugin.installed && plugin.spec.category == category);
|
|
});
|
|
}, s, groupNames[i]);
|
|
|
|
s.sectiontitle = function(section_id) {
|
|
var name = section_id.replace(/^collectd_/, ''),
|
|
plugin = plugins[name];
|
|
|
|
return plugin ? plugin.spec.title : name
|
|
};
|
|
|
|
enabled = s.option(form.Flag, 'enable', _('Enabled'));
|
|
enabled.editable = true;
|
|
enabled.modalonly = false;
|
|
enabled.renderWidget = function(section_id, option_index, cfgvalue) {
|
|
var widget = form.Flag.prototype.renderWidget.apply(this, [section_id, option_index, cfgvalue]);
|
|
|
|
widget.querySelector('input[type="checkbox"]').addEventListener('click', L.bind(function(section_id, plugin, ev) {
|
|
if (ev.target.checked && plugin && plugin.form.addFormOptions)
|
|
this.section.renderMoreOptionsModal(section_id);
|
|
}, this, section_id, plugins[section_id.replace(/^collectd_/, '')]));
|
|
|
|
return widget;
|
|
};
|
|
|
|
o = s.option(form.DummyValue, '_dummy', _('Status'));
|
|
o.width = '50%';
|
|
o.modalonly = false;
|
|
o.textvalue = function(section_id) {
|
|
var name = section_id.replace(/^collectd_/, ''),
|
|
section = uci.get('luci_statistics', section_id),
|
|
plugin = plugins[name];
|
|
|
|
if (section.enable != '1')
|
|
return E('em', {}, [_('Plugin is disabled')]);
|
|
|
|
var summary = plugin ? plugin.form.configSummary(section) : null;
|
|
return summary || E('em', _('none'));
|
|
};
|
|
|
|
s.modaltitle = function(section_id) {
|
|
var name = section_id.replace(/^collectd_/, ''),
|
|
plugin = plugins[name];
|
|
|
|
return plugin ? plugin.form.title : null;
|
|
};
|
|
|
|
s.addModalOptions = function(s) {
|
|
var name = s.section.replace(/^collectd_/, ''),
|
|
plugin = plugins[name];
|
|
|
|
if (!plugin)
|
|
return;
|
|
|
|
s.description = plugin.form.description;
|
|
|
|
plugin.form.addFormOptions(s);
|
|
|
|
var opt = s.children.filter(function(o) { return o.option == 'enable' })[0];
|
|
if (opt)
|
|
opt.cfgvalue = function(section_id, set_value) {
|
|
if (arguments.length == 2)
|
|
return form.Flag.prototype.cfgvalue.apply(this, [section_id, enabled.formvalue(section_id)]);
|
|
else
|
|
return form.Flag.prototype.cfgvalue.apply(this, [section_id]);
|
|
};
|
|
};
|
|
|
|
s.renderRowActions = function(section_id) {
|
|
var name = section_id.replace(/^collectd_/, ''),
|
|
plugin = plugins[name];
|
|
|
|
var trEl = this.super('renderRowActions', [ section_id, _('Configure…') ]);
|
|
|
|
if (!plugin || !plugin.form.addFormOptions)
|
|
dom.content(trEl, null);
|
|
|
|
return trEl;
|
|
};
|
|
}
|
|
|
|
return m.render();
|
|
}
|
|
});
|