{t('errorLoadingServer')}
{t('unableToFetchServerData')}
import { useState, useEffect } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { useTheme } from "@/contexts/ThemeContext"; import { useLanguage } from "@/contexts/LanguageContext"; import { useSidebar } from "@/contexts/SidebarContext"; import { Sidebar } from "@/components/dashboard/Sidebar"; import { Header } from "@/components/dashboard/Header"; import { serverService } from "@/services/serverService"; import { authService } from "@/services/authService"; import { Button } from "@/components/ui/button"; import { ArrowLeft, Server } from "lucide-react"; import { ServerMetricsOverview } from "@/components/servers/ServerMetricsOverview"; import { ServerHistoryCharts } from "@/components/servers/ServerHistoryCharts"; import { ServerSystemInfoCard } from "@/components/servers/ServerSystemInfoCard"; const ServerDetail = () => { const { serverId } = useParams(); const navigate = useNavigate(); const { theme } = useTheme(); const { t } = useLanguage(); const { sidebarCollapsed, toggleSidebar } = useSidebar(); const [currentUser, setCurrentUser] = useState(authService.getCurrentUser()); //console.log('ServerDetail component loaded with serverId:', serverId); const { data: server, isLoading: serverLoading, error: serverError } = useQuery({ queryKey: ['server', serverId], queryFn: () => serverService.getServer(serverId!), enabled: !!serverId }); const getOSLogo = (server: any) => { if (!server) return null; // Parse system_info if it's a string, but handle both JSON and plain text let systemInfo: any = {}; let systemInfoText = ''; if (server.system_info) { if (typeof server.system_info === 'string') { // Try to parse as JSON first try { systemInfo = JSON.parse(server.system_info); } catch (error) { // If JSON parsing fails, treat it as plain text // console.log('system_info is plain text:', server.system_info); systemInfoText = server.system_info.toLowerCase(); } } else { systemInfo = server.system_info; } } // Check system_info (both JSON and plain text), then fallback to os_type const osFromJson = systemInfo.OSName || ''; const osFromText = systemInfoText; const osFromType = server.os_type || ''; // Combine all OS information for detection const combinedOSInfo = `${osFromJson} ${osFromText} ${osFromType}`.toLowerCase(); // console.log('OS detection info:', { osFromJson, osFromText, osFromType, combinedOSInfo }); // Check for specific OS distributions first (most specific to least specific) if (combinedOSInfo.includes('ubuntu')) { return '/upload/os/ubuntu.png'; } else if (combinedOSInfo.includes('debian')) { return '/upload/os/debian.png'; } else if (combinedOSInfo.includes('centos')) { return '/upload/os/centos.png'; } else if (combinedOSInfo.includes('rhel') || combinedOSInfo.includes('red hat')) { return '/upload/os/rhel.png'; } else if (combinedOSInfo.includes('fedora')) { return '/upload/os/fedora.png'; } else if (combinedOSInfo.includes('suse') || combinedOSInfo.includes('opensuse')) { return '/upload/os/suse.png'; } else if (combinedOSInfo.includes('arch')) { return '/upload/os/arch.png'; } else if (combinedOSInfo.includes('alpine')) { return '/upload/os/alpine.png'; } else if (combinedOSInfo.includes('windows')) { return '/upload/os/windows.png'; } else if (combinedOSInfo.includes('macos') || combinedOSInfo.includes('darwin') || combinedOSInfo.includes('mac os')) { return '/upload/os/macos.png'; } else if (combinedOSInfo.includes('freebsd')) { return '/upload/os/freebsd.png'; } else if (combinedOSInfo.includes('linux') || combinedOSInfo.includes('gnu')) { // Default to linux.png for any Linux-based system that doesn't match specific distributions return '/upload/os/linux.png'; } // Final fallback - if we can't determine the OS, default to linux.png return '/upload/os/linux.png'; }; const handleLogout = () => { authService.logout(); navigate('/login'); }; const handleBackToServers = () => { navigate('/instance-monitoring'); }; if (serverError) { return (
{t('unableToFetchServerData')}
{t('loadingServerDetails')}
{t('monitorServerMetrics')} {server && ( {t('serverHostnameIpOs') .replace('{hostname}', server.hostname) .replace('{ip_address}', server.ip_address) .replace('{os_type}', server.os_type)} )}