Files

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);
}