From bf9b093190af9d2654eccc2d561eea40b1886ca6 Mon Sep 17 00:00:00 2001 From: Josip Igrec Date: Sat, 31 May 2025 01:20:30 +0200 Subject: [PATCH] Add `GET /v1/namespaces` endpoint to admin API The new endpoint will return the list of all namespaces currently available. This is required for building a proper UI for the admin portion of the application. Before this change, this was only doable by listing directories in the DB storage directory. --- libsql-server/src/http/admin/mod.rs | 14 ++++++++++++++ libsql-server/src/namespace/meta_store.rs | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/libsql-server/src/http/admin/mod.rs b/libsql-server/src/http/admin/mod.rs index 6953696312..bfce6a4df0 100644 --- a/libsql-server/src/http/admin/mod.rs +++ b/libsql-server/src/http/admin/mod.rs @@ -142,6 +142,7 @@ where }; let router = axum::Router::new() .route("/", get(handle_get_index)) + .route("/v1/namespaces", get(handle_get_namespaces)) .route( "/v1/namespaces/:namespace/config", get(handle_get_config).post(handle_post_config), @@ -238,6 +239,19 @@ async fn handle_get_index() -> &'static str { "Welcome to the sqld admin API" } +async fn handle_get_namespaces( + State(app_state): State>>, +) -> Json> { + let store = app_state.namespaces.meta_store(); + let namespaces = store + .list_names() + .await + .iter() + .map(|n| n.to_string()) + .collect(); + Json(namespaces) +} + async fn handle_metrics(State(metrics): State) -> String { metrics.render() } diff --git a/libsql-server/src/namespace/meta_store.rs b/libsql-server/src/namespace/meta_store.rs index 70b419ebe9..d5ad57795d 100644 --- a/libsql-server/src/namespace/meta_store.rs +++ b/libsql-server/src/namespace/meta_store.rs @@ -562,6 +562,10 @@ impl MetaStore { self.inner.configs.lock().await.contains_key(namespace) } + pub async fn list_names(&self) -> Vec { + self.inner.configs.lock().await.keys().cloned().collect() + } + pub(crate) async fn shutdown(&self) -> crate::Result<()> { let replicator = self.inner.wal_manager.wrapper().as_ref();