'use strict'; 'require baseclass'; 'require ui'; 'require view.ruantiblock.log-base as base'; document.head.append(E('style', {'type': 'text/css'}, ` #logTable { width: calc(100% - 4px); } .log-entry-time-cell { min-width: 14em !important; } .log-entry-host-cell { min-width: 10em !important; overflow-wrap: anywhere !important; } .log-entry-message-cell { min-width: 20em !important; white-space: pre-wrap !important; overflow-wrap: anywhere !important; } .log-entry-text-nowrap { white-space: nowrap !important; }; `)); return baseclass.extend({ view: base.view.extend({ filterHighlightFunc(match) { return `${match}`; }, makeLogArea(logdataArray) { let lines = `${_('No entries available...')}`; let logTable = E('table', { 'id': 'logTable', 'class': 'table' }); for(let level of Object.keys(this.logLevels)) { this.logLevelsStat[level] = 0; }; if(logdataArray.length > 0) { lines = []; logdataArray.forEach((e, i) => { if(e[4] in this.logLevels) { this.logLevelsStat[e[4]] = this.logLevelsStat[e[4]] + 1; }; lines.push( `${e[0]}` + ((e[1]) ? `${e[1]}` : '') + ((e[2]) ? `${e[2]}` : '') + ((e[3]) ? `${e[3]}` : '') + ((e[4]) ? `${e[4]}` : '') + ((e[5]) ? `${e[5]}` : '') + '' ); }); lines = lines.join(''); logTable.append( E('tr', { 'class': 'tr table-titles' }, [ E('th', { 'class': 'th left log-entry-text-nowrap' }, '#'), (logdataArray[0][1]) ? E('th', { 'class': 'th left log-entry-text-nowrap' }, _('Timestamp')) : '', (logdataArray[0][2]) ? E('th', { 'class': 'th left log-entry-text-nowrap' }, _('Host')) : '', (logdataArray[0][3]) ? E('th', { 'class': 'th left log-entry-text-nowrap' }, _('Facility')) : '', (logdataArray[0][4]) ? E('th', { 'class': 'th left log-entry-text-nowrap' }, _('Level')) : '', (logdataArray[0][5]) ? E('th', { 'class': 'th left log-entry-text-nowrap' }, _('Message')) : '', ]) ); }; try { logTable.insertAdjacentHTML('beforeend', lines); } catch(err) { if(err.name === 'SyntaxError') { ui.addNotification(null, E('p', {}, _('HTML/XML error') + ': ' + err.message), 'error'); }; throw err; }; let levelsStatString = ''; if((Object.values(this.logLevelsStat).reduce((s,c) => s + c, 0)) > 0) { Object.entries(this.logLevelsStat).forEach(e => { if(e[0] in this.logLevels && e[1] > 0) { levelsStatString += `${e[1]}`; }; }); }; return E([ E('div', { 'class': 'log-entries-count' }, `${_('Entries')}: ${logdataArray.length} / ${this.totalLogLines}${levelsStatString}` ), logTable, ]); }, }), });