Skip to content

Commit

Permalink
luci-app-statistics: Add UI to configure Mqtt
Browse files Browse the repository at this point in the history
This commit adds UI to configure the Mqtt plugin of the luci-app-statistics.

Signed-off-by: Miguel Angel Mulero Martinez <migmul@gmail.com>
  • Loading branch information
McGiverGim authored and systemcrash committed Mar 8, 2024
1 parent c68ec2f commit 8bf5646
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
'use strict';
'require baseclass';
'require form';

return baseclass.extend({
title: _('Mqtt Plugin Configuration'),

addFormOptions: function(s) {
let o, ss;

o = s.option(form.Flag, 'enable', _('Sends or receives data via mqtt'));

o = s.option(form.SectionValue, '__blocks', form.GridSection, 'collectd_mqtt_block');
o.depends('enable', '1');

ss = o.subsection;
ss.anonymous = true;
ss.addremove = true;

o = ss.option(form.ListValue, 'blocktype', _('Type'));
o.value('Publish', _('Publish'));
o.value('Subscribe', _('Subscribe'));
o.default = 'Publish';

o = ss.option(form.Value, 'name', _('Name'));
o.optional = false;
o.rmempty = false;

o = ss.option(form.Value, 'Host', _('Host'));
o.datatype = 'host';
o.optional = false;
o.rmempty = false;

o = ss.option(form.Value, 'Port', _('Port'));
o.datatype = 'port';
o.optional = true;

o = ss.option(form.Value, 'User', _('User'));
o.optional = true;

o = ss.option(form.Value, 'Password', _('Password'));
o.password = true;
o.optional = true;
o.modalonly = true;

o = ss.option(form.ListValue, 'Qos', _('QoS'));
o.value('0', _('0 - At most once'));
o.value('1', _('1 - At least once'));
o.value('2', _('2 - Exactly once'));
o.modalonly = true;
o.optional = true;

o = ss.option(form.Value, 'Prefix', _('Prefix'));
o.depends('blocktype', 'Publish');
o.optional = true;
o.modalonly = true;

o = ss.option(form.ListValue, 'Retain', _('Retain'));
o.depends('blocktype', 'Publish');
o.value('true', _('True'));
o.value('false', _('False'));
o.optional = true;
o.modalonly = true;

o = ss.option(form.ListValue, 'StoreRates', _('StoreRates'));
o.depends('blocktype', 'Publish');
o.value('true', _('True'));
o.value('false', _('False'));
o.modalonly = true;
o.optional = true;

o = ss.option(form.ListValue, 'CleanSession', _('CleanSession'));
o.depends('blocktype', 'Subscribe');
o.value('true', _('True'));
o.value('false', _('False'));
o.optional = true;
o.modalonly = true;

o = ss.option(form.Value, 'Topic', _('Topic'));
o.depends('blocktype', 'Subscribe');
o.optional = true;
o.modalonly = true;
},

configSummary: function(section) {
return _('Mqtt plugin enabled');
}
});
28 changes: 28 additions & 0 deletions applications/luci-app-statistics/root/usr/libexec/stat-genconfig
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,33 @@ function config_network(c) {
;
}

function config_mqtt(c) {
let str = "";

for (let k, s in sections) {
if (s['.type'] === 'collectd_mqtt_block') {
const isPublish = s['blocktype'] === 'Publish';

str += isPublish ? `\t<Publish "${s.name}">\n` : `\t<Subscribe "${s.name}">\n`;

str += `\t\tHost "${s.Host}"\n`;
str += s['Port'] ? `\t\tPort ${s.Port}\n` : '';
str += s['User'] ? `\t\tUser "${s.User}"\n` : '';
str += s['Password'] ? `\t\tPassword "${s.Password}"\n` : '';
str += s['Qos'] ? `\t\tQos ${s.Qos}\n` : '';
str += s['Prefix'] ? `\t\tPrefix ${s.Prefix}\n` : '';
str += s['Retain'] ? `\t\tRetain ${s.Retain}\n` : '';
str += s['StoreRates'] ? `\t\tRetain ${s.StoreRates}\n` : '';
str += s['CleanSession'] ? `\t\tRetain ${s.CleanSession}\n` : '';
str += s['Topic'] ? `\t\tTopic "${s.Topic}"\n` : '';

str += isPublish ? `\t</Publish>\n` : `\t</Subscribe>\n`;
}
}

return str;
}

function section(plugin) {
let config = sections[`collectd_${plugin}`] ?? sections.collectd;

Expand Down Expand Up @@ -270,6 +297,7 @@ for (let filename in lsdir(plugin_dir)) {
case 'iptables': plugins[name] = config_iptables; break;
case 'curl': plugins[name] = config_curl; break;
case 'network': plugins[name] = config_network; break;
case 'mqtt': plugins[name] = config_mqtt; break;
default:
plugins[name] = json(open(`${plugin_dir}/${filename}`))?.legend;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"title": "Mqtt",
"category": "output"
}

0 comments on commit 8bf5646

Please sign in to comment.