mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-21 22:15:40 +00:00
975bb6d9af
* feat(perf): live runtime logs tab in Performance Probe Add a Logs tab that streams the backend runtime log ring buffer in-app, so the stdout/stderr console (unreachable on Windows without exporting) can be read live. The buffer now tracks a monotonic seq; a new tail_runtime_logs command returns lines incrementally and get_logging_mode reports the current depth. The tab has a depth switch (off/normal/debug) mirroring app settings, a line cap (500-5000), pause/clear, auto-follow, and an ordered comma-separated word filter where a plain word includes and a -word excludes, applied left to right as layers (sequence matters). * docs(changelog): note Performance Probe logs tab (PR #946) Add CHANGELOG entry and credits line for the live runtime logs tab. * fix(perf): pin log view position when scrolled up Auto-scroll keeps the logs tab at the tail, but once the user scrolls up the view now stays put — the previously-topmost line is re-pinned each tick while the log keeps appending below for further scrolling. History under the viewport is no longer trimmed while scrolled up (kept up to the ring-buffer ceiling); the cap is re-applied when following resumes. Buffer overflow is shown in the status line instead of an injected marker row. * fix(perf): scope logs tab to its own internal scroll The whole probe body scrolled (controls + filter + log) because the log container sized via height:100%, which WebKitGTK does not resolve against the flex body. Make the body a flex column with hidden overflow on the Logs tab and let the log view flex-fill, so depth/keep/pause/clear and the filter stay fixed while only the log lines scroll.
37 lines
1007 B
TypeScript
37 lines
1007 B
TypeScript
import { invoke } from '@tauri-apps/api/core';
|
|
import type { LoggingMode } from '../store/authStoreTypes';
|
|
|
|
export interface RuntimeLogLine {
|
|
seq: number;
|
|
text: string;
|
|
}
|
|
|
|
export interface RuntimeLogTail {
|
|
lines: RuntimeLogLine[];
|
|
lastSeq: number;
|
|
dropped: boolean;
|
|
}
|
|
|
|
/**
|
|
* Incremental tail of the backend runtime log ring buffer.
|
|
*
|
|
* @param afterSeq highest seq already held by the caller; omit/`null` for the
|
|
* initial fetch of the most recent `max` lines.
|
|
* @param max cap on returned lines (most recent kept).
|
|
*/
|
|
export async function tailRuntimeLogs(
|
|
afterSeq: number | null,
|
|
max: number,
|
|
): Promise<RuntimeLogTail> {
|
|
return invoke<RuntimeLogTail>('tail_runtime_logs', {
|
|
afterSeq: afterSeq ?? null,
|
|
max,
|
|
});
|
|
}
|
|
|
|
/** Read the current backend logging mode (off | normal | debug). */
|
|
export async function getLoggingMode(): Promise<LoggingMode> {
|
|
const mode = await invoke<string>('get_logging_mode');
|
|
return (mode === 'off' || mode === 'debug') ? mode : 'normal';
|
|
}
|