feat: backup and restore logs modal view

This commit is contained in:
Charles GTE
2026-06-06 22:46:36 +02:00
parent 1e3f112d9c
commit e1e4d67114
22 changed files with 9294 additions and 28 deletions
+20 -3
View File
@@ -2,23 +2,24 @@
import {ColumnDef} from "@tanstack/react-table";
import {StatusBadge} from "@/components/common/status-badge";
import {Backup, DatabaseWith} from "@/db/schema/07_database";
import {Backup, BackupWith, DatabaseWith} from "@/db/schema/07_database";
import {Setting} from "@/db/schema/01_setting";
import {cn} from "@/lib/utils";
import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip";
import {MemberWithUser} from "@/db/schema/03_organization";
import {formatLocalizedDate} from "@/utils/date-formatting";
import {formatBytes} from "@/utils/text";
import {formatBytes, formatDuration} from "@/utils/text";
import {DatabaseActionsCell} from "@/features/database/backup-actions-cell";
import { Badge as BadgeC } from "@/components/ui/badge";
import {backupOnly} from "@/features/database/database-tabs";
import {LogsModalTrigger} from "@/features/logs/logs-modal-trigger";
export function backupColumns(
isAlreadyRestore: boolean,
settings: Setting,
database: DatabaseWith,
activeMember: MemberWithUser
): ColumnDef<Backup>[] {
): ColumnDef<BackupWith>[] {
const isBackupOnly = backupOnly.some((type) => database.dbms === type)
@@ -85,6 +86,14 @@ export function backupColumns(
return formatBytes(row.getValue("fileSize"))
},
},
{
accessorKey: "durationMs",
header: "Duration",
cell: ({row}) => {
const durationMs = row.getValue("durationMs");
return durationMs ? formatDuration(row.getValue("durationMs")) : "-"
},
},
{
accessorKey: "createdAt",
header: "Created At",
@@ -99,6 +108,14 @@ export function backupColumns(
return <StatusBadge status={row.getValue("status")}/>;
},
},
{
accessorKey: "logs",
header: "Logs",
cell: ({row}) => {
const logs = row.original.logs ?? [];
return <LogsModalTrigger logs={logs}/>;
},
},
{
id: "actions",
cell: ({row}) => <DatabaseActionsCell isAlreadyRestore={isAlreadyRestore} activeMember={activeMember} backup={row.original} isBackupOnly={isBackupOnly}/>,
@@ -36,7 +36,8 @@ export const getDatabaseDataAction = userAction
with: {
storageChannel: true
}
}
},
logs: true
},
orderBy: (b, {desc}) => [desc(b.createdAt)],
}) as BackupWith[];
@@ -23,6 +23,7 @@ import {BackupButton} from "@/features/database/backup-button";
import {HealthModal} from "@/features/database/health-modal";
import {HealthcheckLog} from "@/db/schema/15_healthcheck-log";
import {Badge} from "@/components/ui/badge";
import {LogsModal} from "@/features/logs/logs-modal";
export type DatabaseContentProps = {
settings: Setting;
@@ -156,6 +157,7 @@ export const DatabaseContent = (props: DatabaseContentProps) => {
availableBackups={stats.availableBackups}
totalBackups={stats.totalBackups}
/>
<LogsModal/>
<DatabaseBackupActionsModal/>
<DatabaseTabs
activeMember={props.activeMember}