74 lines
2.8 KiB
TypeScript
74 lines
2.8 KiB
TypeScript
import { IconServerOff, IconTable } from "@tabler/icons-react";
|
|
|
|
import { createWidgetDefinition, matchesWidgetRuntimeQuery, widgetQueryInputMatches } from "../definition";
|
|
import { statusOptions } from "../beszel/_shared/options";
|
|
import { optionsBuilder } from "../options";
|
|
|
|
const sortOptions = [
|
|
{ value: "name", label: "System" },
|
|
{ value: "cpu", label: "CPU" },
|
|
{ value: "memory", label: "Memory" },
|
|
{ value: "disk", label: "Disk" },
|
|
{ value: "gpu", label: "GPU" },
|
|
{ value: "loadAvg", label: "Load Avg" },
|
|
{ value: "netBytes", label: "Net" },
|
|
{ value: "temp", label: "Temp" },
|
|
{ value: "services", label: "Services" },
|
|
{ value: "uptime", label: "Uptime" },
|
|
{ value: "agentVersion", label: "Agent" },
|
|
];
|
|
|
|
const sortDirectionOptions = [
|
|
{ value: "asc", label: "Ascending" },
|
|
{ value: "desc", label: "Descending" },
|
|
];
|
|
|
|
export const { definition, componentLoader } = createWidgetDefinition("beszelSystemTable", {
|
|
icon: IconTable,
|
|
queryKeys: [[["widget", "beszel", "getSystems"]], [["widget", "beszel", "getSystemStats"]]],
|
|
queryMatcher: (query, scope) =>
|
|
query.path.at(-1) === "getSystems"
|
|
? widgetQueryInputMatches(query.input, { integrationIds: scope.integrationIds })
|
|
: matchesWidgetRuntimeQuery(query, scope),
|
|
supportedIntegrations: ["beszel", "mock"],
|
|
integrationsRequired: true,
|
|
createOptions() {
|
|
return optionsBuilder.from(
|
|
(factory) => ({
|
|
statusFilter: factory.select({
|
|
defaultValue: "all",
|
|
options: statusOptions,
|
|
}),
|
|
sortBy: factory.select({ defaultValue: "name", options: sortOptions }),
|
|
sortDirection: factory.select({
|
|
defaultValue: "asc",
|
|
options: sortDirectionOptions,
|
|
}),
|
|
showCpu: factory.switch({ defaultValue: true }),
|
|
showMemory: factory.switch({ defaultValue: true }),
|
|
showDisk: factory.switch({ defaultValue: true }),
|
|
showGpu: factory.switch({ defaultValue: true }),
|
|
showLoadAvg: factory.switch({ defaultValue: true }),
|
|
showNet: factory.switch({ defaultValue: true }),
|
|
showTemp: factory.switch({ defaultValue: true }),
|
|
showBattery: factory.switch({ defaultValue: true }),
|
|
showServices: factory.switch({ defaultValue: true }),
|
|
showUptime: factory.switch({ defaultValue: true }),
|
|
showAgent: factory.switch({ defaultValue: true }),
|
|
columnOrder: factory.text({ defaultValue: "" }),
|
|
columnWidths: factory.text({ defaultValue: "" }),
|
|
}),
|
|
{
|
|
columnOrder: { shouldHide: () => true },
|
|
columnWidths: { shouldHide: () => true },
|
|
},
|
|
);
|
|
},
|
|
errors: {
|
|
INTERNAL_SERVER_ERROR: {
|
|
icon: IconServerOff,
|
|
message: (t) => t("widget.beszelSystemTable.error.internalServerError"),
|
|
},
|
|
},
|
|
}).withDynamicImport(() => import("./component"));
|