130 lines
3.1 KiB
TypeScript
130 lines
3.1 KiB
TypeScript
import { useMemo } from "react";
|
|
import { monitorSchema, type MonitorFormData } from "@/Validation/monitor";
|
|
import type { Monitor, MonitorType } from "@/Types/Monitor";
|
|
|
|
interface UseMonitorFormOptions {
|
|
data?: Monitor | null;
|
|
defaultType?: MonitorType;
|
|
}
|
|
|
|
const getBaseDefaults = (data?: Monitor | null) => ({
|
|
name: data?.name || "",
|
|
description: data?.description || "",
|
|
interval: data?.interval || 60000,
|
|
notifications: data?.notifications || [],
|
|
statusWindowSize: data?.statusWindowSize || 5,
|
|
statusWindowThreshold: data?.statusWindowThreshold || 60,
|
|
geoCheckEnabled: data?.geoCheckEnabled ?? false,
|
|
geoCheckLocations: data?.geoCheckLocations || [],
|
|
geoCheckInterval: data?.geoCheckInterval || 300000,
|
|
});
|
|
|
|
export const useMonitorForm = ({
|
|
data = null,
|
|
defaultType = "http",
|
|
}: UseMonitorFormOptions = {}) => {
|
|
return useMemo(() => {
|
|
const type = data?.type || defaultType;
|
|
const base = getBaseDefaults(data);
|
|
|
|
let defaults: MonitorFormData;
|
|
|
|
switch (type) {
|
|
case "http":
|
|
defaults = {
|
|
...base,
|
|
type: "http",
|
|
url: data?.url || "",
|
|
ignoreTlsErrors: data?.ignoreTlsErrors || false,
|
|
useAdvancedMatching: data?.useAdvancedMatching || false,
|
|
matchMethod: data?.matchMethod || "",
|
|
expectedValue: data?.expectedValue || "",
|
|
jsonPath: data?.jsonPath || "",
|
|
};
|
|
break;
|
|
case "ping":
|
|
defaults = {
|
|
...base,
|
|
type: "ping",
|
|
url: data?.url || "",
|
|
};
|
|
break;
|
|
case "port":
|
|
defaults = {
|
|
...base,
|
|
type: "port",
|
|
url: data?.url || "",
|
|
port: data?.port || 80,
|
|
};
|
|
break;
|
|
case "docker":
|
|
defaults = {
|
|
...base,
|
|
type: "docker",
|
|
url: data?.url || "",
|
|
};
|
|
break;
|
|
case "game":
|
|
defaults = {
|
|
...base,
|
|
type: "game",
|
|
url: data?.url || "",
|
|
port: data?.port || 27015,
|
|
gameId: data?.gameId || "",
|
|
};
|
|
break;
|
|
case "grpc":
|
|
defaults = {
|
|
...base,
|
|
type: "grpc",
|
|
url: data?.url || "",
|
|
port: data?.port || 50051,
|
|
grpcServiceName: data?.grpcServiceName || "",
|
|
ignoreTlsErrors: data?.ignoreTlsErrors || false,
|
|
};
|
|
break;
|
|
case "pagespeed":
|
|
defaults = {
|
|
...base,
|
|
type: "pagespeed",
|
|
url: data?.url || "",
|
|
};
|
|
break;
|
|
case "hardware":
|
|
defaults = {
|
|
...base,
|
|
type: "hardware",
|
|
url: data?.url || "",
|
|
secret: data?.secret || "",
|
|
cpuAlertThreshold: data?.cpuAlertThreshold ?? 100,
|
|
memoryAlertThreshold: data?.memoryAlertThreshold ?? 100,
|
|
diskAlertThreshold: data?.diskAlertThreshold ?? 100,
|
|
tempAlertThreshold: data?.tempAlertThreshold ?? 100,
|
|
selectedDisks: data?.selectedDisks || [],
|
|
};
|
|
break;
|
|
case "websocket":
|
|
defaults = {
|
|
...base,
|
|
type: "websocket",
|
|
url: data?.url || "",
|
|
ignoreTlsErrors: data?.ignoreTlsErrors || false,
|
|
};
|
|
break;
|
|
default:
|
|
defaults = {
|
|
...base,
|
|
type: "http",
|
|
url: "",
|
|
ignoreTlsErrors: false,
|
|
useAdvancedMatching: false,
|
|
matchMethod: "",
|
|
expectedValue: "",
|
|
jsonPath: "",
|
|
};
|
|
}
|
|
|
|
return { schema: monitorSchema, defaults };
|
|
}, [data, defaultType]);
|
|
};
|