Live worker counts and an e621 request-history dropdown
- Status polling drops from 30s to 5s, and download start/finish/cancel invalidates it immediately, so the footer's Active Workers reflects running download tasks in near real time - The e621 time in the status pill is now a button: it opens a dropdown with the session's request history (clock time, endpoint, duration, colour-coded) plus totals; closes on outside click or Escape - Metrics store keeps the last 50 requests
This commit is contained in:
@@ -6,10 +6,13 @@ export interface E621RequestSample {
|
||||
at: number;
|
||||
}
|
||||
|
||||
const HISTORY_LIMIT = 50;
|
||||
|
||||
interface E621MetricsState {
|
||||
requestCount: number;
|
||||
totalMs: number;
|
||||
last: E621RequestSample | null;
|
||||
history: E621RequestSample[];
|
||||
record: (path: string, ms: number) => void;
|
||||
reset: () => void;
|
||||
}
|
||||
@@ -19,13 +22,19 @@ export const useE621Metrics = create<E621MetricsState>((set) => ({
|
||||
requestCount: 0,
|
||||
totalMs: 0,
|
||||
last: null,
|
||||
history: [],
|
||||
|
||||
record: (path, ms) =>
|
||||
set((state) => ({
|
||||
requestCount: state.requestCount + 1,
|
||||
totalMs: state.totalMs + ms,
|
||||
last: { path, ms, at: Date.now() },
|
||||
})),
|
||||
set((state) => {
|
||||
const sample: E621RequestSample = { path, ms, at: Date.now() };
|
||||
return {
|
||||
requestCount: state.requestCount + 1,
|
||||
totalMs: state.totalMs + ms,
|
||||
last: sample,
|
||||
history: [sample, ...state.history].slice(0, HISTORY_LIMIT),
|
||||
};
|
||||
}),
|
||||
|
||||
reset: () => set({ requestCount: 0, totalMs: 0, last: null }),
|
||||
reset: () =>
|
||||
set({ requestCount: 0, totalMs: 0, last: null, history: [] }),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user