2026-04-16 08:38:18 +08:00
|
|
|
import { request } from '../client'
|
2026-04-11 21:33:04 +08:00
|
|
|
|
|
|
|
|
export interface LogFileInfo {
|
|
|
|
|
name: string
|
|
|
|
|
size: string
|
|
|
|
|
modified: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface LogEntry {
|
|
|
|
|
timestamp: string
|
|
|
|
|
level: string
|
|
|
|
|
logger: string
|
|
|
|
|
message: string
|
|
|
|
|
raw: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function fetchLogFiles(): Promise<LogFileInfo[]> {
|
2026-04-16 08:38:18 +08:00
|
|
|
const res = await request<{ files: LogFileInfo[] }>('/api/hermes/logs')
|
2026-04-11 21:33:04 +08:00
|
|
|
return res.files
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function fetchLogs(name: string, params?: {
|
|
|
|
|
lines?: number
|
|
|
|
|
level?: string
|
|
|
|
|
session?: string
|
|
|
|
|
since?: string
|
|
|
|
|
}): Promise<LogEntry[]> {
|
|
|
|
|
const query = new URLSearchParams()
|
|
|
|
|
if (params?.lines) query.set('lines', String(params.lines))
|
|
|
|
|
if (params?.level) query.set('level', params.level)
|
|
|
|
|
if (params?.session) query.set('session', params.session)
|
|
|
|
|
if (params?.since) query.set('since', params.since)
|
|
|
|
|
const qs = query.toString()
|
2026-04-16 08:38:18 +08:00
|
|
|
const res = await request<{ entries: (LogEntry | null)[] }>(`/api/hermes/logs/${name}${qs ? `?${qs}` : ''}`)
|
2026-04-11 21:33:04 +08:00
|
|
|
return res.entries.filter((e): e is LogEntry => e !== null)
|
|
|
|
|
}
|