Multiple apps introduced their own implementation of a syslog view,
filtered for just their own application logs. Pull that out as a shared
view. Some of these had _minor_ style differences, which has been
"standardized" now. A full "widget" conversion would allow more end app
tuning of that, but is not implemented.
Signed-off-by: Karl Palsson <karlp@etactica.com>
app-nextdns: fix Logs title
Minor typo, introduced in
625abbf (convert simple controllers to
menu.json)
Signed-off-by: Karl Palsson <karlp@etactica.com>
luci-base: implement shared log reader view
Closes #5452
Signed-off-by: Paul Donald <newtwen@gmail.com>
(cherry picked from commit
c5a65a839713ab7ac70e6a6b5a7331593f67a9a0)
'use strict';
-'require view';
-'require poll';
-'require fs';
+'require tools.views as views';
-return view.extend({
- load: function() {
- return Promise.all([
- L.resolveDefault(fs.stat('/sbin/logread'), null),
- L.resolveDefault(fs.stat('/usr/sbin/logread'), null)
- ]);
- },
- render: function(stat) {
- var logger = stat[0] ? stat[0].path : stat[1] ? stat[1].path : null;
- poll.add(function() {
- return L.resolveDefault(fs.exec_direct(logger, ['-e', 'adblock-'])).then(function(res) {
- var log = document.getElementById("logfile");
- if (res) {
- log.value = res.trim();
- } else {
- log.value = _('No adblock related logs yet!');
- }
- log.scrollTop = log.scrollHeight;
- });
- });
- return E('div', { class: 'cbi-map' },
- E('div', { class: 'cbi-section' }, [
- E('div', { class: 'cbi-section-descr' }, _('The syslog output, pre-filtered for adblock related messages only.')),
- E('textarea', {
- 'id': 'logfile',
- 'style': 'width: 100% !important; padding: 5px; font-family: monospace',
- 'readonly': 'readonly',
- 'wrap': 'off',
- 'rows': 25
- })
- ]));
- },
- handleSaveApply: null,
- handleSave: null,
- handleReset: null
-});
+return views.LogreadBox("adblock-", "adblock");
\ No newline at end of file
'use strict';
-'require view';
-'require poll';
-'require fs';
+'require tools.views as views';
-return view.extend({
- load: function () {
- return Promise.all([
- L.resolveDefault(fs.stat('/sbin/logread'), null),
- L.resolveDefault(fs.stat('/usr/sbin/logread'), null)
- ]);
- },
- render: function (stat) {
- var logger = stat[0] ? stat[0].path : stat[1] ? stat[1].path : null;
- poll.add(function () {
- return L.resolveDefault(fs.exec_direct(logger, ['-e', 'banIP-'])).then(function (res) {
- var log = document.getElementById("logfile");
- if (res) {
- log.value = res.trim();
- } else {
- log.value = _('No banIP related processing logs yet!');
- }
- log.scrollTop = log.scrollHeight;
- });
- });
- return E('div', { class: 'cbi-map' },
- E('div', { class: 'cbi-section' }, [
- E('div', { class: 'cbi-section-descr' }, _('The syslog output, prefiltered for banIP-related processing log entries only.')),
- E('textarea', {
- 'id': 'logfile',
- 'style': 'width: 100% !important; padding: 5px; font-family: monospace',
- 'readonly': 'readonly',
- 'wrap': 'off',
- 'rows': 25
- })
- ]));
- },
- handleSaveApply: null,
- handleSave: null,
- handleReset: null
-});
+return views.LogreadBox("banIP-", "banIP");
'use strict';
-'require view';
-'require poll';
-'require fs';
+'require tools.views as views';
-return view.extend({
- render: function() {
- poll.add(function() {
- return L.resolveDefault(fs.exec('/sbin/logread', ['-e', 'nextdns']), { code: 1 })
- .then(function(res) {
- var content;
- if (res.code === 0)
- content = res.stdout.trim();
- if (!content)
- content = _('No nextdns related logs yet!');
- var view = document.getElementById("view_id");
- view.value = content;
- view.scrollTop = view.scrollHeight;
- });
- });
- return E('div', { class: 'cbi-map' },
- E('div', { class: 'cbi-section' }, [
- E('div', { class: 'cbi-section-descr' },
- _('The syslog output, pre-filtered for nextdns related messages only.')),
- E('textarea', {
- id: 'view_id',
- readonly: 'readonly',
- wrap: 'off',
- style: 'width: 100% !important;\
- height: 450px !important;\
- border: 1px solid #cccccc;\
- padding: 5px;\
- font-size: 12px;\
- font-family: monospace;\
- resize: none;\
- pointer-events: auto;\
- cursor: auto;'
- })
- ])
- );
- },
- handleSaveApply: null,
- handleSave: null,
- handleReset: null
-});
+return views.LogreadBox("nextdns", "nextdns");
},
"admin/services/nextdns/log": {
- "title": "Configuration",
+ "title": "Logs",
"order": 2,
"action": {
"type": "view",
'use strict';
-'require view';
-'require poll';
-'require fs';
+'require tools.views as views';
-return view.extend({
- load: function() {
- return Promise.all([
- L.resolveDefault(fs.stat('/sbin/logread'), null),
- L.resolveDefault(fs.stat('/usr/sbin/logread'), null)
- ]);
- },
- render: function(stat) {
- var logger = stat[0] ? stat[0].path : stat[1] ? stat[1].path : null;
- poll.add(function() {
- return L.resolveDefault(fs.exec_direct(logger, ['-e', 'trm-'])).then(function(res) {
- var log = document.getElementById("logfile");
- if (res) {
- log.value = res.trim();
- }
- else {
- log.value = _('No travelmate related logs yet!');
- }
- log.scrollTop = log.scrollHeight;
- });
- });
- return E('div', { class: 'cbi-map' },
- E('div', { class: 'cbi-section' }, [
- E('div', { class: 'cbi-section-descr' }, _('The syslog output, pre-filtered for travelmate related messages only.')),
- E('textarea', {
- 'id': 'logfile',
- 'style': 'width: 100% !important; padding: 5px; font-family: monospace',
- 'readonly': 'readonly',
- 'wrap': 'off',
- 'rows': 25
- })
- ]));
- },
- handleSaveApply: null,
- handleSave: null,
- handleReset: null
-});
+return views.LogreadBox("trm-", "travelmate");
--- /dev/null
+'use strict';
+'require fs';
+
+var CBILogreadBox = function(logtag, name) {
+ return L.view.extend({
+ load: function() {
+ return Promise.all([
+ L.resolveDefault(fs.stat('/sbin/logread'), null),
+ L.resolveDefault(fs.stat('/usr/sbin/logread'), null)
+ ]);
+ },
+ render: function(stat) {
+ var logger = stat[0] ? stat[0].path : stat[1] ? stat[1].path : null;
+ L.Poll.add(function() {
+ return L.resolveDefault(fs.exec_direct(logger, ['-e', logtag])).then(function(res) {
+ var log = document.getElementById("logfile");
+ if (res) {
+ log.value = res.trim();
+ } else {
+ log.value = _('No related logs yet!');
+ }
+ log.scrollTop = log.scrollHeight;
+ });
+ });
+ return E('div', { class: 'cbi-map' },
+ E('div', { class: 'cbi-section' }, [
+ E('div', { class: 'cbi-section-descr' }, _('The syslog output, pre-filtered for messages related to: ' + name)),
+ E('textarea', {
+ 'id': 'logfile',
+ 'style': 'width: 100% !important; padding: 5px; font-family: monospace',
+ 'readonly': 'readonly',
+ 'wrap': 'off',
+ 'rows': 25
+ })
+ ]));
+ },
+ handleSaveApply: null,
+ handleSave: null,
+ handleReset: null
+ });
+};
+
+return L.Class.extend({
+ LogreadBox: CBILogreadBox,
+});