import { StatCard, Card, DataTable, Badge, Button, ProgressBar, Spinner } from '@cameleer/design-system'; import type { Column } from '@cameleer/design-system'; import { useDatabaseStatus, useConnectionPool, useDatabaseTables, useActiveQueries, useKillQuery } from '../../api/queries/admin/database'; export default function DatabaseAdminPage() { const { data: status } = useDatabaseStatus(); const { data: pool } = useConnectionPool(); const { data: tables } = useDatabaseTables(); const { data: queries } = useActiveQueries(); const killQuery = useKillQuery(); const poolPct = pool ? (pool.activeConnections / pool.maximumPoolSize) * 100 : 0; const tableColumns: Column[] = [ { key: 'tableName', header: 'Table' }, { key: 'rowCount', header: 'Rows', sortable: true }, { key: 'dataSize', header: 'Data Size' }, { key: 'indexSize', header: 'Index Size' }, ]; const queryColumns: Column[] = [ { key: 'pid', header: 'PID' }, { key: 'durationSeconds', header: 'Duration', render: (v) => `${v}s` }, { key: 'state', header: 'State', render: (v) => }, { key: 'query', header: 'Query', render: (v) => {String(v).slice(0, 80)} }, { key: 'pid', header: '', width: '80px', render: (v) => , }, ]; return (

Database Administration

{pool && (

Connection Pool

Active: {pool.activeConnections} Idle: {pool.idleConnections} Max: {pool.maximumPoolSize}
)}

Tables

({ ...t, id: t.tableName }))} sortable pageSize={20} />

Active Queries

({ ...q, id: String(q.pid) }))} />
); }