Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 7 additions & 50 deletions dashboard/src/api/hooks/useStorage.ts
Original file line number Diff line number Diff line change
@@ -1,49 +1,20 @@
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"
import { useQuery } from "@tanstack/react-query"
import { api } from "@/api/client"
import type {
StorageStatusResponse,
MigrationJobStatus,
SetBackendResponse,
TierDistribution,
} from "@/api/types"
import type { SurrealDBStorageStatus, TierDistribution } from "@/api/types"

const keys = {
status: ["storage", "status"] as const,
job: (id: string) => ["storage", "job", id] as const,
tierStats: ["storage", "tier-stats"] as const,
}

/**
* Fetch SurrealDB storage status (backend, connection, live counts).
* Replaces the old SQLite/InfinityDB useStorageStatus hook — SurrealDB-only.
*/
export function useStorageStatus() {
return useQuery({
queryKey: keys.status,
queryFn: () => api.get<StorageStatusResponse>("/api/dashboard/storage/status"),
})
}

export function useMigrationJob(jobId: string | null) {
return useQuery({
queryKey: keys.job(jobId ?? ""),
queryFn: () =>
api.get<MigrationJobStatus>(`/api/dashboard/storage/migrate/${jobId}`),
enabled: !!jobId,
refetchInterval: (query) => {
const state = query.state.data?.state
return state === "running" ? 1500 : false
},
})
}

export function useStartMigration() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (direction: "to_infinitydb" | "to_sqlite") =>
api.post<{ job_id: string; brain: string; message: string; disk_warning?: string }>(
"/api/dashboard/storage/migrate",
{ direction },
),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: keys.status })
},
queryFn: () => api.get<SurrealDBStorageStatus>("/api/dashboard/storage/status"),
})
}

Expand All @@ -53,17 +24,3 @@ export function useTierStats() {
queryFn: () => api.get<TierDistribution>("/api/dashboard/tier-stats"),
})
}

export function useSetBackend() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (backend: "sqlite" | "infinitydb") =>
api.post<SetBackendResponse>("/api/dashboard/storage/backend", {
backend,
}),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: keys.status })
queryClient.invalidateQueries({ queryKey: ["dashboard", "stats"] })
},
})
}
44 changes: 12 additions & 32 deletions dashboard/src/api/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,38 +252,18 @@ export interface SyncConfigUpdateResponse {
conflict_strategy: string
}

// GET /api/dashboard/storage/status
export interface StorageStatusResponse {
current_backend: "sqlite" | "infinitydb"
pro_installed: boolean
is_pro_license: boolean
sqlite_exists: boolean
sqlite_size_bytes: number
infinitydb_exists: boolean
migration_job: MigrationJobStatus | null
}

// POST /api/dashboard/storage/migrate + GET /api/dashboard/storage/migrate/{job_id}
export interface MigrationJobStatus {
job_id: string
state: "running" | "done" | "error"
direction: "to_infinitydb" | "to_sqlite"
brain: string
neurons_total: number
neurons_done: number
synapses_total: number
synapses_done: number
fibers_total: number
fibers_done: number
error: string | null
started_at: string
finished_at: string | null
}

// POST /api/dashboard/storage/backend
export interface SetBackendResponse {
status: "switched" | "unchanged"
backend: string
// GET /api/dashboard/storage/status (SurrealDB-only)
export interface SurrealDBStorageStatus {
backend: "surrealdb"
url: string
namespace: string
database: string
healthy: boolean
active_brain: string
neuron_count: number
fiber_count: number
synapse_count: number
health_grade: string
}

// GET /health
Expand Down
218 changes: 0 additions & 218 deletions dashboard/src/features/storage/MigrationCard.tsx

This file was deleted.

Loading
Loading