49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
import { dataFetch, routes } from "../core/runtime.js";
|
|
|
|
const rowsNode = document.querySelector("#event-rows");
|
|
|
|
export async function loadEvents() {
|
|
rowsNode.replaceChildren(emptyRow("正在读取"));
|
|
try {
|
|
const payload = await dataFetch(routes.events + "?limit=200");
|
|
const events = payload.events || [];
|
|
rowsNode.replaceChildren(...(events.length ? events.map(eventRow) : [emptyRow("暂无日志")]));
|
|
} catch (error) {
|
|
rowsNode.replaceChildren(emptyRow("读取失败:" + error.message));
|
|
}
|
|
}
|
|
|
|
function eventRow(item) {
|
|
const row = document.createElement("tr");
|
|
const occurredAt = document.createElement("td");
|
|
occurredAt.className = "left";
|
|
occurredAt.textContent = formatTime(item.occurred_at);
|
|
const event = document.createElement("td");
|
|
event.className = "left";
|
|
event.textContent = item.event || "-";
|
|
const status = document.createElement("td");
|
|
status.className = "left event-status " + (String(item.status || "").startsWith("成功") ? "ok" : "failed");
|
|
status.textContent = item.status || "-";
|
|
row.append(occurredAt, event, status);
|
|
return row;
|
|
}
|
|
|
|
function emptyRow(message) {
|
|
const row = document.createElement("tr");
|
|
const cell = document.createElement("td");
|
|
cell.className = "left empty";
|
|
cell.colSpan = 3;
|
|
cell.textContent = message;
|
|
row.append(cell);
|
|
return row;
|
|
}
|
|
|
|
function formatTime(value) {
|
|
const date = new Date(value);
|
|
if (Number.isNaN(date.getTime())) return "-";
|
|
return new Intl.DateTimeFormat("zh-CN", {
|
|
year: "numeric", month: "2-digit", day: "2-digit",
|
|
hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false
|
|
}).format(date);
|
|
}
|