'use client'; import { useSession } from 'next-auth/react'; import { useQuery } from '@tanstack/react-query'; import { createCrossplaneClient, VM } from '@/lib/crossplane-client'; import { Card, CardContent, CardHeader, CardTitle } from './ui/Card'; import { Server, Activity, AlertCircle, CheckCircle, Loader2 } from 'lucide-react'; import { Badge } from './ui/badge'; import { gql } from '@apollo/client'; import { useQuery as useApolloQuery } from '@apollo/client'; interface ActivityItem { id: string; type: string; description: string; timestamp: Date; } const GET_RESOURCES = gql` query GetResources { resources { id name type status } } `; const GET_HEALTH = gql` query GetHealth { health { status timestamp } } `; export default function Dashboard() { const { data: session } = useSession(); const crossplane = createCrossplaneClient(session?.accessToken as string); const { data: vms = [] } = useQuery({ queryKey: ['vms'], queryFn: () => crossplane.getVMs(), }); const { data: resourcesData, loading: resourcesLoading } = useApolloQuery(GET_RESOURCES, { skip: !session, }); const { data: healthData, loading: healthLoading } = useApolloQuery(GET_HEALTH, { skip: !session, pollInterval: 30000, // Refresh every 30 seconds }); const resources = resourcesData?.resources || []; const health = healthData?.health; const runningVMs = vms.filter((vm: VM) => vm.status?.state === 'running').length; const stoppedVMs = vms.filter((vm: VM) => vm.status?.state === 'stopped').length; const totalVMs = vms.length; // Get recent activity from resources (last 10 created/updated) const recentActivity: ActivityItem[] = resources ?.slice(0, 10) .map((resource: any) => ({ id: resource.id, type: resource.type, description: `${resource.name} - ${resource.status}`, timestamp: new Date(resource.updatedAt || resource.createdAt), })) .sort((a: ActivityItem, b: ActivityItem) => b.timestamp.getTime() - a.timestamp.getTime()) || []; return (

Dashboard

Total VMs
{isLoading ? '...' : totalVMs}

Across all sites

Running
{isLoading ? '...' : runningVMs}

Active virtual machines

Stopped
{isLoading ? '...' : stoppedVMs}

Inactive virtual machines

System Health {healthLoading ? ( ) : ( <>
{health?.status === 'ok' ? 'Healthy' : health?.status || 'Unknown'}

{health?.status === 'ok' ? 'All systems operational' : 'Checking system status...'}

)}
Recent Activity {resourcesLoading ? (
) : recentActivity.length === 0 ? (

No recent activity

) : (
{recentActivity.map((activity) => (

{activity.description}

{activity.timestamp.toLocaleString()}

{activity.type}
))}
)}
); }