import { request } from '@/utils/request' /** 日志文件信息 */ export interface LogFileInfo { name: string date: string size: number modified: string } /** 日志统计 */ export interface LogStats { today: { total: number errors: number slow: number warns: number } daily: Array<{ date: string total: number errors: number slow: number }> } /** 埋点统计 */ export interface TrackStats { today: Array<{ event: string; count: number }> daily: Array<{ date: string; count: number }> events: Array<{ event: string; count: number }> } /** 埋点事件 */ export interface TrackEvent { id: number event: string page: string data: any user_id: number | null nickname: string | null created_at: string } /** 获取日志文件列表 */ export function getLogFiles(): Promise { return request({ url: '/logs/files' }) } /** 获取日志统计 */ export function getLogStats(): Promise { return request({ url: '/logs/stats' }) } /** 查询日志 */ export function queryLogs(params: { date: string level?: string keyword?: string page?: number pageSize?: number }): Promise<{ lines: string[]; total: number; page: number; pageSize: number }> { const { date, ...rest } = params // 过滤掉 undefined 值,防止被序列化为 "undefined" 字符串 const queryParams: Record = {} for (const [key, value] of Object.entries(rest)) { if (value !== undefined) queryParams[key] = value } return request({ url: `/logs/${date}`, data: queryParams }) } /** 获取埋点统计 */ export function getTrackStats(): Promise { return request({ url: '/logs/track/stats' }) } /** 查询埋点事件 */ export function queryTrackEvents(params?: { event?: string page?: number pageSize?: number }): Promise<{ list: TrackEvent[]; total: number; page: number; pageSize: number }> { // 过滤掉 undefined 值 const queryParams: Record = {} if (params) { for (const [key, value] of Object.entries(params)) { if (value !== undefined) queryParams[key] = value } } return request({ url: '/logs/track/list', data: queryParams }) }