Disable debug console logs for production
This commit is contained in:
@@ -40,10 +40,10 @@ export const IncidentBasicFields: React.FC = () => {
|
|||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
try {
|
try {
|
||||||
const usersList = await userService.getUsers();
|
const usersList = await userService.getUsers();
|
||||||
console.log("Fetched users for incident assignment:", usersList);
|
// console.log("Fetched users for incident assignment:", usersList);
|
||||||
return Array.isArray(usersList) ? usersList : [];
|
return Array.isArray(usersList) ? usersList : [];
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to fetch users:", error);
|
// console.error("Failed to fetch users:", error);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -53,7 +53,7 @@ export const IncidentBasicFields: React.FC = () => {
|
|||||||
// Add user to assigned_to
|
// Add user to assigned_to
|
||||||
const addUser = (userId: string) => {
|
const addUser = (userId: string) => {
|
||||||
// For now, we're using a single user assignment
|
// For now, we're using a single user assignment
|
||||||
console.log("Setting user ID in form:", userId);
|
// console.log("Setting user ID in form:", userId);
|
||||||
form.setValue('assigned_to', userId, { shouldValidate: true, shouldDirty: true });
|
form.setValue('assigned_to', userId, { shouldValidate: true, shouldDirty: true });
|
||||||
setSelectedUserIds([userId]);
|
setSelectedUserIds([userId]);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export const ServerHistoryCharts = ({ serverId }: ServerHistoryChartsProps) => {
|
|||||||
isFetching
|
isFetching
|
||||||
} = useServerHistoryData(serverId);
|
} = useServerHistoryData(serverId);
|
||||||
|
|
||||||
console.log('ServerHistoryCharts: Rendering with serverId:', serverId, 'timeRange:', timeRange);
|
//console.log('ServerHistoryCharts: Rendering with serverId:', serverId, 'timeRange:', timeRange);
|
||||||
|
|
||||||
// Memoize latest data calculation to prevent unnecessary recalculations
|
// Memoize latest data calculation to prevent unnecessary recalculations
|
||||||
const latestData = useMemo(() => {
|
const latestData = useMemo(() => {
|
||||||
@@ -71,7 +71,7 @@ export const ServerHistoryCharts = ({ serverId }: ServerHistoryChartsProps) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.error('ServerHistoryCharts: Error loading data:', error);
|
// console.error('ServerHistoryCharts: Error loading data:', error);
|
||||||
return (
|
return (
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
@@ -122,7 +122,7 @@ export const ServerHistoryCharts = ({ serverId }: ServerHistoryChartsProps) => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('ServerHistoryCharts: Rendering charts with', chartData.length, 'data points for time range:', timeRange);
|
// console.log('ServerHistoryCharts: Rendering charts with', chartData.length, 'data points for time range:', timeRange);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export function ServerSystemInfoCard({ server }: ServerSystemInfoCardProps) {
|
|||||||
? JSON.parse(server.system_info)
|
? JSON.parse(server.system_info)
|
||||||
: server.system_info;
|
: server.system_info;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Error parsing system_info:', error);
|
// console.log('Error parsing system_info:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,14 +61,14 @@ export const filterMetricsByTimeRange = (metrics: any[], timeRange: TimeRange):
|
|||||||
const bufferMinutes = timeRange === '60m' ? 5 : timeRange === '1d' ? 30 : 60;
|
const bufferMinutes = timeRange === '60m' ? 5 : timeRange === '1d' ? 30 : 60;
|
||||||
const cutoffTime = new Date(now.getTime() - (selectedRange.hours * 60 * 60 * 1000) - (bufferMinutes * 60 * 1000));
|
const cutoffTime = new Date(now.getTime() - (selectedRange.hours * 60 * 60 * 1000) - (bufferMinutes * 60 * 1000));
|
||||||
|
|
||||||
console.log('filterMetricsByTimeRange: timeRange:', timeRange, 'cutoffTime:', cutoffTime.toISOString());
|
// console.log('filterMetricsByTimeRange: timeRange:', timeRange, 'cutoffTime:', cutoffTime.toISOString());
|
||||||
|
|
||||||
const filtered = metrics.filter(metric => {
|
const filtered = metrics.filter(metric => {
|
||||||
const metricTime = new Date(metric.created || metric.timestamp);
|
const metricTime = new Date(metric.created || metric.timestamp);
|
||||||
return metricTime >= cutoffTime && metricTime <= now;
|
return metricTime >= cutoffTime && metricTime <= now;
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('filterMetricsByTimeRange: Filtered', metrics.length, 'to', filtered.length, 'metrics');
|
// console.log('filterMetricsByTimeRange: Filtered', metrics.length, 'to', filtered.length, 'metrics');
|
||||||
|
|
||||||
// Sort by timestamp for proper chart display
|
// Sort by timestamp for proper chart display
|
||||||
return filtered.sort((a, b) =>
|
return filtered.sort((a, b) =>
|
||||||
@@ -129,12 +129,12 @@ const formatTimestamp = (timestamp: string, timeRange: TimeRange): string => {
|
|||||||
|
|
||||||
// Optimized chart data formatting with better performance
|
// Optimized chart data formatting with better performance
|
||||||
export const formatChartData = (metrics: any[], timeRange: TimeRange) => {
|
export const formatChartData = (metrics: any[], timeRange: TimeRange) => {
|
||||||
console.log('formatChartData: Input metrics count:', metrics?.length || 0, 'timeRange:', timeRange);
|
// console.log('formatChartData: Input metrics count:', metrics?.length || 0, 'timeRange:', timeRange);
|
||||||
|
|
||||||
if (!metrics?.length) return [];
|
if (!metrics?.length) return [];
|
||||||
|
|
||||||
const filteredMetrics = filterMetricsByTimeRange(metrics, timeRange);
|
const filteredMetrics = filterMetricsByTimeRange(metrics, timeRange);
|
||||||
console.log('formatChartData: After time filtering:', filteredMetrics?.length || 0, 'metrics');
|
// console.log('formatChartData: After time filtering:', filteredMetrics?.length || 0, 'metrics');
|
||||||
|
|
||||||
if (!filteredMetrics.length) return [];
|
if (!filteredMetrics.length) return [];
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ export const formatChartData = (metrics: any[], timeRange: TimeRange) => {
|
|||||||
? filteredMetrics.filter((_, index) => index % Math.ceil(filteredMetrics.length / maxDataPoints) === 0)
|
? filteredMetrics.filter((_, index) => index % Math.ceil(filteredMetrics.length / maxDataPoints) === 0)
|
||||||
: filteredMetrics;
|
: filteredMetrics;
|
||||||
|
|
||||||
console.log('formatChartData: After sampling:', sampledMetrics.length, 'metrics for display');
|
// console.log('formatChartData: After sampling:', sampledMetrics.length, 'metrics for display');
|
||||||
|
|
||||||
// Batch process the data transformation for better performance
|
// Batch process the data transformation for better performance
|
||||||
return sampledMetrics.map((metric) => {
|
return sampledMetrics.map((metric) => {
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ export const useServerHistoryData = (serverId: string) => {
|
|||||||
} = useQuery({
|
} = useQuery({
|
||||||
queryKey: ['server-metrics-history', serverId, timeRange],
|
queryKey: ['server-metrics-history', serverId, timeRange],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
console.log('useServerHistoryData: Fetching metrics for serverId:', serverId, 'timeRange:', timeRange);
|
// console.log('useServerHistoryData: Fetching metrics for serverId:', serverId, 'timeRange:', timeRange);
|
||||||
const result = await serverService.getServerMetrics(serverId, timeRange);
|
const result = await serverService.getServerMetrics(serverId, timeRange);
|
||||||
console.log('useServerHistoryData: Raw metrics result for timeRange', timeRange, ':', result?.length || 0, 'records');
|
// console.log('useServerHistoryData: Raw metrics result for timeRange', timeRange, ':', result?.length || 0, 'records');
|
||||||
return result || [];
|
return result || [];
|
||||||
},
|
},
|
||||||
enabled: !!serverId,
|
enabled: !!serverId,
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
queryKey: ['strictDefaultUptimeHistory', serviceId, serviceType],
|
queryKey: ['strictDefaultUptimeHistory', serviceId, serviceType],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
if (!serviceId) {
|
if (!serviceId) {
|
||||||
console.log('No serviceId provided, skipping fetch');
|
// console.log('No serviceId provided, skipping fetch');
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
console.log(`Fetching STRICT Default (Agent ID 1) uptime data for service ${serviceId} of type ${serviceType}`);
|
// console.log(`Fetching STRICT Default (Agent ID 1) uptime data for service ${serviceId} of type ${serviceType}`);
|
||||||
|
|
||||||
// Get raw uptime history data
|
// Get raw uptime history data
|
||||||
const rawData = await uptimeService.getUptimeHistory(serviceId, 50, undefined, undefined, serviceType);
|
const rawData = await uptimeService.getUptimeHistory(serviceId, 50, undefined, undefined, serviceType);
|
||||||
@@ -38,15 +38,15 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (isStrictDefault) {
|
if (isStrictDefault) {
|
||||||
console.log(`✓ ACCEPTED Default record: ${record.id} - ${record.timestamp} - Pure default monitoring`);
|
// console.log(`✓ ACCEPTED Default record: ${record.id} - ${record.timestamp} - Pure default monitoring`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`✗ REJECTED non-default record: ${record.id} - region: ${record.region_name || 'none'}, agent: ${record.agent_id || 'none'}`);
|
// console.log(`✗ REJECTED non-default record: ${record.id} - region: ${record.region_name || 'none'}, agent: ${record.agent_id || 'none'}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return isStrictDefault;
|
return isStrictDefault;
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`ULTRA-STRICT FILTER: Reduced ${rawData.length} records to ${strictDefaultData.length} pure default monitoring records`);
|
//console.log(`ULTRA-STRICT FILTER: Reduced ${rawData.length} records to ${strictDefaultData.length} pure default monitoring records`);
|
||||||
return strictDefaultData;
|
return strictDefaultData;
|
||||||
},
|
},
|
||||||
enabled: !!serviceId,
|
enabled: !!serviceId,
|
||||||
@@ -61,7 +61,7 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
const processUptimeData = (data: UptimeData[], intervalSeconds: number): UptimeData[] => {
|
const processUptimeData = (data: UptimeData[], intervalSeconds: number): UptimeData[] => {
|
||||||
if (!data || data.length === 0) return [];
|
if (!data || data.length === 0) return [];
|
||||||
|
|
||||||
console.log(`Processing ${data.length} strict default monitoring records for service ${serviceId}`);
|
// console.log(`Processing ${data.length} strict default monitoring records for service ${serviceId}`);
|
||||||
|
|
||||||
// Sort data by timestamp (newest first)
|
// Sort data by timestamp (newest first)
|
||||||
const sortedData = [...data].sort((a, b) =>
|
const sortedData = [...data].sort((a, b) =>
|
||||||
@@ -76,9 +76,9 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
|
|
||||||
if (!timestampMap.has(exactTimestamp)) {
|
if (!timestampMap.has(exactTimestamp)) {
|
||||||
timestampMap.set(exactTimestamp, record);
|
timestampMap.set(exactTimestamp, record);
|
||||||
console.log(`✓ Added unique default record: ${record.id} - ${exactTimestamp}`);
|
// console.log(`✓ Added unique default record: ${record.id} - ${exactTimestamp}`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`✗ REJECTED absolute duplicate timestamp: ${record.id} - ${exactTimestamp} (exact timestamp match)`);
|
// console.log(`✗ REJECTED absolute duplicate timestamp: ${record.id} - ${exactTimestamp} (exact timestamp match)`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
const uniqueRecords = Array.from(timestampMap.values());
|
const uniqueRecords = Array.from(timestampMap.values());
|
||||||
const recentData = uniqueRecords.slice(0, 20);
|
const recentData = uniqueRecords.slice(0, 20);
|
||||||
|
|
||||||
console.log(`FINAL RESULT: ${recentData.length} absolutely unique default monitoring records`);
|
//console.log(`FINAL RESULT: ${recentData.length} absolutely unique default monitoring records`);
|
||||||
|
|
||||||
return recentData;
|
return recentData;
|
||||||
};
|
};
|
||||||
@@ -94,12 +94,12 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
// Update history items when data changes
|
// Update history items when data changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (uptimeData && uptimeData.length > 0) {
|
if (uptimeData && uptimeData.length > 0) {
|
||||||
console.log(`Received ${uptimeData.length} strict default monitoring records for service ${serviceId}`);
|
// console.log(`Received ${uptimeData.length} strict default monitoring records for service ${serviceId}`);
|
||||||
const processedData = processUptimeData(uptimeData, interval);
|
const processedData = processUptimeData(uptimeData, interval);
|
||||||
setHistoryItems(processedData);
|
setHistoryItems(processedData);
|
||||||
} else if (!serviceId || (uptimeData && uptimeData.length === 0)) {
|
} else if (!serviceId || (uptimeData && uptimeData.length === 0)) {
|
||||||
// Generate placeholder data when no real data is available
|
// Generate placeholder data when no real data is available
|
||||||
console.log(`No strict default monitoring data available for service ${serviceId}, generating placeholder`);
|
// console.log(`No strict default monitoring data available for service ${serviceId}, generating placeholder`);
|
||||||
|
|
||||||
const statusValue = (status === "up" || status === "down" || status === "warning" || status === "paused")
|
const statusValue = (status === "up" || status === "down" || status === "warning" || status === "paused")
|
||||||
? status
|
? status
|
||||||
@@ -157,7 +157,7 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
seenTimestamps.add(item.timestamp);
|
seenTimestamps.add(item.timestamp);
|
||||||
absolutelyUniqueItems.push(item);
|
absolutelyUniqueItems.push(item);
|
||||||
} else {
|
} else {
|
||||||
console.log(`FINAL VALIDATION: Removing absolute duplicate timestamp ${item.timestamp} from display`);
|
// console.log(`FINAL VALIDATION: Removing absolute duplicate timestamp ${item.timestamp} from display`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ export const useDefaultUptimeData = ({ serviceId, serviceType, status, interval
|
|||||||
new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()
|
new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log(`DISPLAY READY: ${sortedValidated.length} absolutely validated default monitoring items`);
|
// console.log(`DISPLAY READY: ${sortedValidated.length} absolutely validated default monitoring items`);
|
||||||
return sortedValidated.slice(0, 20);
|
return sortedValidated.slice(0, 20);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const isEditMode = !!templateId;
|
const isEditMode = !!templateId;
|
||||||
|
|
||||||
console.log("Template form initialized with templateId:", templateId, "isEditMode:", isEditMode);
|
// console.log("Template form initialized with templateId:", templateId, "isEditMode:", isEditMode);
|
||||||
|
|
||||||
const form = useForm<TemplateFormData>({
|
const form = useForm<TemplateFormData>({
|
||||||
resolver: zodResolver(templateFormSchema),
|
resolver: zodResolver(templateFormSchema),
|
||||||
@@ -74,7 +74,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
// Set form values when template data is loaded
|
// Set form values when template data is loaded
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (templateData && open) {
|
if (templateData && open) {
|
||||||
console.log("Setting form values with template data:", templateData);
|
// console.log("Setting form values with template data:", templateData);
|
||||||
|
|
||||||
form.reset({
|
form.reset({
|
||||||
name: templateData.name || "",
|
name: templateData.name || "",
|
||||||
@@ -120,7 +120,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
onSuccess();
|
onSuccess();
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
console.error("Error creating template:", error);
|
// console.error("Error creating template:", error);
|
||||||
toast({
|
toast({
|
||||||
title: "Error",
|
title: "Error",
|
||||||
description: "Failed to create template. Please check your inputs and try again.",
|
description: "Failed to create template. Please check your inputs and try again.",
|
||||||
@@ -142,7 +142,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
onSuccess();
|
onSuccess();
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
console.error("Error updating template:", error);
|
// console.error("Error updating template:", error);
|
||||||
toast({
|
toast({
|
||||||
title: "Error",
|
title: "Error",
|
||||||
description: "Failed to update template. Please check your inputs and try again.",
|
description: "Failed to update template. Please check your inputs and try again.",
|
||||||
@@ -155,7 +155,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
|
|
||||||
// Handle form submission
|
// Handle form submission
|
||||||
const onSubmit = (formData: TemplateFormData) => {
|
const onSubmit = (formData: TemplateFormData) => {
|
||||||
console.log("Submitting form data:", formData);
|
// console.log("Submitting form data:", formData);
|
||||||
|
|
||||||
// Ensure all required fields are present
|
// Ensure all required fields are present
|
||||||
const completeData: CreateUpdateTemplateData = {
|
const completeData: CreateUpdateTemplateData = {
|
||||||
@@ -173,10 +173,10 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (isEditMode && templateId) {
|
if (isEditMode && templateId) {
|
||||||
console.log("Updating template with ID:", templateId);
|
// console.log("Updating template with ID:", templateId);
|
||||||
updateMutation.mutate({ id: templateId, data: completeData });
|
updateMutation.mutate({ id: templateId, data: completeData });
|
||||||
} else {
|
} else {
|
||||||
console.log("Creating new template");
|
// console.log("Creating new template");
|
||||||
createMutation.mutate(completeData);
|
createMutation.mutate(completeData);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -184,7 +184,7 @@ export const useTemplateForm = ({ templateId, open, onOpenChange, onSuccess }: U
|
|||||||
// Reset form when dialog closes
|
// Reset form when dialog closes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!open) {
|
if (!open) {
|
||||||
console.log("Dialog closed, resetting form");
|
// console.log("Dialog closed, resetting form");
|
||||||
form.reset(defaultFormValues);
|
form.reset(defaultFormValues);
|
||||||
}
|
}
|
||||||
}, [open, form]);
|
}, [open, form]);
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ export const useUsersList = () => {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
try {
|
try {
|
||||||
console.log("Fetching users list");
|
// console.log("Fetching users list");
|
||||||
const data = await userService.getUsers();
|
const data = await userService.getUsers();
|
||||||
console.log("Received users data:", data);
|
// console.log("Received users data:", data);
|
||||||
|
|
||||||
if (Array.isArray(data) && data.length >= 0) {
|
if (Array.isArray(data) && data.length >= 0) {
|
||||||
setUsers(data);
|
setUsers(data);
|
||||||
// Clear any previous errors
|
// Clear any previous errors
|
||||||
setError(null);
|
setError(null);
|
||||||
} else {
|
} else {
|
||||||
console.error("Invalid users data format:", data);
|
// console.error("Invalid users data format:", data);
|
||||||
setUsers([]);
|
setUsers([]);
|
||||||
setError("Invalid data format received from server");
|
setError("Invalid data format received from server");
|
||||||
toast({
|
toast({
|
||||||
@@ -32,7 +32,7 @@ export const useUsersList = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error fetching users:", error);
|
// console.error("Error fetching users:", error);
|
||||||
setError(error instanceof Error ? error.message : "Unknown error");
|
setError(error instanceof Error ? error.message : "Unknown error");
|
||||||
toast({
|
toast({
|
||||||
title: "Error fetching users",
|
title: "Error fetching users",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const ServerDetail = () => {
|
|||||||
const { sidebarCollapsed, toggleSidebar } = useSidebar();
|
const { sidebarCollapsed, toggleSidebar } = useSidebar();
|
||||||
const [currentUser, setCurrentUser] = useState(authService.getCurrentUser());
|
const [currentUser, setCurrentUser] = useState(authService.getCurrentUser());
|
||||||
|
|
||||||
console.log('ServerDetail component loaded with serverId:', serverId);
|
//console.log('ServerDetail component loaded with serverId:', serverId);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: server,
|
data: server,
|
||||||
@@ -46,7 +46,7 @@ const ServerDetail = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (serverError) {
|
if (serverError) {
|
||||||
console.error('Server detail error:', serverError);
|
// console.error('Server detail error:', serverError);
|
||||||
return (
|
return (
|
||||||
<div className="flex h-screen overflow-hidden bg-background text-foreground">
|
<div className="flex h-screen overflow-hidden bg-background text-foreground">
|
||||||
<Sidebar collapsed={sidebarCollapsed} />
|
<Sidebar collapsed={sidebarCollapsed} />
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export const serverService = {
|
|||||||
const records = await pb.collection('servers').getFullList<Server>();
|
const records = await pb.collection('servers').getFullList<Server>();
|
||||||
return records;
|
return records;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching servers:', error);
|
// console.error('Error fetching servers:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -17,22 +17,22 @@ export const serverService = {
|
|||||||
const record = await pb.collection('servers').getOne<Server>(serverId);
|
const record = await pb.collection('servers').getOne<Server>(serverId);
|
||||||
return record;
|
return record;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching server:', error);
|
// console.error('Error fetching server:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async getServerMetrics(serverId: string, timeRange?: string): Promise<any[]> {
|
async getServerMetrics(serverId: string, timeRange?: string): Promise<any[]> {
|
||||||
try {
|
try {
|
||||||
console.log('serverService.getServerMetrics: Fetching metrics for serverId:', serverId, 'timeRange:', timeRange);
|
// console.log('serverService.getServerMetrics: Fetching metrics for serverId:', serverId, 'timeRange:', timeRange);
|
||||||
|
|
||||||
// First, get the server to find the correct server_id for metrics
|
// First, get the server to find the correct server_id for metrics
|
||||||
let server;
|
let server;
|
||||||
try {
|
try {
|
||||||
server = await this.getServer(serverId);
|
server = await this.getServer(serverId);
|
||||||
console.log('serverService.getServerMetrics: Found server:', server);
|
// console.log('serverService.getServerMetrics: Found server:', server);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('serverService.getServerMetrics: Could not fetch server details:', error);
|
// console.log('serverService.getServerMetrics: Could not fetch server details:', error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try multiple filter strategies to find data
|
// Try multiple filter strategies to find data
|
||||||
@@ -43,17 +43,17 @@ export const serverService = {
|
|||||||
if (server && server.server_id) {
|
if (server && server.server_id) {
|
||||||
metricsServerId = server.server_id;
|
metricsServerId = server.server_id;
|
||||||
filter = `server_id = "${metricsServerId}"`;
|
filter = `server_id = "${metricsServerId}"`;
|
||||||
console.log('serverService.getServerMetrics: Strategy 1 - Using server.server_id for metrics:', metricsServerId);
|
// console.log('serverService.getServerMetrics: Strategy 1 - Using server.server_id for metrics:', metricsServerId);
|
||||||
} else {
|
} else {
|
||||||
// Strategy 2: Use the serverId directly
|
// Strategy 2: Use the serverId directly
|
||||||
filter = `server_id = "${serverId}"`;
|
filter = `server_id = "${serverId}"`;
|
||||||
console.log('serverService.getServerMetrics: Strategy 2 - Using serverId directly for metrics:', serverId);
|
// console.log('serverService.getServerMetrics: Strategy 2 - Using serverId directly for metrics:', serverId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add agent_id filter if available in server data
|
// Add agent_id filter if available in server data
|
||||||
if (server && server.agent_id) {
|
if (server && server.agent_id) {
|
||||||
filter += ` && agent_id = "${server.agent_id}"`;
|
filter += ` && agent_id = "${server.agent_id}"`;
|
||||||
console.log('serverService.getServerMetrics: Added agent_id filter:', server.agent_id);
|
// console.log('serverService.getServerMetrics: Added agent_id filter:', server.agent_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add time range filter
|
// Add time range filter
|
||||||
@@ -83,10 +83,10 @@ export const serverService = {
|
|||||||
|
|
||||||
const cutoffISO = cutoffTime.toISOString();
|
const cutoffISO = cutoffTime.toISOString();
|
||||||
filter += ` && created >= "${cutoffISO}"`;
|
filter += ` && created >= "${cutoffISO}"`;
|
||||||
console.log('serverService.getServerMetrics: Using time filter from:', cutoffISO, 'to now');
|
// console.log('serverService.getServerMetrics: Using time filter from:', cutoffISO, 'to now');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Final filter:', filter);
|
// console.log('serverService.getServerMetrics: Final filter:', filter);
|
||||||
|
|
||||||
// Fetch filtered records with proper sorting
|
// Fetch filtered records with proper sorting
|
||||||
let records = await pb.collection('server_metrics').getFullList({
|
let records = await pb.collection('server_metrics').getFullList({
|
||||||
@@ -95,11 +95,11 @@ export const serverService = {
|
|||||||
requestKey: null
|
requestKey: null
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Found', records.length, 'records with primary filter');
|
// console.log('serverService.getServerMetrics: Found', records.length, 'records with primary filter');
|
||||||
|
|
||||||
// If no records found with primary strategy, try fallback strategies
|
// If no records found with primary strategy, try fallback strategies
|
||||||
if (records.length === 0) {
|
if (records.length === 0) {
|
||||||
console.log('serverService.getServerMetrics: No records found, trying fallback strategies...');
|
// console.log('serverService.getServerMetrics: No records found, trying fallback strategies...');
|
||||||
|
|
||||||
// Fallback 1: Try without agent_id filter
|
// Fallback 1: Try without agent_id filter
|
||||||
let fallbackFilter = `server_id = "${metricsServerId}"`;
|
let fallbackFilter = `server_id = "${metricsServerId}"`;
|
||||||
@@ -131,19 +131,19 @@ export const serverService = {
|
|||||||
fallbackFilter += ` && created >= "${cutoffISO}"`;
|
fallbackFilter += ` && created >= "${cutoffISO}"`;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Trying fallback filter without agent_id:', fallbackFilter);
|
// console.log('serverService.getServerMetrics: Trying fallback filter without agent_id:', fallbackFilter);
|
||||||
records = await pb.collection('server_metrics').getFullList({
|
records = await pb.collection('server_metrics').getFullList({
|
||||||
filter: fallbackFilter,
|
filter: fallbackFilter,
|
||||||
sort: '-created',
|
sort: '-created',
|
||||||
requestKey: null
|
requestKey: null
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Fallback found', records.length, 'records');
|
// console.log('serverService.getServerMetrics: Fallback found', records.length, 'records');
|
||||||
|
|
||||||
// Fallback 2: Try with different server_id strategies
|
// Fallback 2: Try with different server_id strategies
|
||||||
if (records.length === 0) {
|
if (records.length === 0) {
|
||||||
const alternativeIds = [serverId, server?.server_id, server?.id].filter(Boolean);
|
const alternativeIds = [serverId, server?.server_id, server?.id].filter(Boolean);
|
||||||
console.log('serverService.getServerMetrics: Trying alternative server IDs:', alternativeIds);
|
// console.log('serverService.getServerMetrics: Trying alternative server IDs:', alternativeIds);
|
||||||
|
|
||||||
for (const altId of alternativeIds) {
|
for (const altId of alternativeIds) {
|
||||||
if (altId && altId !== metricsServerId) {
|
if (altId && altId !== metricsServerId) {
|
||||||
@@ -176,7 +176,7 @@ export const serverService = {
|
|||||||
altFilter += ` && created >= "${cutoffISO}"`;
|
altFilter += ` && created >= "${cutoffISO}"`;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Trying alternative ID filter:', altFilter);
|
// console.log('serverService.getServerMetrics: Trying alternative ID filter:', altFilter);
|
||||||
const altRecords = await pb.collection('server_metrics').getFullList({
|
const altRecords = await pb.collection('server_metrics').getFullList({
|
||||||
filter: altFilter,
|
filter: altFilter,
|
||||||
sort: '-created',
|
sort: '-created',
|
||||||
@@ -184,7 +184,7 @@ export const serverService = {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (altRecords.length > 0) {
|
if (altRecords.length > 0) {
|
||||||
console.log('serverService.getServerMetrics: Alternative ID found', altRecords.length, 'records');
|
// console.log('serverService.getServerMetrics: Alternative ID found', altRecords.length, 'records');
|
||||||
records = altRecords;
|
records = altRecords;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -193,14 +193,14 @@ export const serverService = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Final result:', records.length, 'records found');
|
// console.log('serverService.getServerMetrics: Final result:', records.length, 'records found');
|
||||||
if (records.length > 0) {
|
if (records.length > 0) {
|
||||||
console.log('serverService.getServerMetrics: Sample record:', records[0]);
|
// console.log('serverService.getServerMetrics: Sample record:', records[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return records;
|
return records;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching server metrics:', error);
|
// console.error('Error fetching server metrics:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { toast } from "sonner";
|
|||||||
* This should be called once per day
|
* This should be called once per day
|
||||||
*/
|
*/
|
||||||
export async function checkAllCertificatesAndNotify(): Promise<void> {
|
export async function checkAllCertificatesAndNotify(): Promise<void> {
|
||||||
console.log("Starting daily SSL certificates check...");
|
// console.log("Starting daily SSL certificates check...");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Fetch all SSL certificates from database
|
// Fetch all SSL certificates from database
|
||||||
@@ -18,16 +18,16 @@ export async function checkAllCertificatesAndNotify(): Promise<void> {
|
|||||||
// Properly cast the items as SSLCertificate
|
// Properly cast the items as SSLCertificate
|
||||||
const certificates = response.items as unknown as SSLCertificate[];
|
const certificates = response.items as unknown as SSLCertificate[];
|
||||||
|
|
||||||
console.log(`Found ${certificates.length} certificates to check`);
|
// console.log(`Found ${certificates.length} certificates to check`);
|
||||||
|
|
||||||
// Check each certificate
|
// Check each certificate
|
||||||
for (const cert of certificates) {
|
for (const cert of certificates) {
|
||||||
await checkCertificateAndNotify(cert);
|
await checkCertificateAndNotify(cert);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Daily SSL certificates check completed");
|
// console.log("Daily SSL certificates check completed");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error during SSL certificates daily check:", error);
|
// console.error("Error during SSL certificates daily check:", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ export async function checkAllCertificatesAndNotify(): Promise<void> {
|
|||||||
* Note: SSL checking is now handled by the Go service, this function focuses on notifications
|
* Note: SSL checking is now handled by the Go service, this function focuses on notifications
|
||||||
*/
|
*/
|
||||||
export async function checkCertificateAndNotify(certificate: SSLCertificate): Promise<boolean> {
|
export async function checkCertificateAndNotify(certificate: SSLCertificate): Promise<boolean> {
|
||||||
console.log(`Checking certificate for ${certificate.domain}...`);
|
// console.log(`Checking certificate for ${certificate.domain}...`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Use the current certificate data (updated by Go service)
|
// Use the current certificate data (updated by Go service)
|
||||||
@@ -47,7 +47,7 @@ export async function checkCertificateAndNotify(certificate: SSLCertificate): Pr
|
|||||||
const warningThreshold = Number(certificate.warning_threshold) || 30;
|
const warningThreshold = Number(certificate.warning_threshold) || 30;
|
||||||
const expiryThreshold = Number(certificate.expiry_threshold) || 7;
|
const expiryThreshold = Number(certificate.expiry_threshold) || 7;
|
||||||
|
|
||||||
console.log(`Certificate ${certificate.domain} thresholds: warning=${warningThreshold}, expiry=${expiryThreshold}, days left=${daysLeft}`);
|
// console.log(`Certificate ${certificate.domain} thresholds: warning=${warningThreshold}, expiry=${expiryThreshold}, days left=${daysLeft}`);
|
||||||
|
|
||||||
// Update status based on thresholds
|
// Update status based on thresholds
|
||||||
const status = determineSSLStatus(daysLeft, warningThreshold, expiryThreshold);
|
const status = determineSSLStatus(daysLeft, warningThreshold, expiryThreshold);
|
||||||
@@ -67,7 +67,7 @@ export async function checkCertificateAndNotify(certificate: SSLCertificate): Pr
|
|||||||
isCritical = false;
|
isCritical = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`${certificate.domain}: ${daysLeft} days left, status: ${status}, should notify: ${shouldNotify}, critical: ${isCritical}`);
|
// console.log(`${certificate.domain}: ${daysLeft} days left, status: ${status}, should notify: ${shouldNotify}, critical: ${isCritical}`);
|
||||||
|
|
||||||
// Update certificate status in database
|
// Update certificate status in database
|
||||||
await pb.collection('ssl_certificates').update(certificate.id, {
|
await pb.collection('ssl_certificates').update(certificate.id, {
|
||||||
@@ -76,7 +76,7 @@ export async function checkCertificateAndNotify(certificate: SSLCertificate): Pr
|
|||||||
|
|
||||||
// Send notification if needed
|
// Send notification if needed
|
||||||
if (shouldNotify && certificate.notification_channel) {
|
if (shouldNotify && certificate.notification_channel) {
|
||||||
console.log(`Sending notification for ${certificate.domain}`);
|
// console.log(`Sending notification for ${certificate.domain}`);
|
||||||
|
|
||||||
// Different message based on expiry threshold
|
// Different message based on expiry threshold
|
||||||
const message = isCritical
|
const message = isCritical
|
||||||
@@ -92,28 +92,28 @@ export async function checkCertificateAndNotify(certificate: SSLCertificate): Pr
|
|||||||
last_notified: new Date().toISOString()
|
last_notified: new Date().toISOString()
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`Notification sent for ${certificate.domain}`);
|
// console.log(`Notification sent for ${certificate.domain}`);
|
||||||
// Show toast for manual checks
|
// Show toast for manual checks
|
||||||
toast.success(`Notification sent for ${certificate.domain}`);
|
toast.success(`Notification sent for ${certificate.domain}`);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
console.error(`Failed to send notification for ${certificate.domain}`);
|
// console.error(`Failed to send notification for ${certificate.domain}`);
|
||||||
// Show error toast for manual checks
|
// Show error toast for manual checks
|
||||||
toast.error(`Failed to send notification for ${certificate.domain}`);
|
toast.error(`Failed to send notification for ${certificate.domain}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (shouldNotify && !certificate.notification_channel) {
|
} else if (shouldNotify && !certificate.notification_channel) {
|
||||||
console.log(`No notification channel set for ${certificate.domain}, skipping notification`);
|
// console.log(`No notification channel set for ${certificate.domain}, skipping notification`);
|
||||||
toast.info(`No notification channel set for ${certificate.domain}, skipping notification`);
|
toast.info(`No notification channel set for ${certificate.domain}, skipping notification`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`No notification needed for ${certificate.domain} (${daysLeft} days left)`);
|
// console.log(`No notification needed for ${certificate.domain} (${daysLeft} days left)`);
|
||||||
// For manual checks, inform the user that thresholds weren't met
|
// For manual checks, inform the user that thresholds weren't met
|
||||||
toast.info(`Certificate for ${certificate.domain} is valid (${daysLeft} days left)`);
|
toast.info(`Certificate for ${certificate.domain} is valid (${daysLeft} days left)`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error checking certificate for ${certificate.domain}:`, error);
|
// console.error(`Error checking certificate for ${certificate.domain}:`, error);
|
||||||
toast.error(`Error checking certificate: ${error instanceof Error ? error.message : "Unknown error"}`);
|
toast.error(`Error checking certificate: ${error instanceof Error ? error.message : "Unknown error"}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const serverService = {
|
|||||||
const records = await pb.collection('servers').getFullList<Server>();
|
const records = await pb.collection('servers').getFullList<Server>();
|
||||||
return records;
|
return records;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching servers:', error);
|
// console.error('Error fetching servers:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -18,29 +18,29 @@ export const serverService = {
|
|||||||
const record = await pb.collection('servers').getOne<Server>(serverId);
|
const record = await pb.collection('servers').getOne<Server>(serverId);
|
||||||
return record;
|
return record;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching server:', error);
|
// console.error('Error fetching server:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async getServerMetrics(serverId: string): Promise<any[]> {
|
async getServerMetrics(serverId: string): Promise<any[]> {
|
||||||
try {
|
try {
|
||||||
console.log('serverService.getServerMetrics: Fetching metrics for serverId:', serverId);
|
// console.log('serverService.getServerMetrics: Fetching metrics for serverId:', serverId);
|
||||||
|
|
||||||
// First, get the server to find the correct server_id for metrics
|
// First, get the server to find the correct server_id for metrics
|
||||||
let server;
|
let server;
|
||||||
try {
|
try {
|
||||||
server = await this.getServer(serverId);
|
server = await this.getServer(serverId);
|
||||||
console.log('serverService.getServerMetrics: Found server:', server);
|
// console.log('serverService.getServerMetrics: Found server:', server);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('serverService.getServerMetrics: Could not fetch server details:', error);
|
// console.log('serverService.getServerMetrics: Could not fetch server details:', error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to get metrics using the server's server_id field if available
|
// Try to get metrics using the server's server_id field if available
|
||||||
let metricsServerId = serverId;
|
let metricsServerId = serverId;
|
||||||
if (server && server.server_id) {
|
if (server && server.server_id) {
|
||||||
metricsServerId = server.server_id;
|
metricsServerId = server.server_id;
|
||||||
console.log('serverService.getServerMetrics: Using server.server_id for metrics:', metricsServerId);
|
// console.log('serverService.getServerMetrics: Using server.server_id for metrics:', metricsServerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try filtering by server_id first
|
// Try filtering by server_id first
|
||||||
@@ -50,11 +50,11 @@ export const serverService = {
|
|||||||
requestKey: null
|
requestKey: null
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Filtered records by server_id:', filteredRecords.length);
|
// console.log('serverService.getServerMetrics: Filtered records by server_id:', filteredRecords.length);
|
||||||
|
|
||||||
// If no records found with server_id, try alternative approaches
|
// If no records found with server_id, try alternative approaches
|
||||||
if (filteredRecords.length === 0) {
|
if (filteredRecords.length === 0) {
|
||||||
console.log('serverService.getServerMetrics: No records found with server_id filter, trying alternatives...');
|
// console.log('serverService.getServerMetrics: No records found with server_id filter, trying alternatives...');
|
||||||
|
|
||||||
// Get all records to see what's available
|
// Get all records to see what's available
|
||||||
const allRecords = await pb.collection('server_metrics').getFullList({
|
const allRecords = await pb.collection('server_metrics').getFullList({
|
||||||
@@ -62,24 +62,24 @@ export const serverService = {
|
|||||||
requestKey: null
|
requestKey: null
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Total server_metrics records:', allRecords.length);
|
// console.log('serverService.getServerMetrics: Total server_metrics records:', allRecords.length);
|
||||||
if (allRecords.length > 0) {
|
if (allRecords.length > 0) {
|
||||||
console.log('serverService.getServerMetrics: Sample record fields:', Object.keys(allRecords[0]));
|
// console.log('serverService.getServerMetrics: Sample record fields:', Object.keys(allRecords[0]));
|
||||||
console.log('serverService.getServerMetrics: Sample server_id values:', allRecords.slice(0, 5).map(r => r.server_id));
|
// console.log('serverService.getServerMetrics: Sample server_id values:', allRecords.slice(0, 5).map(r => r.server_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
// For now, return some sample data from available records if server matches pattern
|
// For now, return some sample data from available records if server matches pattern
|
||||||
// This is temporary until the correct server_id mapping is established
|
// This is temporary until the correct server_id mapping is established
|
||||||
if (allRecords.length > 0) {
|
if (allRecords.length > 0) {
|
||||||
console.log('serverService.getServerMetrics: Using available records as fallback');
|
// console.log('serverService.getServerMetrics: Using available records as fallback');
|
||||||
filteredRecords = allRecords.slice(0, 50); // Get recent 50 records
|
filteredRecords = allRecords.slice(0, 50); // Get recent 50 records
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('serverService.getServerMetrics: Returning', filteredRecords.length, 'records');
|
// console.log('serverService.getServerMetrics: Returning', filteredRecords.length, 'records');
|
||||||
return filteredRecords;
|
return filteredRecords;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching server metrics:', error);
|
// console.error('Error fetching server metrics:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user