now supports multi machine monitoring

This commit is contained in:
2026-05-06 15:09:15 +02:00
parent 8f0a9650b0
commit d8d80867ce
20 changed files with 757 additions and 426 deletions
+14 -1
View File
@@ -1,5 +1,10 @@
import { useQuery } from "@tanstack/react-query";
import { fetchCounts, fetchLibraries, fetchActivity } from "../api/client";
import {
fetchActivity,
fetchCounts,
fetchLibraries,
fetchMonitoringOverview,
} from "../api/client";
export function useCounts() {
return useQuery({
@@ -25,5 +30,13 @@ export function useActivity() {
});
}
export function useMonitoringOverview() {
return useQuery({
queryKey: ["dashboard", "monitoring"],
queryFn: fetchMonitoringOverview,
refetchInterval: 30_000,
});
}
// Backward-compatible alias used by older code.
export const useNowPlaying = useActivity;
+45 -14
View File
@@ -1,52 +1,83 @@
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import {
fetchMonitoringStatus,
fetchMonitoringMetrics,
fetchDiskSpace,
fetchMonitoringMachines,
fetchMonitoringMachineActions,
fetchMonitoringPoller,
startCollector,
stopCollector,
restartCollector,
} from "../api/client";
export function useMonitoringStatus() {
export function useMonitoringMachines() {
return useQuery({
queryKey: ["monitoring", "status"],
queryFn: fetchMonitoringStatus,
queryKey: ["monitoring", "machines"],
queryFn: fetchMonitoringMachines,
refetchInterval: 30_000,
});
}
export function useMonitoringMetrics() {
export function useMonitoringPoller() {
return useQuery({
queryKey: ["monitoring", "metrics"],
queryFn: () => fetchMonitoringMetrics(),
queryKey: ["monitoring", "poller"],
queryFn: fetchMonitoringPoller,
refetchInterval: 30_000,
});
}
export function useMonitoringStatus(machineId?: string, enabled = true) {
return useQuery({
queryKey: ["monitoring", "status", machineId ?? "default"],
queryFn: () => fetchMonitoringStatus(machineId),
refetchInterval: 30_000,
enabled,
});
}
export function useMonitoringMetrics(machineId?: string, enabled = true) {
return useQuery({
queryKey: ["monitoring", "metrics", machineId ?? "default"],
queryFn: () => fetchMonitoringMetrics(undefined, 70_000, machineId),
refetchInterval: 15_000,
enabled,
});
}
export function useDiskSpace() {
export function useDiskSpace(machineId?: string, enabled = true) {
return useQuery({
queryKey: ["monitoring", "disk"],
queryFn: fetchDiskSpace,
queryKey: ["monitoring", "disk", machineId ?? "default"],
queryFn: () => fetchDiskSpace(machineId),
staleTime: 60_000,
enabled,
});
}
export function useCollectorControls() {
export function useMachineActions(machineId: string, enabled = true) {
return useQuery({
queryKey: ["monitoring", "actions", machineId],
queryFn: () => fetchMonitoringMachineActions(machineId),
refetchInterval: 15_000,
enabled,
});
}
export function useCollectorControls(machineId?: string) {
const queryClient = useQueryClient();
const invalidate = () =>
queryClient.invalidateQueries({ queryKey: ["monitoring"] });
const start = useMutation({
mutationFn: startCollector,
mutationFn: () => startCollector(machineId),
onSuccess: invalidate,
});
const stop = useMutation({
mutationFn: stopCollector,
mutationFn: () => stopCollector(machineId),
onSuccess: invalidate,
});
const restart = useMutation({
mutationFn: restartCollector,
mutationFn: () => restartCollector(machineId),
onSuccess: invalidate,
});