Files
clash-proxy/src/services/ipc-log-service.ts
Sline 0b4403b67b refactor: frontend (#5068)
* refactor: setting components

* refactor: frontend

* fix: settings router
2025-10-15 18:57:44 +08:00

68 lines
1.9 KiB
TypeScript

// IPC-based log service using Tauri commands with streaming support
import { clearLogs as clearLogsCmd } from "@/services/cmds";
type LogLevel = "debug" | "info" | "warning" | "error" | "all";
interface ILogItem {
time?: string;
type: string;
payload: string;
[key: string]: any;
}
// Start logs monitoring with specified level
export const startLogsStreaming = async (logLevel: LogLevel = "info") => {
try {
// await startLogsMonitoring(logLevel === "all" ? undefined : logLevel);
console.log(
`[IPC-LogService] Started logs monitoring with level: ${logLevel}`,
);
} catch (error) {
console.error("[IPC-LogService] Failed to start logs monitoring:", error);
}
};
// Stop logs monitoring
export const stopLogsStreaming = async () => {
try {
// await stopLogsMonitoring();
console.log("[IPC-LogService] Stopped logs monitoring");
} catch (error) {
console.error("[IPC-LogService] Failed to stop logs monitoring:", error);
}
};
// Fetch logs using IPC command (now from streaming cache)
export const fetchLogsViaIPC = async (): Promise<ILogItem[]> => {
try {
// Server-side filtering handles the level via /logs?level={level}
// We just fetch all cached logs regardless of the logLevel parameter
// const response = await getClashLogs();
// // The response should be in the format expected by the frontend
// // Transform the logs to match the expected format
// if (Array.isArray(response)) {
// return response.map((log: any) => ({
// ...log,
// time: log.time || dayjs().format("HH:mm:ss"),
// }));
// }
return [];
} catch (error) {
console.error("[IPC-LogService] Failed to fetch logs:", error);
return [];
}
};
// Clear logs
export const clearLogs = async () => {
try {
await clearLogsCmd();
console.log("[IPC-LogService] Logs cleared");
} catch (error) {
console.error("[IPC-LogService] Failed to clear logs:", error);
}
};