mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-13 22:20:59 +00:00
luci-app: Log fixes
This commit is contained in:
+85
-56
@@ -94,8 +94,17 @@ log-emerg td {
|
|||||||
|
|
||||||
return L.Class.extend({
|
return L.Class.extend({
|
||||||
view: L.view.extend({
|
view: L.view.extend({
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View name (for local storage).
|
||||||
|
* Must be overridden by a subclass!
|
||||||
|
*/
|
||||||
viewName: null,
|
viewName: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page title.
|
||||||
|
* Must be overridden by a subclass!
|
||||||
|
*/
|
||||||
title: null,
|
title: null,
|
||||||
|
|
||||||
logLevels: {
|
logLevels: {
|
||||||
@@ -113,10 +122,14 @@ return L.Class.extend({
|
|||||||
|
|
||||||
logSortingValue: 'asc',
|
logSortingValue: 'asc',
|
||||||
|
|
||||||
logLevelsStat: {},
|
isHosts: false,
|
||||||
|
|
||||||
|
isLevels: false,
|
||||||
|
|
||||||
logHosts: {},
|
logHosts: {},
|
||||||
|
|
||||||
|
logLevelsStat: {},
|
||||||
|
|
||||||
logHostsDropdown: null,
|
logHostsDropdown: null,
|
||||||
|
|
||||||
logLevelsDropdown: null,
|
logLevelsDropdown: null,
|
||||||
@@ -132,7 +145,7 @@ return L.Class.extend({
|
|||||||
/'/g, ''');
|
/'/g, ''');
|
||||||
},
|
},
|
||||||
|
|
||||||
makelogHostsDropdownItem: function(host) {
|
makeLogHostsDropdownItem: function(host) {
|
||||||
return E(
|
return E(
|
||||||
'span',
|
'span',
|
||||||
{ 'class': 'zonebadge log-host-dropdown-item' },
|
{ 'class': 'zonebadge log-host-dropdown-item' },
|
||||||
@@ -140,24 +153,73 @@ return L.Class.extend({
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
makeLogHostsDropdownSection: function() {
|
||||||
|
this.logHostsDropdown = new ui.Dropdown(
|
||||||
|
null,
|
||||||
|
this.logHosts,
|
||||||
|
{
|
||||||
|
id: 'logHostsDropdown',
|
||||||
|
multiple: true,
|
||||||
|
select_placeholder: _('All'),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return E(
|
||||||
|
'div', { 'class': 'cbi-value' }, [
|
||||||
|
E('label', {
|
||||||
|
'class': 'cbi-value-title',
|
||||||
|
'for': 'logHostsDropdown',
|
||||||
|
}, _('Hosts')),
|
||||||
|
E('div', { 'class': 'cbi-value-field' },
|
||||||
|
this.logHostsDropdown.render()
|
||||||
|
),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
makeLogLevelsDropdownSection: function(){
|
||||||
|
this.logLevelsDropdown = new ui.Dropdown(
|
||||||
|
null,
|
||||||
|
this.logLevels,
|
||||||
|
{
|
||||||
|
id: 'logLevelsDropdown',
|
||||||
|
sort: Object.keys(this.logLevels),
|
||||||
|
multiple: true,
|
||||||
|
select_placeholder: _('All'),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return E(
|
||||||
|
'div', { 'class': 'cbi-value' }, [
|
||||||
|
E('label', {
|
||||||
|
'class': 'cbi-value-title',
|
||||||
|
'for': 'logLevelsDropdown',
|
||||||
|
}, _('Logging levels')),
|
||||||
|
E('div', { 'class': 'cbi-value-field' },
|
||||||
|
this.logLevelsDropdown.render()
|
||||||
|
),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Receives raw log data.
|
||||||
|
* Abstract method, must be overridden by a subclass!
|
||||||
*
|
*
|
||||||
* @param {number} tail
|
* @param {number} tail
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
* Returns the raw content of the log
|
* Returns the raw content of the log
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
getLogData: function(tail) {
|
getLogData: function(tail) {
|
||||||
throw new Error('getLogData must be overridden by a subclass');
|
throw new Error('getLogData must be overridden by a subclass');
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Parses log data.
|
||||||
|
* Abstract method, must be overridden by a subclass!
|
||||||
*
|
*
|
||||||
* @param {string} logdata
|
* @param {string} logdata
|
||||||
* @param {number} tail
|
* @param {number} tail
|
||||||
* @returns {Array<number, string|null, string|null, string|null, string|null, string|null>}
|
* @returns {Array<number, string|null, string|null, string|null, string|null, string|null>}
|
||||||
* Returns an array of values: [ #, Timestamp, Host, Level, Facility, Message ]
|
* Returns an array of values: [ #, Timestamp, Host, Level, Facility, Message ]
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
parseLogData: function(logdata, tail) {
|
parseLogData: function(logdata, tail) {
|
||||||
throw new Error('parseLogData must be overridden by a subclass');
|
throw new Error('parseLogData must be overridden by a subclass');
|
||||||
@@ -165,9 +227,9 @@ return L.Class.extend({
|
|||||||
|
|
||||||
setHostFilter: function(cArr) {
|
setHostFilter: function(cArr) {
|
||||||
let logHostsKeys = Object.keys(this.logHosts);
|
let logHostsKeys = Object.keys(this.logHosts);
|
||||||
if(logHostsKeys.length > 0) {
|
if(logHostsKeys.length > 0 && this.logHostsDropdown) {
|
||||||
let selectedHosts = this.logHostsDropdown.getValue();
|
let selectedHosts = this.logHostsDropdown.getValue();
|
||||||
this.logHostsDropdown.addChoices(Object.keys(this.logHosts), this.logHosts);
|
this.logHostsDropdown.addChoices(logHostsKeys, this.logHosts);
|
||||||
if(selectedHosts.length === 0 || logHostsKeys.length === selectedHosts.length) {
|
if(selectedHosts.length === 0 || logHostsKeys.length === selectedHosts.length) {
|
||||||
return cArr;
|
return cArr;
|
||||||
};
|
};
|
||||||
@@ -178,7 +240,7 @@ return L.Class.extend({
|
|||||||
|
|
||||||
setLevelFilter: function(cArr) {
|
setLevelFilter: function(cArr) {
|
||||||
let logLevelsKeys = Object.keys(this.logLevels);
|
let logLevelsKeys = Object.keys(this.logLevels);
|
||||||
if(logLevelsKeys.length > 0) {
|
if(logLevelsKeys.length > 0 && this.logLevelsDropdown) {
|
||||||
let selectedLevels = this.logLevelsDropdown.getValue();
|
let selectedLevels = this.logLevelsDropdown.getValue();
|
||||||
if(selectedLevels.length === 0 || logLevelsKeys.length === selectedLevels.length) {
|
if(selectedLevels.length === 0 || logLevelsKeys.length === selectedLevels.length) {
|
||||||
return cArr;
|
return cArr;
|
||||||
@@ -347,54 +409,12 @@ return L.Class.extend({
|
|||||||
});
|
});
|
||||||
|
|
||||||
let logHostsDropdownElem = '';
|
let logHostsDropdownElem = '';
|
||||||
let logHostsKeys = Object.keys(this.logHosts);
|
|
||||||
if(logHostsKeys.length > 0) {
|
|
||||||
this.logHostsDropdown = new ui.Dropdown(
|
|
||||||
null,
|
|
||||||
this.logHosts,
|
|
||||||
{
|
|
||||||
id: 'logHostsDropdown',
|
|
||||||
multiple: true,
|
|
||||||
select_placeholder: _('All'),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
logHostsDropdownElem = E(
|
|
||||||
'div', { 'class': 'cbi-value' }, [
|
|
||||||
E('label', {
|
|
||||||
'class': 'cbi-value-title',
|
|
||||||
'for': 'logHostsDropdown',
|
|
||||||
}, _('Hosts')),
|
|
||||||
E('div', { 'class': 'cbi-value-field' },
|
|
||||||
this.logHostsDropdown.render()
|
|
||||||
),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
let logLevelsDropdownElem = '';
|
let logLevelsDropdownElem = '';
|
||||||
let logLevelsKeys = Object.keys(this.logLevels);
|
if(this.isLevels) {
|
||||||
if(logLevelsKeys.length > 0) {
|
logLevelsDropdownElem = this.makeLogLevelsDropdownSection();
|
||||||
this.logLevelsDropdown = new ui.Dropdown(
|
};
|
||||||
null,
|
if(this.isHosts) {
|
||||||
this.logLevels,
|
logHostsDropdownElem = this.makeLogHostsDropdownSection();
|
||||||
{
|
|
||||||
id: 'logLevelsDropdown',
|
|
||||||
sort: logLevelsKeys,
|
|
||||||
multiple: true,
|
|
||||||
select_placeholder: _('All'),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
logLevelsDropdownElem = E(
|
|
||||||
'div', { 'class': 'cbi-value' }, [
|
|
||||||
E('label', {
|
|
||||||
'class': 'cbi-value-title',
|
|
||||||
'for': 'logLevelsDropdown',
|
|
||||||
}, _('Logging levels')),
|
|
||||||
E('div', { 'class': 'cbi-value-field' },
|
|
||||||
this.logLevelsDropdown.render()
|
|
||||||
),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let logFilter = E('input', {
|
let logFilter = E('input', {
|
||||||
@@ -439,7 +459,7 @@ return L.Class.extend({
|
|||||||
E('div', { 'class': 'cbi-section fade-in' },
|
E('div', { 'class': 'cbi-section fade-in' },
|
||||||
E('div', { 'class': 'cbi-section-node' }, [
|
E('div', { 'class': 'cbi-section-node' }, [
|
||||||
|
|
||||||
E('div', { 'class': 'cbi-value' }, [
|
E('div', { 'id': 'tailInputSection', 'class': 'cbi-value' }, [
|
||||||
E('label', {
|
E('label', {
|
||||||
'class': 'cbi-value-title',
|
'class': 'cbi-value-title',
|
||||||
'for': 'tailInput',
|
'for': 'tailInput',
|
||||||
@@ -513,11 +533,20 @@ return L.Class.extend({
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if(logdata) {
|
||||||
|
let tailInputSection = document.getElementById('tailInputSection');
|
||||||
|
if(this.isLevels && !this.logLevelsDropdown) {
|
||||||
|
tailInputSection.after(this.makeLogLevelsDropdownSection());
|
||||||
|
};
|
||||||
|
if(this.isHosts && !this.logHostsDropdown) {
|
||||||
|
tailInputSection.after(this.makeLogHostsDropdownSection());
|
||||||
|
};
|
||||||
|
};
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
formElems.forEach(e => e.disabled = false);
|
formElems.forEach(e => e.disabled = false);
|
||||||
logDownloadBtn.disabled = false;
|
logDownloadBtn.disabled = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
}),
|
}),
|
||||||
}, E('span', {}, ' ')),
|
}, E('span', {}, ' ')),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -83,9 +83,11 @@ return abc.view.extend({
|
|||||||
* If it contains time then syslog-ng.
|
* If it contains time then syslog-ng.
|
||||||
*/
|
*/
|
||||||
if(this.testRegexp.test(strArray[2])) {
|
if(this.testRegexp.test(strArray[2])) {
|
||||||
|
this.isHosts = true;
|
||||||
this.logLevels = {};
|
this.logLevels = {};
|
||||||
this.entriesHandler = this.syslog_ngHandler;
|
this.entriesHandler = this.syslog_ngHandler;
|
||||||
} else {
|
} else {
|
||||||
|
this.isLevels = true;
|
||||||
this.entriesHandler = this.logdHandler;
|
this.entriesHandler = this.logdHandler;
|
||||||
};
|
};
|
||||||
this.isLoggerChecked = true;
|
this.isLoggerChecked = true;
|
||||||
|
|||||||
Binary file not shown.
BIN
Binary file not shown.
@@ -10,7 +10,7 @@ config main 'config'
|
|||||||
option add_user_entries '0'
|
option add_user_entries '0'
|
||||||
option use_logger '1'
|
option use_logger '1'
|
||||||
option def_total_proxy '0'
|
option def_total_proxy '0'
|
||||||
option bllist_source 'rublacklist'
|
option bllist_source 'zapret-info'
|
||||||
option bllist_mode 'ip'
|
option bllist_mode 'ip'
|
||||||
option ip_limit '0'
|
option ip_limit '0'
|
||||||
option summarize_ip '0'
|
option summarize_ip '0'
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ BLLIST_MODULE=""
|
|||||||
### Настройки модулей-парсеров ###
|
### Настройки модулей-парсеров ###
|
||||||
|
|
||||||
### Источник для обновления списка блокировок (rublacklist, zapret-info, antifilter)
|
### Источник для обновления списка блокировок (rublacklist, zapret-info, antifilter)
|
||||||
BLLIST_SOURCE="rublacklist"
|
BLLIST_SOURCE="zapret-info"
|
||||||
### Режим обхода блокировок: ip, fqdn
|
### Режим обхода блокировок: ip, fqdn
|
||||||
BLLIST_MODE="ip"
|
BLLIST_MODE="ip"
|
||||||
### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит
|
### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит
|
||||||
|
|||||||
Reference in New Issue
Block a user