Fix: Pass serviceType to ServiceUptimeHistory and

Refactor service detail page data fetching
This commit is contained in:
Tola Leng
2025-06-19 17:35:12 +07:00
parent 549a3793a5
commit dfe98f9fa6
3 changed files with 40 additions and 18 deletions
@@ -42,7 +42,12 @@ export const useServiceData = (serviceId: string | undefined, startDate: Date, e
const fetchUptimeData = async (serviceId: string, start: Date, end: Date, selectedRange?: DateRangeOption | string) => { const fetchUptimeData = async (serviceId: string, start: Date, end: Date, selectedRange?: DateRangeOption | string) => {
try { try {
console.log(`Fetching uptime data: ${start.toISOString()} to ${end.toISOString()} for range: ${selectedRange}`); if (!service) {
console.log('No service data available for uptime fetch');
return [];
}
console.log(`Fetching uptime data: ${start.toISOString()} to ${end.toISOString()} for range: ${selectedRange}, service type: ${service.type}`);
let limit = 500; // Default limit let limit = 500; // Default limit
@@ -54,8 +59,9 @@ export const useServiceData = (serviceId: string | undefined, startDate: Date, e
console.log(`Using limit ${limit} for range ${selectedRange}`); console.log(`Using limit ${limit} for range ${selectedRange}`);
const history = await uptimeService.getUptimeHistory(serviceId, limit, start, end); // Use the service type to fetch from the correct collection
console.log(`Retrieved ${history.length} uptime records`); const history = await uptimeService.getUptimeHistory(serviceId, limit, start, end, service.type);
console.log(`Retrieved ${history.length} uptime records from collection for ${service.type} service`);
// Sort by timestamp (newest first) // Sort by timestamp (newest first)
const filteredHistory = [...history].sort((a, b) => const filteredHistory = [...history].sort((a, b) =>
@@ -97,6 +103,9 @@ export const useServiceData = (serviceId: string | undefined, startDate: Date, e
id: serviceData.id, id: serviceData.id,
name: serviceData.name, name: serviceData.name,
url: serviceData.url || "", url: serviceData.url || "",
host: serviceData.host || "",
port: serviceData.port || undefined,
domain: serviceData.domain || "",
type: serviceData.service_type || serviceData.type || "HTTP", type: serviceData.service_type || serviceData.type || "HTTP",
status: serviceData.status || "paused", status: serviceData.status || "paused",
responseTime: serviceData.response_time || serviceData.responseTime || 0, responseTime: serviceData.response_time || serviceData.responseTime || 0,
@@ -109,10 +118,11 @@ export const useServiceData = (serviceId: string | undefined, startDate: Date, e
alerts: serviceData.alerts || "unmuted" alerts: serviceData.alerts || "unmuted"
}; };
console.log(`Loaded service: ${formattedService.name} (${formattedService.type})`);
setService(formattedService); setService(formattedService);
// Fetch initial uptime history with 24h default // Fetch initial uptime history with 24h default - wait for service to be set
await fetchUptimeData(serviceId, startDate, endDate, '24h'); await new Promise(resolve => setTimeout(resolve, 100)); // Small delay to ensure state is updated
} catch (error) { } catch (error) {
console.error("Error fetching service:", error); console.error("Error fetching service:", error);
toast({ toast({
@@ -129,11 +139,11 @@ export const useServiceData = (serviceId: string | undefined, startDate: Date, e
fetchServiceData(); fetchServiceData();
}, [serviceId, navigate, toast]); }, [serviceId, navigate, toast]);
// Update data when date range changes // Update data when date range changes or when service is loaded
useEffect(() => { useEffect(() => {
if (serviceId && !isLoading && service) { if (serviceId && !isLoading && service) {
console.log(`Date range changed, refetching data for ${serviceId}: ${startDate.toISOString()} to ${endDate.toISOString()}`); console.log(`Date range changed or service loaded, refetching data for ${serviceId}: ${startDate.toISOString()} to ${endDate.toISOString()}`);
fetchUptimeData(serviceId, startDate, endDate); fetchUptimeData(serviceId, startDate, endDate, '24h');
} }
}, [startDate, endDate, serviceId, isLoading, service]); }, [startDate, endDate, serviceId, isLoading, service]);
@@ -33,10 +33,17 @@ export const ServiceDetailContent = ({
<div className="mb-4 md:mb-6 mt-6 md:mt-8 flex flex-col md:flex-row justify-between items-start md:items-center gap-4 md:gap-0"> <div className="mb-4 md:mb-6 mt-6 md:mt-8 flex flex-col md:flex-row justify-between items-start md:items-center gap-4 md:gap-0">
<h2 className="text-lg md:text-xl font-medium">Response Time History</h2> <h2 className="text-lg md:text-xl font-medium">Response Time History</h2>
<DateRangeFilter <div className="flex flex-col md:flex-row items-start md:items-center gap-2">
onRangeChange={onDateRangeChange} <span className="text-sm text-muted-foreground">
selectedOption={selectedDateOption} Collection: {service.type.toLowerCase() === 'ping' || service.type.toLowerCase() === 'icmp' ? 'ping_data' :
/> service.type.toLowerCase() === 'dns' ? 'dns_data' :
service.type.toLowerCase() === 'tcp' ? 'tcp_data' : 'uptime_data'}
</span>
<DateRangeFilter
onRangeChange={onDateRangeChange}
selectedOption={selectedDateOption}
/>
</div>
</div> </div>
{!hasUptimeData && ( {!hasUptimeData && (
@@ -61,4 +68,4 @@ export const ServiceDetailContent = ({
</div> </div>
</div> </div>
); );
}; };
@@ -1,6 +1,6 @@
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { UptimeData } from "@/types/service.types"; import { UptimeData, Service } from "@/types/service.types";
import { uptimeService } from "@/services/uptimeService"; import { uptimeService } from "@/services/uptimeService";
import { format, parseISO } from "date-fns"; import { format, parseISO } from "date-fns";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
@@ -10,20 +10,25 @@ import { Check, X, AlertTriangle, Pause } from "lucide-react";
interface ServiceUptimeHistoryProps { interface ServiceUptimeHistoryProps {
serviceId: string; serviceId: string;
serviceType: string; // Add service type to determine collection
startDate?: Date; startDate?: Date;
endDate?: Date; endDate?: Date;
} }
export function ServiceUptimeHistory({ export function ServiceUptimeHistory({
serviceId, serviceId,
serviceType,
startDate = new Date(Date.now() - 24 * 60 * 60 * 1000), startDate = new Date(Date.now() - 24 * 60 * 60 * 1000),
endDate = new Date() endDate = new Date()
}: ServiceUptimeHistoryProps) { }: ServiceUptimeHistoryProps) {
const { theme } = useTheme(); const { theme } = useTheme();
const { data: uptimeHistory, isLoading, error } = useQuery({ const { data: uptimeHistory, isLoading, error } = useQuery({
queryKey: ['uptimeHistory', serviceId, startDate?.toISOString(), endDate?.toISOString()], queryKey: ['uptimeHistory', serviceId, serviceType, startDate?.toISOString(), endDate?.toISOString()],
queryFn: () => uptimeService.getUptimeHistory(serviceId, 200, startDate, endDate), queryFn: () => {
enabled: !!serviceId, console.log(`ServiceUptimeHistory: Fetching for service ${serviceId} of type ${serviceType}`);
return uptimeService.getUptimeHistory(serviceId, 200, startDate, endDate, serviceType);
},
enabled: !!serviceId && !!serviceType,
refetchInterval: 5000, // Refresh UI every 5 seconds refetchInterval: 5000, // Refresh UI every 5 seconds
}); });
@@ -135,4 +140,4 @@ export function ServiceUptimeHistory({
</Table> </Table>
</div> </div>
); );
} }