All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev-static.js.logstream.js Maven / Gradle / Ivy

var myself = $('script[src*=logstream]');

// Get the non application root path
var frameworkRootPath = myself.attr('data-frameworkRootPath');   
if (typeof frameworkRootPath === "undefined" ) {
    var pathname = window.location.pathname;
    var frameworkRootPath = pathname.substr(0, pathname.indexOf('/dev-v1/'));
}
// Get the streaming path
var streamingPath = myself.attr('data-streamingPath');
if (typeof streamingPath === "undefined" ) {
   var streamingPath = "/dev-v1/logstream";
}

var zoom = 0.90;
var linespace = 1.00;
var tabspace = 1;
var increment = 0.05;

var webSocket;
var tab = " ";
var space = " ";

var isRunning = true;
var logScrolling = true;

var logfilter = "";

var localstoragekey = "quarkus_logging_manager_state";

$('document').ready(function () {
    loadSettings();
    
    openSocket();
    // Make sure we stop the connection when the browser close
    window.onbeforeunload = function () {
        closeSocket();
    };
    
    logstreamStopStartButton.addEventListener("click", stopStartEvent);
    logstreamClearLogButton.addEventListener("click", clearScreenEvent);
    logstreamZoomOutButton.addEventListener("click", zoomOutEvent);
    logstreamZoomInButton.addEventListener("click", zoomInEvent);
    logstreamFollowLogButton.addEventListener("click", followLogEvent);
    logstreamFilterModalInputButton.addEventListener("click", applyLogFilter);
    
    addControlCListener();
    addEnterListener();
    addScrollListener();
    addLineSpaceListener();
    addTabSizeListener();
    
    $('[data-toggle="tooltip"]').tooltip();    

    logstreamFilterModalInput.addEventListener("keyup", function(event) {
        if (event.keyCode === 13) {
            event.preventDefault();
            logstreamFilterModalInputButton.click();
        }
    });
    
    $("#logLevelFilterInput").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        $("#logstreamLogLevelsModalTableBody tr").filter(function() {
            $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
        });
    });
    
    $('#logstreamFilterModal').on('shown.bs.modal', function () {
        $('#logstreamFilterModalInput').trigger('focus');
    });
    
    // save settings on hide
    document.addEventListener('visibilitychange', function() {
        if (document.visibilityState == 'hidden') { 
            saveSettings();
        }
    });
    
});

function loadSettings(){
    if (localstoragekey in localStorage) {
        var state = JSON.parse(localStorage.getItem(localstoragekey));

        zoom = state.zoom;
        applyZoom();

        linespace = state.linespace;
        applyLineSpacing();

        tabspace = state.tabspace;
        applyTabSpacing();

        logScrolling = state.logScrolling;
        applyFollowLog();

        $("#logstreamFilterModalInput").val(state.filter);
        applyLogFilter();
        
        $('#logstreamColumnsModalLevelIconSwitch').prop('checked', state.levelIconSwitch);
        $('#logstreamColumnsModalSequenceNumberSwitch').prop('checked', state.sequenceNumberSwitch);
        $('#logstreamColumnsModalDateSwitch').prop('checked', state.dateSwitch);
        $('#logstreamColumnsModalTimeSwitch').prop('checked', state.timeSwitch);
        $('#logstreamColumnsModalLevelSwitch').prop('checked', state.levelSwitch);
        $('#logstreamColumnsModalSourceClassFullAbbreviatedSwitch').prop('checked', state.sourceClassFullAbbreviatedSwitch);
        $('#logstreamColumnsModalSourceClassFullSwitch').prop('checked', state.sourceClassFullSwitch);
        $('#logstreamColumnsModalSourceClassSwitch').prop('checked', state.sourceClassSwitch);
        $('#logstreamColumnsModalSourceMethodNameSwitch').prop('checked', state.sourceMethodNameSwitch);
        $('#logstreamColumnsModalThreadIdSwitch').prop('checked', state.threadIdSwitch);
        $('#logstreamColumnsModalThreadNameSwitch').prop('checked', state.threadNameSwitch);
        $('#logstreamColumnsModalMessageSwitch').prop('checked', state.messageSwitch);
        $('#logstreamColumnsModalHostNameSwitch').prop("checked", state.hostNameSwitch);
        $('#logstreamColumnsModalLoggerNameAbbreviatedSwitch').prop("checked", state.loggerNameAbbreviatedSwitch);
        $('#logstreamColumnsModalLoggerNameSwitch').prop("checked", state.loggerNameSwitch);
        $('#logstreamColumnsModalLoggerClassNameSwitch').prop("checked", state.loggerClassNameSwitch);
        $('#logstreamColumnsModalSourceFileNameSwitch').prop("checked", state.sourceFileNameSwitch);
        $('#logstreamColumnsModalSourceLineNumberSwitch').prop("checked", state.sourceLineNumberSwitch);
        $('#logstreamColumnsModalProcessIdSwitch').prop("checked", state.processIdSwitch);
        $('#logstreamColumnsModalProcessNameSwitch').prop("checked", state.processNameSwitch);
    }    
}

function saveSettings(){
    // Running state
    var state = {
        "zoom": zoom,
        "linespace": linespace,
        "tabspace": tabspace,
        "logScrolling": logScrolling,
        "filter": logfilter,
        "levelIconSwitch": $('#logstreamColumnsModalLevelIconSwitch').is(":checked"),
        "sequenceNumberSwitch": $('#logstreamColumnsModalSequenceNumberSwitch').is(":checked"),
        "dateSwitch": $('#logstreamColumnsModalDateSwitch').is(":checked"),
        "timeSwitch": $('#logstreamColumnsModalTimeSwitch').is(":checked"),
        "levelSwitch": $('#logstreamColumnsModalLevelSwitch').is(":checked"),
        "sourceClassFullAbbreviatedSwitch": $('#logstreamColumnsModalSourceClassFullAbbreviatedSwitch').is(":checked"),
        "sourceClassFullSwitch": $('#logstreamColumnsModalSourceClassFullSwitch').is(":checked"),
        "sourceClassSwitch": $('#logstreamColumnsModalSourceClassSwitch').is(":checked"),
        "sourceMethodNameSwitch": $('#logstreamColumnsModalSourceMethodNameSwitch').is(":checked"),
        "threadIdSwitch": $('#logstreamColumnsModalThreadIdSwitch').is(":checked"),
        "threadNameSwitch": $('#logstreamColumnsModalThreadNameSwitch').is(":checked"),
        "messageSwitch": $('#logstreamColumnsModalMessageSwitch').is(":checked"),
        "hostNameSwitch": $('#logstreamColumnsModalHostNameSwitch').is(":checked"),
        "loggerNameAbbreviatedSwitch": $('#logstreamColumnsModalLoggerNameAbbreviatedSwitch').is(":checked"),
        "loggerNameSwitch": $('#logstreamColumnsModalLoggerNameSwitch').is(":checked"),
        "loggerClassNameSwitch": $('#logstreamColumnsModalLoggerClassNameSwitch').is(":checked"),
        "sourceFileNameSwitch": $('#logstreamColumnsModalSourceFileNameSwitch').is(":checked"),
        "sourceLineNumberSwitch": $('#logstreamColumnsModalSourceLineNumberSwitch').is(":checked"),
        "processIdSwitch": $('#logstreamColumnsModalProcessIdSwitch').is(":checked"),
        "processNameSwitch": $('#logstreamColumnsModalProcessNameSwitch').is(":checked")
    };

    localStorage.setItem(localstoragekey, JSON.stringify(state));
}

function addControlCListener(){
    // Add listener to stop
    var ctrlDown = false,
            ctrlKey = 17,
            cmdKey = 91,
            cKey = 67;

    $(document).keydown(function (e) {
        if (e.keyCode === ctrlKey || e.keyCode === cmdKey)
            ctrlDown = true;
    }).keyup(function (e) {
        if (e.keyCode === ctrlKey || e.keyCode === cmdKey)
            ctrlDown = false;
    });

    $(document).keydown(function (e) {
        if (e.target.tagName === "BODY") {
            if (ctrlDown && (e.keyCode === cKey))stopLog();
        }
    });
}

function addScrollListener(){
    $(document).on('mousewheel DOMMouseScroll', function(event) {
        if (event.shiftKey) {
            if( event.originalEvent.detail > 0 || event.originalEvent.wheelDelta < 0 ) {
                zoomOutEvent();
            } else {
                zoomInEvent();
            }
            return false;
        }
    });
}

function addLineSpaceListener(){
    $(document).keydown(function (e) {
        if (e.target.tagName === "BODY") {
            if (e.shiftKey && e.keyCode === 38) {
                lineSpaceIncreaseEvent();
            }else if (e.shiftKey && e.keyCode === 40) {
                lineSpaceDecreaseEvent();
            }
        }
    });
}

function addTabSizeListener(){
    $(document).keydown(function (e) {
        if (e.target.tagName === "BODY") {
            if (e.shiftKey && e.keyCode === 39) {
                tabSpaceIncreaseEvent();
            }else if (e.shiftKey && e.keyCode === 37) {
                tabSpaceDecreaseEvent();
            }
        }
    });
}

function addEnterListener(){
    $(document).keydown(function (e) {
        if (e.target.tagName === "BODY") {
            if (e.keyCode === 13 && !$('#logstreamFilterModal').hasClass('show')){
                writeResponse("
"); var element = document.getElementById("logstreamLogTerminal"); element.scrollIntoView({block: "end"}); } } }); } function stopStartEvent() { if (isRunning) { stopLog(); } else { startLog(); } } function stopLog() { webSocket.send("stop"); writeResponse("
"); logstreamStopStartButton.innerHTML = ""; $("#logstreamFollowLogButton").hide(); isRunning = false; } function startLog() { webSocket.send("start"); logstreamStopStartButton.innerHTML = ""; $("#logstreamFollowLogButton").show(); isRunning = true; } function clearScreenEvent() { logstreamLogTerminalText.innerHTML = ""; } function applyLineSpacing(){ $('#logstreamLogTerminal').css("line-height", linespace); } function applyTabSpacing(){ if(tabspace === null || isNaN(tabspace))tabspace = 1; tab = ""; for (i = 0; i < tabspace; i++) { tab = tab + space; }; } function lineSpaceDecreaseEvent() { linespace = parseFloat(linespace) - parseFloat(increment); linespace = parseFloat(linespace).toFixed(2); showInfoMessage("" + space + linespace); applyLineSpacing(); } function lineSpaceIncreaseEvent() { linespace = parseFloat(linespace) + parseFloat(increment); linespace = parseFloat(linespace).toFixed(2); showInfoMessage("" + space + linespace); applyLineSpacing(); } function tabSpaceDecreaseEvent() { if(tabspace>1){ tabspace = tabspace - 1; showInfoMessage("" + space + tabspace); applyTabSpacing(); } } function tabSpaceIncreaseEvent() { tabspace = tabspace + 1; showInfoMessage("" + space + tabspace); applyTabSpacing(); } function applyZoom(){ $('#logstreamLogTerminalText').css("font-size", zoom + "em"); } function zoomOutEvent() { zoom = parseFloat(zoom) - parseFloat(increment); zoom = parseFloat(zoom).toFixed(2); showInfoMessage("" + space + zoom); applyZoom(); } function zoomInEvent() { zoom = parseFloat(zoom) + parseFloat(increment); zoom = parseFloat(zoom).toFixed(2); showInfoMessage("" + space + zoom); applyZoom(); } function showInfoMessage(msg){ $('#logstreamInformationSection').empty().show().html(msg).delay(3000).fadeOut(300); } function followLogEvent() { logScrolling = !logScrolling; applyFollowLog(); } function applyFollowLog(){ if (logScrolling) { $("#logstreamFollowLogButtonIcon").addClass("text-success"); $("#logstreamFollowLogButtonIcon").addClass("fa-spin"); showInfoMessage("" + space + "Autoscroll ON"); }else{ $("#logstreamFollowLogButtonIcon").removeClass("text-success"); $("#logstreamFollowLogButtonIcon").removeClass("fa-spin"); showInfoMessage("" + space + "Autoscroll OFF"); } } function scrollToTop() { logScrolling = false; } function scrollToBottom() { logScrolling = true; } function applyLogFilter(){ logfilter = $("#logstreamFilterModalInput").val(); if(logfilter===""){ clearLogFilter(); }else{ logstreamCurrentFilter.innerHTML = "" + logfilter + " "; var currentlines = $("#logstreamLogTerminalText").html().split(''); var filteredHtml = ""; var i; for (i = 0; i < currentlines.length; i++) { var htmlline = currentlines[i]; filteredHtml = filteredHtml + getLogLine(htmlline) + ""; } logstreamLogTerminalText.innerHTML = ""; writeResponse(filteredHtml); } $('#logstreamFilterModal').modal('hide'); } function getLogLine(htmlline){ if(logfilter===""){ return htmlline; }else{ var textline = $(htmlline).text(); if(textline.includes(logfilter)){ return htmlline; }else{ return htmlline.replace('', ''); } } } function clearLogFilter(){ logfilter = ""; $("#logstreamFilterModalInput").val(""); logstreamCurrentFilter.innerHTML = ""; var currentlines = $("#logstreamLogTerminalText").html().split(''); var filteredHtml = ""; var i; for (i = 0; i < currentlines.length; i++) { var htmlline = currentlines[i].replace('', ''); filteredHtml = filteredHtml + htmlline + ""; } logstreamLogTerminalText.innerHTML = ""; writeResponse(filteredHtml); } function getLevelIcon(level) { if($('#logstreamColumnsModalLevelIconSwitch').is(":checked")){ level = level.toUpperCase(); if (level === "WARNING" || level === "WARN") return "" + tab; if (level === "SEVERE" || level === "ERROR") return "" + tab; if (level === "INFO") return "" + tab; if (level === "DEBUG") return "" + tab; return "" + tab; } return ""; } function getHostName(hostName) { if($('#logstreamColumnsModalHostNameSwitch').is(":checked")){ return hostName + tab; } return ""; } function getSequenceNumber(sequenceNumber){ if($('#logstreamColumnsModalSequenceNumberSwitch').is(":checked")){ return "" + sequenceNumber + "" + tab; } return ""; } function getDateString(timestamp){ if($('#logstreamColumnsModalDateSwitch').is(":checked")){ return timestamp.slice(0, 10) + space; } return ""; } function getTimeString(timestamp){ if($('#logstreamColumnsModalTimeSwitch').is(":checked")){ return timestamp.slice(11, 23).replace(".", ",") + tab; } return ""; } function getLevelText(level) { if($('#logstreamColumnsModalLevelSwitch').is(":checked")){ level = level.toUpperCase(); if (level === "WARNING" || level === "WARN") return "WARN" + space + "" + tab; if (level === "SEVERE" || level === "ERROR") return "ERROR" + tab; if (level === "INFO") return "INFO" + space + "" + tab; if (level === "DEBUG") return "DEBUG" + tab; return level + tab; } return ""; } function getLoggerNameAbbreviated(loggerNameAbbreviated){ if($('#logstreamColumnsModalLoggerNameAbbreviatedSwitch').is(":checked")){ return "[" + loggerNameAbbreviated + "]" + tab; } return ""; } function getLoggerName(loggerName){ if($('#logstreamColumnsModalLoggerNameSwitch').is(":checked")){ return "[" + loggerName + "]" + tab; } return ""; } function getLoggerClassName(loggerClassName){ if($('#logstreamColumnsModalLoggerClassNameSwitch').is(":checked")){ return "[" + loggerClassName + "]" + tab; } return ""; } function getClassFullAbbreviatedName(sourceClassNameFull, lineNumber, sourceClassNameFullShort) { if($('#logstreamColumnsModalSourceClassFullAbbreviatedSwitch').is(":checked")){ if (isClickableClassName(sourceClassNameFull, lineNumber)) { return makeClickableClassNameLink(sourceClassNameFull, lineNumber, sourceClassNameFullShort); } return "[" + sourceClassNameFullShort + "]" + tab; } return ""; } function getFullClassName(sourceClassNameFull, lineNumber) { if($('#logstreamColumnsModalSourceClassFullSwitch').is(":checked")){ if (isClickableClassName(sourceClassNameFull, lineNumber)) { return makeClickableClassNameLink(sourceClassNameFull, lineNumber, sourceClassNameFull); } return "[" + sourceClassNameFull + "]" + tab; } return ""; } function getClassName(sourceClassNameFull, lineNumber, className) { if($('#logstreamColumnsModalSourceClassSwitch').is(":checked")){ if (isClickableClassName(sourceClassNameFull, lineNumber)) { return makeClickableClassNameLink(sourceClassNameFull, lineNumber, className); } return "[" + className + "]" + tab; } return ""; } function isClickableClassName(className, lineNumber){ if (lineNumber !== undefined && lineNumber && lineNumber !== "" && className !== undefined && appClassLocation(className) && ideKnown()) { return true; } return false; } function makeClickableClassNameLink(className, lineNumber, display){ return "[" + display + "]" + tab; } function getMethodName(methodName) { if($('#logstreamColumnsModalSourceMethodNameSwitch').is(":checked")){ return methodName + tab; } return ""; } function getFileName(fileName){ if($('#logstreamColumnsModalSourceFileNameSwitch').is(":checked")){ return "" + fileName + "" + space; } return ""; } function getLineNumber(lineNumber){ if($('#logstreamColumnsModalSourceLineNumberSwitch').is(":checked")){ return "(line: " + lineNumber + ")" + tab; } return ""; } function getProcessId(processName, processId) { if($('#logstreamColumnsModalProcessIdSwitch').is(":checked")){ return "(" + processId + ")" + tab; } return ""; } function getProcessName(processName, processId) { if($('#logstreamColumnsModalProcessNameSwitch').is(":checked")){ return "(" + processName + ")" + tab; } return ""; } function getThreadId(threadName, threadId) { if($('#logstreamColumnsModalThreadIdSwitch').is(":checked")){ return "(" + threadId + ")" + tab; } return ""; } function getThreadName(threadName, threadId) { if($('#logstreamColumnsModalThreadNameSwitch').is(":checked")){ return "(" + threadName + ")" + tab; } return ""; } function getLogMessage(message){ if($('#logstreamColumnsModalMessageSwitch').is(":checked")){ // Make links clickable if(message.includes("http://")){ message = makeLink(message, "http://"); } if(message.includes("https://")){ message = makeLink(message, "https://"); } // Make sure multi line is supported if(message.includes('\n')){ var htmlifiedLines = []; var lines = message.split('\n'); for (var i = 0; i < lines.length; i++) { var line = lines[i]; line = line.replace(/ /g, '\u00a0'); if(i === lines.length-1){ htmlifiedLines.push(line); }else{ htmlifiedLines.push(line + '
'); } } message = htmlifiedLines.join(''); } return message; } return ""; } function makeLink(message, protocol){ var url = message.substring(message.indexOf(protocol)); if(url.includes(" ")){ url = url.substr(0,url.indexOf(' ')); } var link = "" + url + ""; return message.replace(url, link); } function enhanceStacktrace(stacktrace) { var enhanceStacktrace = []; var lines = stacktrace.split('\n'); for (var i = 0; i < lines.length; i++) { var line = lines[i].trim(); if (line) { var startWithAt = line.startsWith("at "); if (!startWithAt) { var parts = line.split(":"); line = "" + parts[0] + ":" + parts[1]; } else { if(!line.includes(".zig")){ var parts = line.split(" "); // Make it clickable var classMethodFileNumber = parts[1]; var classMethodFileNumberSplit = classMethodFileNumber.split("("); var classMethod = classMethodFileNumberSplit[0]; var fileNumber = classMethodFileNumberSplit[1]; givenClassName = classMethod.substring(0, classMethod.lastIndexOf('.')); lineNumber = fileNumber.substring(fileNumber.lastIndexOf(':') + 1, fileNumber.lastIndexOf(')')); if(isClickableClassName(givenClassName, lineNumber)){ line = "" + line + ""; } } line = space + space + space + space + space + space + line; } } enhanceStacktrace.push(line + '
'); } var newStacktrace = enhanceStacktrace.join(''); return "" + newStacktrace + ""; } function writeResponse(text) { var logfile = $('#logstreamLogTerminalText'); logfile.append(text); if (logScrolling) { var element = document.getElementById("logstreamLogTerminal"); element.scrollIntoView({block: "end"}); } // TODO: Trim the top if it gets too big ? } function openSocket() { // Ensures only one connection is open at a time if (webSocket !== undefined && webSocket.readyState !== WebSocket.CLOSED) { writeResponse("Already connected..."); return; } // Create a new instance of the websocket var new_uri; if (window.location.protocol === "https:") { new_uri = "wss:"; } else { new_uri = "ws:"; } new_uri += "//" + window.location.host + frameworkRootPath + streamingPath; webSocket = new WebSocket(new_uri); webSocket.onmessage = function (event) { var json = JSON.parse(event.data); if(json.type === "logLine"){ messageLog(json); }else if(json.type === "init"){ populateLoggerLevelModal(json.loggers,json.levels); } }; webSocket.onclose = function () { saveSettings(); if (isRunning) { stopLog(); } writeResponse("Connection closed
"); }; function messageLog(json) { var timestamp = new Date(json.timestamp); var level = json.level; var isoDateTime = new Date(timestamp.getTime() - (timestamp.getTimezoneOffset() * 60000)).toISOString(); var htmlLine = "" + getLevelIcon(level) + getSequenceNumber(json.sequenceNumber) + getHostName(json.hostName) + getDateString(isoDateTime) + getTimeString(isoDateTime) + getLevelText(level) + getLoggerNameAbbreviated(json.loggerNameShort) + getLoggerName(json.loggerName) + getLoggerClassName(json.loggerClassName) + getClassFullAbbreviatedName(json.sourceClassNameFull, json.sourceLineNumber,json.sourceClassNameFullShort) + getFullClassName(json.sourceClassNameFull,json.sourceLineNumber) + getClassName(json.sourceClassNameFull,json.sourceLineNumber,json.sourceClassName) + getMethodName(json.sourceMethodName) + getFileName(json.sourceFileName) + getLineNumber(json.sourceLineNumber) + getProcessId(json.processName, json.processId) + getProcessName(json.processName, json.ProcessId) + getThreadId(json.threadName, json.threadId) + getThreadName(json.threadName, json.threadId) + getLogMessage(json.formattedMessage) + "
"; if (json.stacktrace) { for (var i in json.stacktrace) { var stacktrace = enhanceStacktrace(json.stacktrace[i]); htmlLine = htmlLine + stacktrace; } } htmlLine = htmlLine + "
"; if(logfilter!=""){ writeResponse(getLogLine(htmlLine)); }else{ writeResponse(htmlLine); } } } function closeSocket() { webSocket.close(); } function populateLoggerLevelModal(loggerNamesArray, levelNamesArray){ var tbodyLevels = $('#logstreamLogLevelsModalTableBody'); // Populate the dropdown for (var i = 0; i < loggerNamesArray.length; i++) { var row = "" + loggerNamesArray[i].name + "" + createDropdown(loggerNamesArray[i].name, loggerNamesArray[i].effectiveLevel,levelNamesArray) + ""; tbodyLevels.append(row); } $('.logleveldropdown').on('change', function() { changeLogLevel(this.value, $(this).find('option:selected').text()); }); populated = true; } function createLevelRowId(logger){ var name = logger + "_row"; return name.replaceAll(".", "_"); } function getTextClass(level){ level = level.toUpperCase(); if (level === "WARNING" || level === "WARN") return "text-warning"; if (level === "SEVERE" || level === "ERROR") return "text-danger"; if (level === "INFO") return "text-primary"; if (level === "DEBUG") return "text-secondary"; return ""; } function createDropdown(name, level, levelNamesArray){ var dd = ""; return dd; } function changeLogLevel(val,text){ webSocket.send("update|" + val + "|" + text); // Also change the style of the row var id = createLevelRowId(val); $('#' + id).removeClass(); $('#' + id).addClass(getTextClass(text)); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy