Files
portabase/src/components/wrappers/dashboard/projects/database/database-kpi.tsx
T

65 lines
3.1 KiB
TypeScript
Raw Normal View History

2025-05-16 15:54:17 +02:00
"use client";
import {Card, CardContent, CardHeader, CardTitle} from "@/components/ui/card";
2025-07-16 20:16:18 +02:00
import {formatDateLastContact} from "@/utils/date-formatting";
import {Database} from "@/db/schema/07_database";
import {DatabaseBackup, Server, CheckCircle, Clock} from "lucide-react";
export type DatabaseKpiPro = {
2025-05-16 15:54:17 +02:00
successRate: any;
database: Database;
totalBackups: number;
availableBackups: number;
2025-05-16 15:54:17 +02:00
};
export const DatabaseKpi = (props: DatabaseKpiPro) => {
return (
<div className="flex flex-col sm:flex-row sm:justify-between gap-8 mb-6">
<Card className="w-full sm:w-auto flex-1">
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">Available Backups</CardTitle>
<DatabaseBackup className="h-4 w-4 text-muted-foreground"/>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">{props.availableBackups}</div>
<p className="text-xs text-muted-foreground">Backups currently available</p>
</CardContent>
</Card>
<Card className="w-full sm:w-auto flex-1">
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">Total Backups</CardTitle>
<Server className="h-4 w-4 text-muted-foreground"/>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">{props.totalBackups}</div>
<p className="text-xs text-muted-foreground">Total backups recorded</p>
</CardContent>
</Card>
<Card className="w-full sm:w-auto flex-1">
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">Success Rate</CardTitle>
<CheckCircle className="h-4 w-4 text-muted-foreground"/>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">
{props.successRate ? `${props.successRate.toFixed(0)} %` : "Unavailable"}
</div>
<p className="text-xs text-muted-foreground">Backup success rate</p>
</CardContent>
</Card>
<Card className="w-full sm:w-auto flex-1">
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">Last Contact</CardTitle>
<Clock className="h-4 w-4 text-muted-foreground"/>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">
{formatDateLastContact(props.database.lastContact)}
</div>
<p className="text-xs text-muted-foreground">Time of last backup contact</p>
</CardContent>
</Card>
</div>
2025-05-16 15:54:17 +02:00
);
};