import React from "react"; import { Layers, Box, Server, Activity } from "lucide-react"; import type { PodInfo, DeploymentInfo, StatefulSetInfo, DaemonSetInfo, JobInfo, CronJobInfo, } from "@/lib/tauriCommands"; interface WorkloadOverviewProps { clusterId: string; resources: { pods: PodInfo[]; deployments: DeploymentInfo[]; statefulsets: StatefulSetInfo[]; daemonsets: DaemonSetInfo[]; jobs: JobInfo[]; cronjobs: CronJobInfo[]; }; } interface SummaryCardProps { title: string; value: number; subtitle?: string; icon: React.ReactNode; } function SummaryCard({ title, value, subtitle, icon }: SummaryCardProps) { return (

{title}

{icon}
{value}
{subtitle && (

{subtitle}

)}
); } export function WorkloadOverview({ resources }: WorkloadOverviewProps) { const { pods, deployments, statefulsets, daemonsets, jobs, cronjobs } = resources; const runningPods = pods.filter((p) => p.status === "Running").length; const pendingPods = pods.filter((p) => p.status === "Pending").length; const failedPods = pods.filter((p) => p.status === "Failed").length; const readyDeployments = deployments.filter((d) => d.ready === `${d.replicas}/${d.replicas}`).length; const readyStatefulSets = statefulsets.filter((s) => { const parts = s.ready.split("/"); return parts.length === 2 && parts[0] === parts[1]; }).length; const healthyDaemonSets = daemonsets.filter( (ds) => ds.desired === ds.ready ).length; const completedJobs = jobs.filter((j) => { const parts = j.completions.split("/"); return parts.length === 2 && parts[0] === parts[1]; }).length; return (

Workload Overview

Summary of all workload resources in the selected namespace

} /> } /> } /> } /> } /> 0 ? `Active: ${cronjobs.reduce((acc, cj) => acc + cj.active, 0)}` : undefined} icon={} />
{pods.length > 0 && (

Pod Status Breakdown

Running: {runningPods}
Pending: {pendingPods}
Failed: {failedPods}
{pods.length - runningPods - pendingPods - failedPods > 0 && (
Other: {pods.length - runningPods - pendingPods - failedPods}
)}
)}
); }