From 7b5090ceab7ab52fbf7d9ee2ff7fa1fb99063c5f Mon Sep 17 00:00:00 2001 From: Andrew Bauer Date: Fri, 2 Oct 2020 13:26:35 -0500 Subject: [PATCH] move newlog view to log view --- web/skins/classic/css/base/views/log.css | 33 -- web/skins/classic/css/base/views/newlog.css | 18 - web/skins/classic/views/js/log.js | 435 +++++--------------- web/skins/classic/views/js/newlog.js | 105 ----- web/skins/classic/views/log.php | 128 +++--- web/skins/classic/views/newlog.php | 91 ---- 6 files changed, 152 insertions(+), 658 deletions(-) delete mode 100644 web/skins/classic/css/base/views/newlog.css delete mode 100644 web/skins/classic/views/js/newlog.js delete mode 100644 web/skins/classic/views/newlog.php diff --git a/web/skins/classic/css/base/views/log.css b/web/skins/classic/css/base/views/log.css index de6e5eecd..918c1097c 100644 --- a/web/skins/classic/css/base/views/log.css +++ b/web/skins/classic/css/base/views/log.css @@ -1,19 +1,3 @@ -#logSummary { - font-size:10px; -} - -#logSummary tr { - margin: 0; - padding: 0; -} - -#logSummary td { - border: 1px solid #7f7fb2; - padding: 0 6px; - font-size: 10px; - line-height: 15px; -} - tr.log-fat td { background-color:#ffcccc; font-weight: bold; @@ -32,20 +16,3 @@ tr.log-dbg td { font-style: italic; } -#exportLog label { - vertical-align: middle; -} - -#exportLog input[type=radio] { - margin-right: 4px; - vertical-align: middle; -} - -#exportError { - display: none; - color: #dc143c; - margin-bottom: 8px; -} - -#exportErrorText { -} diff --git a/web/skins/classic/css/base/views/newlog.css b/web/skins/classic/css/base/views/newlog.css deleted file mode 100644 index 918c1097c..000000000 --- a/web/skins/classic/css/base/views/newlog.css +++ /dev/null @@ -1,18 +0,0 @@ -tr.log-fat td { - background-color:#ffcccc; - font-weight: bold; -} - -tr.log-err td { - background-color:#ffcccc; -} - -tr.log-war td { - background-color: #ffe4b5; -} - -tr.log-dbg td { - color: #666666; - font-style: italic; -} - diff --git a/web/skins/classic/views/js/log.js b/web/skins/classic/views/js/log.js index 53f197eab..ddaabcfc8 100644 --- a/web/skins/classic/views/js/log.js +++ b/web/skins/classic/views/js/log.js @@ -1,356 +1,105 @@ -var logParms = 'view=request&request=log&task=query'; -var logReq = new Request.JSON( {url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: logResponse} ); -var logTimer = undefined; -var logTable = undefined; +var table = $j('#logTable'); -var logCodes = { - '0': 'INF', - '-1': 'WAR', - '-2': 'ERR', - '-3': 'FAT', - '-4': 'PNC', +/* +This is the format of the json object sent by bootstrap-table + +var params = +{ +"type":"get", +"data": + { + "search":"some search text", + "sort":"DateTime", + "order":"asc", + "offset":0, + "limit":25 + "filter": + { + "message":"some advanced search text" + "level":"some more advanced search text" + } + }, +"cache":true, +"contentType":"application/json", +"dataType":"json" }; +*/ -var minSampleTime = 2000; -var maxSampleTime = 16000; -var minLogTime = 0; -var maxLogTime = 0; -var logCount = 0; -var maxLogFetch = 100; -var filter = {}; -var logTimeout = maxSampleTime; -var firstLoad = true; -var initialDisplayLimit = 200; -var sortReversed = false; -var filterFields = ['Component', 'ServerId', 'Pid', 'Level', 'File', 'Line']; -var options = {}; - -function escapeHtml(unsafe) { - return unsafe - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'"); +// Called by bootstrap-table to retrieve zm log data +function ajaxRequest(params) { + $j.getJSON(thisUrl + '?view=request&request=newlog&task=query', params.data) + .done(function(data) { + //console.log('Ajax parameters: ' + JSON.stringify(params)); + // rearrange the result into what bootstrap-table expects + params.success({total: data.total, totalNotFiltered: data.totalNotFiltered, rows: data.rows}); + updateHeaderStats(data); + }) + .fail(logAjaxFail); } -function buildFetchParms( parms ) { - var fetchParms = logParms+'&limit='+maxLogFetch; - if ( parms ) { - fetchParms += '&'+parms; - } - Object.each(filter, - function( value, key ) { - fetchParms += '&filter['+key+']='+value; - } - ); - return fetchParms; -} +function updateHeaderStats(data) { + var pageNum = table.bootstrapTable('getOptions').pageNumber; + var pageSize = table.bootstrapTable('getOptions').pageSize; + var startRow = ( (pageNum - 1 ) * pageSize ) + 1; + var stopRow = pageNum * pageSize; + var newClass = (data.logstate == 'ok') ? 'text-success' : (data.logstate == 'alert' ? 'text-warning' : ((data.logstate == 'alarm' ? 'text-danger' : ''))); -function fetchNextLogs() { - logReq.send( buildFetchParms( 'minTime='+maxLogTime ) ); -} + $j('#logState').text(data.logstate); + $j('#logState').removeClass('text-success'); + $j('#logState').removeClass('text-warning'); + $j('#logState').removeClass('text-danger'); + $j('#logState').addClass(newClass); -function fetchPrevLogs() { - logReq.send( buildFetchParms( 'maxTime='+minLogTime ) ); -} - -function logResponse( respObj ) { - if ( logTimer ) { - logTimer = clearTimeout( logTimer ); - } - - if ( respObj.result == 'Ok' ) { - if ( respObj.logs.length > 0 ) { - logTimeout = minSampleTime; - logCount += respObj.logs.length; - try { - respObj.logs.each( - function( log ) { - if ( ( !maxLogTime ) || ( log.TimeKey > maxLogTime ) ) { - maxLogTime = log.TimeKey; - } - if ( ( !minLogTime ) || ( log.TimeKey < minLogTime ) ) { - minLogTime = log.TimeKey; - } - - var row = logTable.push([ - {content: log.DateTime, properties: {style: 'white-space: nowrap'}}, - log.Component, log.Server, log.Pid, log.Code, - escapeHtml(log.Message), - escapeHtml(log.File), - log.Line - ]); - - delete log.Message; - row.tr.store( 'log', log ); - if ( log.Level <= -3 ) { - row.tr.addClass( 'log-fat' ); - } else if ( log.Level <= -2 ) { - row.tr.addClass( 'log-err' ); - } else if ( log.Level <= -1 ) { - row.tr.addClass( 'log-war' ); - } else if ( log.Level > 0 ) { - row.tr.addClass( 'log-dbg' ); - } - if ( !firstLoad ) { - var color = document.defaultView.getComputedStyle(row.tr, null).getPropertyValue('color'); - var colorParts = color.match(/^rgb.*\((\d+),\s*(\d+),\s*(\d+)/); - rowOrigColor = '#' + parseInt(colorParts[1]).toString(16) + parseInt(colorParts[2]).toString(16) + parseInt(colorParts[3]).toString(16); - //new Fx.Tween( row.tr, { duration: 10000, transition: Fx.Transitions.Sine } ).start( 'color', '#6495ED', rowOrigColor ); - } - } - ); - if ( typeof(respObj.options) == 'object' ) { - $j.each( respObj.options, - function( field ) { - if ( options[field] ) { - options[field] = Object.assign(options[field], respObj.options[field]); - } else { - options[field] = respObj.options[field]; - } - } - ); - } - updateFilterSelectors(); - $('lastUpdate').set('text', respObj.updated); - $('logState').set('text', respObj.state); - $('logState').removeClass('ok'); - $('logState').removeClass('alert'); - $('logState').removeClass('alarm'); - $('logState').addClass(respObj.state); - $('totalLogs').set('text', respObj.total); - $('availLogs').set('text', respObj.available); - $('displayLogs').set('text', logCount); - if ( firstLoad ) { - if ( logCount < displayLimit ) { - fetchPrevLogs(); - } - } - logTable.reSort(); - } catch ( e ) { - console.error( e ); - } - logTimeout /= 2; - if ( logTimeout < minSampleTime ) { - logTimeout = minSampleTime; - } - } else { - firstLoad = false; - logTimeout *= 2; - if ( logTimeout > maxSampleTime ) { - logTimeout = maxSampleTime; - } - } // end logs.length > 0 - } // end if result == Ok - logTimer = fetchNextLogs.delay( logTimeout ); -} - -function refreshLog() { - options = {}; - $j('#logTable tbody').empty(); - firstLoad = true; - maxLogTime = 0; - minLogTime = 0; - logCount = 0; - logTimeout = maxSampleTime; - displayLimit = initialDisplayLimit; - fetchNextLogs(); -} - -function expandLog() { - displayLimit += maxLogFetch; - fetchPrevLogs(); -} - -function clearResponse() { - refreshLog(); -} -function clearError() { -} -function clearLog() { - logReq.cancel(); - - var clearParms = 'view=request&request=log&task=delete'; - var clearReq = new Request.JSON({url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: clearResponse}); - var tbody = $(logTable).getElement('tbody'); - var rows = tbody.getElements('tr'); - if ( rows && rows.length ) { - var minTime = rows[0].getElement('td').get('text'); - clearParms += "&minTime="+encodeURIComponent(minTime); - var maxTime = rows[rows.length-1].getElement('td').get('text'); - clearParms += "&maxTime="+encodeURIComponent(maxTime); - } - var form = $('logForm'); - clearReq.send(clearParms+"&"+form.toQueryString()); -} - -function filterLog() { - filter = {}; - filterFields.each( - function( field ) { - var selector = $('filter['+field+']'); - if ( !selector ) { - if ( window.console && window.console.log ) { - window.console.log('No selector found for ' + field); - } - return; - } - var value = selector.get('value'); - if ( value ) { - filter[field] = value; - } - } - ); - refreshLog(); -} - -function resetLog() { - filter = {}; - refreshLog(); -} - -var exportFormValidator = null; - -function exportLog() { - getModal('log_export'); - - if ( !exportFormValidator ) { - exportFormValidator = new Form.Validator.Inline($('exportForm'), { - useTitles: true, - warningPrefix: '', - errorPrefix: '' - }); - } else { - exportFormValidator.reset(); - } -} - -function exportResponse( response ) { - $('log_exportModal').unspin(); - if ( response.result == 'Ok' ) { - window.location.replace( thisUrl+'?view=request&request=log&task=download&key='+response.key+'&format='+response.format ); - } -} - -function exportFail( request ) { - $('log_exportModal').unspin(); - $('exportErrorText').set('text', request.status+' / '+request.statusText); - $('exportError').show(); - Error('Export request failed: '+request.status+' / '+request.statusText); -} - -function exportRequest() { - var form = $('exportForm'); - console.log(form); - $('exportErrorText').set('text', ''); - $('exportError').hide(); - if ( form.validate() ) { - var exportParms = "view=request&request=log&task=export"; - var exportReq = new Request.JSON({url: thisUrl, method: 'post', link: 'cancel', onSuccess: exportResponse, onFailure: exportFail}); - var selector = form.querySelectorAll('input[name=selector]:checked'); - if ( !selector.length ) { - alert("Please select how to filter logs"); - return; - } - var selection = selector[0].get('value'); - if ( selection == 'filter' || selection == 'current' ) { - $$('#filters select').each( - function( select ) { - exportParms += "&"+select.get('id')+"="+select.get('value'); - } - ); - } - if ( selection == 'current' ) { - var tbody = $(logTable).getElement( 'tbody' ); - var rows = tbody.getElements( 'tr' ); - if ( rows ) { - var minTime = rows[0].getElement('td').get('text'); - exportParms += "&minTime="+encodeURIComponent(minTime); - var maxTime = rows[rows.length-1].getElement('td').get('text'); - exportParms += "&maxTime="+encodeURIComponent(maxTime); - } - } - exportReq.send(exportParms+"&"+form.toQueryString()); - $('log_exportModal').spin(); - } -} - -function updateFilterSelectors() { - Object.each(options, - function( values, key ) { - var selector = $('filter['+key+']'); - if ( !selector ) { - if ( window.console && window.console.log ) { - window.console.log('No selector found for ' + key); - } - return; - } - selector.options.length = 1; - if ( key == 'Level' ) { - Object.each(values, - function( value, label ) { - selector.options[selector.options.length] = new Option(value, label); - } - ); - } else if ( key == 'ServerId' ) { - Object.each(values, - function( value, label ) { - selector.options[selector.options.length] = new Option(value, label); - } - ); - } else { - Object.each(values, - function( value, label ) { - selector.options[selector.options.length] = new Option(value, label); - } - ); - } - if ( filter[key] ) { - selector.set('value', filter[key]); - } - $j(selector).chosen('destroy'); - $j(selector).chosen(); - } - ); + $j('#totalLogs').text(data.total); + $j('#availLogs').text(data.totalNotFiltered); + $j('#lastUpdate').text(data.updated); + $j('#displayLogs').text(startRow + ' to ' + stopRow); } function initPage() { - displayLimit = initialDisplayLimit; - for ( var i = 1; i <= 9; i++ ) { - logCodes[''+i] = 'DB'+i; - } - logTable = new HtmlTable( $('logTable'), - { - zebra: true, - sortable: true, - sortReverse: true + var backBtn = $j('#backBtn'); + + // Init the bootstrap-table with custom icons + table.bootstrapTable({icons: icons}); + + // Assign inf, err, fat, dbg color classes to the rows in the table + table.on('post-body.bs.table', function(data) { + var lvl_ndx = $j('#logTable tr th').filter(function() { + return $j(this).text().trim() == 'Level'; + }).index(); + + $j('#logTable tr').each(function(ndx, row) { + var row = $j(row); + var level = row.find('td').eq(lvl_ndx).text().trim(); + + if (( level == 'FAT' ) || ( level == 'PNC' )) { + row.addClass('log-fat'); + } else if ( level == 'ERR' ) { + row.addClass('log-err'); + } else if ( level == 'WAR' ) { + row.addClass('log-war'); + } else if ( level == 'DBG' ) { + row.addClass('log-dbg'); } - ); - logTable.addEvent( 'sort', function( tbody, index ) { - var header = tbody.getParent('table').getElement('thead'); - var columns = header.getElement('tr').getElements('th'); - var column = columns[index]; - sortReversed = column.hasClass('table-th-sort-rev'); - if ( logCount > displayLimit ) { - var rows = tbody.getElements('tr'); - var startIndex; - if ( sortReversed ) { - startIndex = displayLimit; - } else { - startIndex = 0; - } - for ( var i = startIndex; logCount > displayLimit; i++ ) { - rows[i].destroy(); - logCount--; - } - $('displayLogs').set('text', logCount); - } // end if loCount > displayLimit - } - ); - new Asset.css('css/spinner.css'); - fetchNextLogs(); + }); + }); + + // Don't enable the back button if there is no previous zm page to go back to + backBtn.prop('disabled', !document.referrer.length); + + // Manage the BACK button + document.getElementById("backBtn").addEventListener("click", function onBackClick(evt) { + evt.preventDefault(); + window.history.back(); + }); + + // Manage the REFRESH Button + document.getElementById("refreshBtn").addEventListener("click", function onRefreshClick(evt) { + evt.preventDefault(); + window.location.reload(true); + }); } -// Kick everything off -window.addEventListener('DOMContentLoaded', initPage); +$j(document).ready(function() { + initPage(); +}); diff --git a/web/skins/classic/views/js/newlog.js b/web/skins/classic/views/js/newlog.js deleted file mode 100644 index ddaabcfc8..000000000 --- a/web/skins/classic/views/js/newlog.js +++ /dev/null @@ -1,105 +0,0 @@ -var table = $j('#logTable'); - -/* -This is the format of the json object sent by bootstrap-table - -var params = -{ -"type":"get", -"data": - { - "search":"some search text", - "sort":"DateTime", - "order":"asc", - "offset":0, - "limit":25 - "filter": - { - "message":"some advanced search text" - "level":"some more advanced search text" - } - }, -"cache":true, -"contentType":"application/json", -"dataType":"json" -}; -*/ - -// Called by bootstrap-table to retrieve zm log data -function ajaxRequest(params) { - $j.getJSON(thisUrl + '?view=request&request=newlog&task=query', params.data) - .done(function(data) { - //console.log('Ajax parameters: ' + JSON.stringify(params)); - // rearrange the result into what bootstrap-table expects - params.success({total: data.total, totalNotFiltered: data.totalNotFiltered, rows: data.rows}); - updateHeaderStats(data); - }) - .fail(logAjaxFail); -} - -function updateHeaderStats(data) { - var pageNum = table.bootstrapTable('getOptions').pageNumber; - var pageSize = table.bootstrapTable('getOptions').pageSize; - var startRow = ( (pageNum - 1 ) * pageSize ) + 1; - var stopRow = pageNum * pageSize; - var newClass = (data.logstate == 'ok') ? 'text-success' : (data.logstate == 'alert' ? 'text-warning' : ((data.logstate == 'alarm' ? 'text-danger' : ''))); - - $j('#logState').text(data.logstate); - $j('#logState').removeClass('text-success'); - $j('#logState').removeClass('text-warning'); - $j('#logState').removeClass('text-danger'); - $j('#logState').addClass(newClass); - - $j('#totalLogs').text(data.total); - $j('#availLogs').text(data.totalNotFiltered); - $j('#lastUpdate').text(data.updated); - $j('#displayLogs').text(startRow + ' to ' + stopRow); -} - -function initPage() { - var backBtn = $j('#backBtn'); - - // Init the bootstrap-table with custom icons - table.bootstrapTable({icons: icons}); - - // Assign inf, err, fat, dbg color classes to the rows in the table - table.on('post-body.bs.table', function(data) { - var lvl_ndx = $j('#logTable tr th').filter(function() { - return $j(this).text().trim() == 'Level'; - }).index(); - - $j('#logTable tr').each(function(ndx, row) { - var row = $j(row); - var level = row.find('td').eq(lvl_ndx).text().trim(); - - if (( level == 'FAT' ) || ( level == 'PNC' )) { - row.addClass('log-fat'); - } else if ( level == 'ERR' ) { - row.addClass('log-err'); - } else if ( level == 'WAR' ) { - row.addClass('log-war'); - } else if ( level == 'DBG' ) { - row.addClass('log-dbg'); - } - }); - }); - - // Don't enable the back button if there is no previous zm page to go back to - backBtn.prop('disabled', !document.referrer.length); - - // Manage the BACK button - document.getElementById("backBtn").addEventListener("click", function onBackClick(evt) { - evt.preventDefault(); - window.history.back(); - }); - - // Manage the REFRESH Button - document.getElementById("refreshBtn").addEventListener("click", function onRefreshClick(evt) { - evt.preventDefault(); - window.location.reload(true); - }); -} - -$j(document).ready(function() { - initPage(); -}); diff --git a/web/skins/classic/views/log.php b/web/skins/classic/views/log.php index 8d2e9f293..d706365c3 100644 --- a/web/skins/classic/views/log.php +++ b/web/skins/classic/views/log.php @@ -23,77 +23,69 @@ if ( !canView('System') ) { return; } -$focusWindow = true; - xhtmlHeaders(__FILE__, translate('SystemLog')); ?> -
- -
-
- -
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - - - - - - - - - - - - - -
-
-
+
+ +
+  -  +  -  +  -  +  -  + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + +
diff --git a/web/skins/classic/views/newlog.php b/web/skins/classic/views/newlog.php deleted file mode 100644 index d706365c3..000000000 --- a/web/skins/classic/views/newlog.php +++ /dev/null @@ -1,91 +0,0 @@ - - - -
- -
-  -  -  -  -  -  -  -  - -
- -
- - -
- - - - - - - - - - - - - - - - - - - -
-
-