Compare commits
No commits in common. "f31b07caa767768c453346efe29725c5859c42ad" and "d850e00c4e969e8cae8b7bc34f518d65e5070f1a" have entirely different histories.
f31b07caa7
...
d850e00c4e
|
|
@ -50,17 +50,11 @@ function createLogFile(): string {
|
|||
return `${logsDir}/${timestamp}_${releaseSha}.jsonl`
|
||||
}
|
||||
|
||||
function extractTimestamp(filename: string): string {
|
||||
const stem = filename.replace(".jsonl", "")
|
||||
// New format: timestamp_sha, Old format: sha_timestamp
|
||||
if (/^\d{4}-/.test(stem)) return stem.split("_").slice(0, -1).join("_")
|
||||
return stem.split("_").pop() || ""
|
||||
}
|
||||
|
||||
export function listLogFiles(): string[] {
|
||||
return readdirSync(logsDir)
|
||||
.filter((f) => f.endsWith(".jsonl"))
|
||||
.sort((a, b) => extractTimestamp(b).localeCompare(extractTimestamp(a)))
|
||||
.sort()
|
||||
.reverse()
|
||||
.slice(0, 20)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,32 +108,11 @@ function EventRow({ event, index }: { event: StoredLogEvent; index: number }) {
|
|||
)
|
||||
}
|
||||
|
||||
function parseLogFilename(file: string): { sha: string; isoStr: string } {
|
||||
const stem = file.replace(".jsonl", "")
|
||||
// New format: timestamp_sha (e.g. 2026-03-10T18-06-23-561Z_cb10121)
|
||||
// Old format: sha_timestamp (e.g. cb10121_2026-03-10T18-06-23-561Z)
|
||||
const isNewFormat = /^\d{4}-/.test(stem)
|
||||
const parts = stem.split("_")
|
||||
|
||||
let sha: string
|
||||
let rawTimestamp: string
|
||||
if (isNewFormat) {
|
||||
sha = parts.pop() || "unknown"
|
||||
rawTimestamp = parts.join("_")
|
||||
} else {
|
||||
rawTimestamp = parts.pop() || ""
|
||||
sha = parts.join("_") || "unknown"
|
||||
}
|
||||
|
||||
const isoStr = rawTimestamp.replace(/T(\d{2})-(\d{2})-(\d{2})-(\d+)Z/, "T$1:$2:$3.$4Z")
|
||||
return { sha, isoStr }
|
||||
}
|
||||
|
||||
function Sidebar({ files, selectedFile }: { files: string[]; selectedFile?: string }) {
|
||||
// Group files by sha, sorted by most recent file in each group
|
||||
const grouped: Record<string, string[]> = {}
|
||||
for (const file of files) {
|
||||
const { sha } = parseLogFilename(file)
|
||||
const sha = file.replace(".jsonl", "").split("_").pop() || "unknown"
|
||||
const list = grouped[sha] || (grouped[sha] = [])
|
||||
list.push(file)
|
||||
}
|
||||
|
|
@ -151,7 +130,8 @@ function Sidebar({ files, selectedFile }: { files: string[]; selectedFile?: stri
|
|||
<div style="padding: 4px 16px; color: #6b7280; font-size: 11px; font-family: monospace">{sha}</div>
|
||||
{shaFiles.map((file) => {
|
||||
const isSelected = file === selectedFile
|
||||
const { isoStr } = parseLogFilename(file)
|
||||
// Parse ISO timestamp back from filename: 2026-03-10T02-56-59-938Z_sha.jsonl
|
||||
const isoStr = file.replace(/_[^_]+\.jsonl$/, "").replace(/T(\d{2})-(\d{2})-(\d{2})-(\d+)Z/, "T$1:$2:$3.$4Z")
|
||||
const bg = isSelected ? "#2a2a2a" : "transparent"
|
||||
return (
|
||||
<a
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user