showLogs("") var stompClient = null; function setConnected(connected) { var el = document.getElementById('websocketStatus'); el.style.visibility = connected ? 'visible' : 'hidden'; el.class = connected ? 'alert alert-info' : 'alert alert-danger'; if (!connected) { el.innerHTML = "Disconnected!"; } else { el.innerHTML = "Connected to CAS. Streaming logs based on [" + logConfigFileLocation + "]..."; } } function connect() { $("#logoutputarea").empty(); var socket = new SockJS(urls.logOutput); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { setConnected(true); stompClient.subscribe('/logs/logoutput', function (msg) { if (msg != null && msg.body != "") { showLogs(msg.body); } }); }); } function disconnect() { $("#logoutputarea").empty(); $("#logoutputarea").attr('readonly', 'readonly'); if (stompClient != null) { stompClient.disconnect(); } setConnected(false); } function getLogs() { stompClient.send(urls.logOutput, {}, {}); } function showLogs(message) { if (message != "") { $("#logoutputarea").val($("#logoutputarea").val() + "\n" + message); $("#logoutputarea").scrollTop(document.getElementById("logoutputarea").scrollHeight) } } disconnect(); connect(); setInterval(function () { getLogs(); }, 100); /************* * ***************/ $('#myTabs a').click(function (e) { e.preventDefault() $(this).tab('show') }) var alertHandler = (function () { var alertContainer = $('#alert-container'); var create = function (message, state) { //console.log('create the alert'); alertContainer.html('
' + message + '
') }; var destroy = function () { alertContainer.empty(); }; return { dismiss: function () { destroy(); }, show: function (msg, state) { create(msg, state); } } })(); var loggingDashboard = (function () { var json = null; var logLevels = ['trace', 'debug', 'info', 'warn', 'error']; var getData = function () { $.getJSON(urls.getConfiguration, function (data) { json = data; loggerTable(); }); }; var getAuditData = function () { $.getJSON(urls.getAuditLog, function (data) { loggerTableAudit(data); }); }; var loggerTableAudit = function (jsonData) { var t = $('#auditLogTable').DataTable({ "order": [[3, "desc"]], retrieve: true, columnDefs: [ {"width": "5%", "targets": 0}, {"width": "100%", "targets": 1}, { "targets": 2, render: function (data, type, full, meta) { var dd = data.toLowerCase(); if (dd.indexOf("created") != -1) { return '' + data; } if (dd.indexOf("validated") != -1) { return '' + data; } if (dd.indexOf("destroyed") != -1 || dd.indexOf("deleted") != -1) { return '' + data; } if (dd.indexOf("success") != -1) { return '' + data; } if (dd.indexOf("failed") != -1) { return '' + data; } return data; } } ] }); for (var i = 0; i < jsonData.length; i++) { var rec = jsonData[i]; t.row.add([ rec.principal, rec.resourceOperatedUpon, rec.actionPerformed, new Date(rec.whenActionWasPerformed), rec.clientIpAddress, rec.serverIpAddress ]).draw(false); } }; var loggerTable = function () { $('#loggersTable').DataTable({ "order": [[1, "desc"]], data: json.loggers, "drawCallback": function (settings) { var api = this.api(); if (api.page.info().pages > 1) { $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = "block"; } else { $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = "none"; } }, "initComplete": function (settings, data) { if (!settings.aoData || settings.aoData.length == 0) { $('#loadingMessage').addClass('hidden'); $('#errorLoadingData').removeClass('hidden'); } else { $('#loadingMessage').addClass('hidden'); $('#errorLoadingData').addClass('hidden'); $("#loggingDashboard .tabsContainer").removeClass('hidden'); } }, "processing": true, columnDefs: [ { "targets": 0, "className": 'details-control', "orderable": false, "data": 'appenders', "defaultContent": '', render: function (data, type, full, meta) { if (data.length > 0) { return ''; } else { return ''; } } }, { targets: 1, data: 'name', className: 'col-xs-5' }, { targets: 2, data: 'additive', className: 'additive col-xs-2', render: function (data, type, full, meta) { if (data) { return ''; } else { return ''; } } }, { targets: 3, data: 'state', className: 'col-xs-2' }, { targets: 4, data: 'level', className: 'col-xs-3', render: function (data, type, full, meta) { return toggleSwitch(data, type, full, meta); } } ] }); }; var toggleSwitch = function (data, type, full, meta) { // Todo: Add additional colors for the other options //console.log('toggleSwitch data',data); //console.log('type',type); //console.log('full',full); //console.log('meta',meta); //console.log(logLevels); var btnColor; switch (data.toLowerCase()) { case 'error': btnColor = 'danger'; break; case 'info': btnColor = 'info'; break; case 'warn': btnColor = 'warning'; break; default: btnColor = 'default'; } var btnGroup = '
' + '
'; return btnGroup; }; /* Formatting function for row details - modify as you need */ var viewAppenders = function (data) { return '' + '' + '' + '' + '
Appenders:' + JSON.stringify(data.appenders, null, 2) + '
'; }; var addEventHandlers = function () { //console.log('addEventHAndlers()'); $(document).on('click', '#loggersTable .dropdown-menu li a', function (e) { //console.log('status change', this); e.preventDefault(); var selText = $(this).text(); changeLogLevel(selText, this); }); $(document).on('click', '#loggersTable tbody td.details-control span', function () { var table = $('#loggersTable').DataTable(); var tr = $(this).closest('tr'); var row = table.row(tr); if (row.child.isShown()) { // This row is already open - close it row.child.hide(); tr.removeClass('shown'); } else { // Open this row row.child(viewAppenders(row.data()), 'info').show(); tr.addClass('shown'); } }); }; var changeLogLevel = function (newLevel, el) { /** * POST - /cas/status/logging/updateLoggerLevel * Allows you to change the log level for given logger. Parameters are: * loggerName, loggerLevel, additive (true/false) */ var table = $('#loggersTable').DataTable(); var data = table.row($(el).closest('tr')[0]).data(); var cell = table.cell($(el).closest('td')[0]); var jqxhr = $.post(urls.updateLevel, { loggerName: data.name, loggerLevel: newLevel, additive: data.additive }, function () { cell.data(newLevel).draw(); alertHandler.show('Successfully changed.', 'success'); }).fail(function () { alertHandler.show('Error saving change. Please try again', 'danger'); }); }; // initialization ******* (function init() { getData(); addEventHandlers(); getAuditData(); })(); return { getJson: function () { return json; }, showLoggersTable: function () { loggerTable(); } } })();