2020-02-08 21:12:17 +00:00
|
|
|
'use strict';
|
2020-04-03 08:00:06 +00:00
|
|
|
'require baseclass';
|
2020-02-08 21:12:17 +00:00
|
|
|
'require fs';
|
|
|
|
'require form';
|
|
|
|
|
2020-04-03 08:00:06 +00:00
|
|
|
return baseclass.extend({
|
2020-02-08 21:12:17 +00:00
|
|
|
title: _('DF Plugin Configuration'),
|
|
|
|
description: _('The df plugin collects statistics about the disk space usage on different devices, mount points or filesystem types.'),
|
|
|
|
|
|
|
|
addFormOptions: function(s) {
|
|
|
|
var o;
|
|
|
|
|
|
|
|
o = s.option(form.Flag, 'enable', _('Enable this plugin'));
|
|
|
|
|
|
|
|
o = s.option(form.DynamicList, 'Devices', _('Monitor devices'));
|
|
|
|
o.optional = true;
|
|
|
|
o.depends('enable', '1');
|
|
|
|
o.load = function(section_id) {
|
|
|
|
return fs.lines('/proc/partitions').then(L.bind(function(lines) {
|
|
|
|
var parts = [];
|
|
|
|
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
|
|
var line = L.toArray(lines[i]);
|
|
|
|
if (!isNaN(line[0]))
|
|
|
|
parts.push('/dev/' + line[3]);
|
|
|
|
}
|
|
|
|
|
|
|
|
parts.sort();
|
|
|
|
|
|
|
|
for (var i = 0; i < parts.length; i++)
|
|
|
|
this.value(parts[i]);
|
|
|
|
|
|
|
|
return this.super('load', [section_id]);
|
|
|
|
}, this));
|
|
|
|
};
|
|
|
|
|
|
|
|
o = s.option(form.DynamicList, 'MountPoints', _('Monitor mount points'));
|
|
|
|
o.default = '/overlay';
|
|
|
|
o.optional = true;
|
|
|
|
o.depends('enable', '1');
|
|
|
|
o.load = function(section_id) {
|
|
|
|
return fs.lines('/proc/mounts').then(L.bind(function(lines) {
|
|
|
|
var mounts = {};
|
|
|
|
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
|
|
var line = L.toArray(lines[i]);
|
|
|
|
mounts[line[1]] = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
mounts = Object.keys(mounts).sort();
|
|
|
|
|
|
|
|
for (var i = 0; i < mounts.length; i++)
|
|
|
|
this.value(mounts[i]);
|
|
|
|
|
|
|
|
return this.super('load', [section_id]);
|
|
|
|
}, this));
|
|
|
|
};
|
|
|
|
|
|
|
|
o = s.option(form.DynamicList, 'FSTypes', _('Monitor filesystem types'));
|
|
|
|
o.default = 'tmpfs';
|
|
|
|
o.optional = true;
|
|
|
|
o.depends('enable', '1');
|
|
|
|
o.load = function(section_id) {
|
|
|
|
return Promise.all([
|
|
|
|
fs.lines('/etc/filesystems'),
|
|
|
|
fs.lines('/proc/filesystems')
|
|
|
|
]).then(L.bind(function(lines) {
|
|
|
|
var fslines = lines[0].concat(lines[1]),
|
|
|
|
fstypes = {};
|
|
|
|
|
|
|
|
for (var i = 0; i < fslines.length; i++) {
|
|
|
|
var line = L.toArray(fslines[i]);
|
|
|
|
|
|
|
|
if (line.length == 2 && line[0] == 'nodev')
|
|
|
|
continue;
|
|
|
|
|
|
|
|
fstypes[line.pop()] = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
fstypes = Object.keys(fstypes).sort();
|
|
|
|
|
|
|
|
for (var i = 0; i < fstypes.length; i++)
|
|
|
|
this.value(fstypes[i]);
|
|
|
|
|
|
|
|
return this.super('load', [section_id]);
|
|
|
|
}, this));
|
|
|
|
};
|
|
|
|
|
|
|
|
o = s.option(form.Flag, 'IgnoreSelected', _('Monitor all except specified'));
|
|
|
|
o.depends('enable', '1');
|
2020-07-13 11:31:35 +00:00
|
|
|
|
|
|
|
o = s.option(form.Flag, 'ValuesPercentage', _('Free space, reserved space and used space is reported as relative values'));
|
|
|
|
o.depends('enable', '1');
|
2020-02-08 21:12:17 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
configSummary: function(section) {
|
|
|
|
var devs = L.toArray(section.Devices),
|
|
|
|
mounts = L.toArray(section.MountPoints),
|
|
|
|
fstypes = L.toArray(section.FSTypes),
|
2020-02-21 07:49:05 +00:00
|
|
|
count = devs.length + mounts.length + fstypes.length,
|
2020-02-08 21:12:17 +00:00
|
|
|
invert = section.IgnoreSelected == '1';
|
|
|
|
|
|
|
|
if (count == 0)
|
|
|
|
return _('Monitoring all partitions');
|
|
|
|
else
|
|
|
|
return (invert ? _('Monitoring all except %s, %s, %s') : _('Monitoring %s, %s, %s')).format(
|
|
|
|
N_(devs.length, 'one device', '%d devices').format(devs.length),
|
|
|
|
N_(mounts.length, 'one mount', '%d mounts').format(mounts.length),
|
|
|
|
N_(fstypes.length, 'one filesystem type', '%d filesystem types').format(fstypes.length)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|