Files
fhd_scan_web_app/frontend/js/log-panel.js
T
gardentech f34817d5b6 Initial commit: scan_web integrated recording UI
FastAPI backend + vanilla JS frontend for LiDAR/camera startup, camera
settings, and rosbag recording, unifying the previous scan_gui/scan_gui_dual/
scan_gui_triple desktop tools into one web app.
2026-08-07 14:26:00 +09:00

46 lines
1.5 KiB
JavaScript

// Unified [tag] log scrollback — consumes /ws/logs (backlog once, then new
// lines as they're appended to lidar.log/camera.log/recording.log).
const MAX_RENDERED_LINES = 2000;
export function initLogPanel() {
const body = document.getElementById("log-body");
const autoscrollChk = document.getElementById("log-autoscroll");
const clearBtn = document.getElementById("btn-log-clear");
function appendLine({ tag, line }) {
const row = document.createElement("div");
row.className = `log-line tag-${tag}`;
const tagSpan = document.createElement("span");
tagSpan.className = "log-tag";
tagSpan.textContent = `[${tag}]`;
const textSpan = document.createElement("span");
textSpan.className = "log-text";
textSpan.textContent = line;
row.appendChild(tagSpan);
row.appendChild(textSpan);
body.appendChild(row);
while (body.childElementCount > MAX_RENDERED_LINES) {
body.removeChild(body.firstChild);
}
if (autoscrollChk.checked) {
body.scrollTop = body.scrollHeight;
}
}
clearBtn.onclick = () => { body.innerHTML = ""; };
const proto = location.protocol === "https:" ? "wss:" : "ws:";
function connect() {
const ws = new WebSocket(`${proto}//${location.host}/ws/logs`);
ws.onmessage = (ev) => {
const msg = JSON.parse(ev.data);
if (msg.backlog) msg.backlog.forEach(appendLine);
if (msg.lines) msg.lines.forEach(appendLine);
};
ws.onclose = () => setTimeout(connect, 1500);
ws.onerror = () => ws.close();
}
connect();
}