* [pdm-devel] [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id}
@ 2025-12-02 9:25 Fabian Grünbichler
2025-12-02 9:25 ` [pdm-devel] [PATCH datacenter-manager 2/2] api: move remote-tasks, remote-updates and metrics-collection under /remotes Fabian Grünbichler
2025-12-02 12:29 ` [pdm-devel] applied: [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Thomas Lamprecht
0 siblings, 2 replies; 3+ messages in thread
From: Fabian Grünbichler @ 2025-12-02 9:25 UTC (permalink / raw)
To: pdm-devel
to allow moving other top-level endpoints below /remotes/ as well..
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
lib/pdm-client/src/lib.rs | 17 +++++++++++------
server/src/api/remotes.rs | 13 ++++++++++---
ui/src/remotes/config.rs | 6 +++---
ui/src/remotes/edit_remote.rs | 7 +++++--
4 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/lib/pdm-client/src/lib.rs b/lib/pdm-client/src/lib.rs
index 11bedb6..2e4e3fc 100644
--- a/lib/pdm-client/src/lib.rs
+++ b/lib/pdm-client/src/lib.rs
@@ -92,7 +92,12 @@ impl<T: HttpApiClient> std::ops::DerefMut for PdmClient<T> {
impl<T: HttpApiClient> PdmClient<T> {
pub async fn list_remotes(&self) -> Result<Vec<Remote>, Error> {
- Ok(self.0.get("/api2/extjs/remotes").await?.expect_json()?.data)
+ Ok(self
+ .0
+ .get("/api2/extjs/remotes/remote")
+ .await?
+ .expect_json()?
+ .data)
}
pub async fn add_remote(
@@ -110,7 +115,7 @@ impl<T: HttpApiClient> PdmClient<T> {
}
self.0
.post(
- "/api2/extjs/remotes",
+ "/api2/extjs/remotes/remote",
&AddRemoteParams {
remote,
create_token,
@@ -125,13 +130,13 @@ impl<T: HttpApiClient> PdmClient<T> {
remote: &str,
updater: &pdm_api_types::remotes::RemoteUpdater,
) -> Result<(), Error> {
- let path = format!("/api2/extjs/remotes/{remote}");
+ let path = format!("/api2/extjs/remotes/remote/{remote}");
self.0.put(&path, updater).await?.nodata()?;
Ok(())
}
pub async fn delete_remote(&self, remote: &str) -> Result<(), Error> {
- let path = format!("/api2/extjs/remotes/{remote}");
+ let path = format!("/api2/extjs/remotes/remote/{remote}");
self.0.delete(&path).await?.nodata()?;
Ok(())
}
@@ -140,7 +145,7 @@ impl<T: HttpApiClient> PdmClient<T> {
&self,
remote: &str,
) -> Result<pve_api_types::VersionResponse, proxmox_client::Error> {
- let path = format!("/api2/extjs/remotes/{remote}/version");
+ let path = format!("/api2/extjs/remotes/remote/{remote}/version");
Ok(self.0.get(&path).await?.expect_json()?.data)
}
@@ -382,7 +387,7 @@ impl<T: HttpApiClient> PdmClient<T> {
mode: RrdMode,
timeframe: RrdTimeframe,
) -> Result<pdm_api_types::rrddata::RemoteDatapoint, Error> {
- let path = ApiPathBuilder::new(format!("/api2/extjs/remotes/{remote}/rrddata"))
+ let path = ApiPathBuilder::new(format!("/api2/extjs/remotes/remote/{remote}/rrddata"))
.arg("cf", mode)
.arg("timeframe", timeframe)
.build();
diff --git a/server/src/api/remotes.rs b/server/src/api/remotes.rs
index a7463b9..17f8746 100644
--- a/server/src/api/remotes.rs
+++ b/server/src/api/remotes.rs
@@ -29,6 +29,13 @@ use super::rrd_common;
use super::rrd_common::DataPoint;
pub const ROUTER: Router = Router::new()
+ .get(&list_subdirs_api_method!(SUBDIRS))
+ .subdirs(SUBDIRS);
+
+#[sortable]
+const SUBDIRS: SubdirMap = &sorted!([("remote", &REMOTE_ROUTER),]);
+
+pub const REMOTE_ROUTER: Router = Router::new()
.get(&API_METHOD_LIST_REMOTES)
.post(&API_METHOD_ADD_REMOTE)
.match_all("id", &ITEM_ROUTER);
@@ -36,11 +43,11 @@ pub const ROUTER: Router = Router::new()
const ITEM_ROUTER: Router = Router::new()
.put(&API_METHOD_UPDATE_REMOTE)
.delete(&API_METHOD_REMOVE_REMOTE)
- .get(&list_subdirs_api_method!(SUBDIRS))
- .subdirs(SUBDIRS);
+ .get(&list_subdirs_api_method!(REMOTE_SUBDIRS))
+ .subdirs(REMOTE_SUBDIRS);
#[sortable]
-const SUBDIRS: SubdirMap = &sorted!([
+const REMOTE_SUBDIRS: SubdirMap = &sorted!([
("config", &Router::new().get(&API_METHOD_REMOTE_CONFIG)),
("version", &Router::new().get(&API_METHOD_VERSION)),
(
diff --git a/ui/src/remotes/config.rs b/ui/src/remotes/config.rs
index 7d41828..ac3c0f1 100644
--- a/ui/src/remotes/config.rs
+++ b/ui/src/remotes/config.rs
@@ -38,12 +38,12 @@ use proxmox_yew_comp::{
use pdm_api_types::remotes::{NodeUrl, RemoteType};
async fn load_remotes() -> Result<Vec<Remote>, Error> {
- proxmox_yew_comp::http_get("/remotes", None).await
+ proxmox_yew_comp::http_get("/remotes/remote", None).await
}
async fn delete_item(key: Key) -> Result<(), Error> {
let id = key.to_string();
- let url = format!("/remotes/{}", percent_encode_component(&id));
+ let url = format!("/remotes/remote/{}", percent_encode_component(&id));
proxmox_yew_comp::http_delete(&url, None).await?;
Ok(())
}
@@ -69,7 +69,7 @@ pub async fn create_remote(mut data: Value, remote_type: RemoteType) -> Result<(
params["create-token"] = token.into();
}
- proxmox_yew_comp::http_post("/remotes", Some(params)).await
+ proxmox_yew_comp::http_post("/remotes/remote", Some(params)).await
}
/*
diff --git a/ui/src/remotes/edit_remote.rs b/ui/src/remotes/edit_remote.rs
index e5a9664..925d11a 100644
--- a/ui/src/remotes/edit_remote.rs
+++ b/ui/src/remotes/edit_remote.rs
@@ -56,7 +56,7 @@ impl Component for PdmEditRemote {
fn view(&self, ctx: &Context<Self>) -> Html {
let props = ctx.props();
let url = format!(
- "/remotes/{}/config",
+ "/remotes/remote/{}/config",
percent_encode_component(&props.remote_id)
);
EditWindow::new(tr!("Edit") + ": " + &tr!("Remote"))
@@ -69,7 +69,10 @@ impl Component for PdmEditRemote {
move |form_ctx| edit_remote_input_panel(form_ctx, &remote_id)
})
.on_submit({
- let url = format!("/remotes/{}", percent_encode_component(&props.remote_id));
+ let url = format!(
+ "/remotes/remote/{}",
+ percent_encode_component(&props.remote_id)
+ );
move |form_ctx: FormContext| {
let url = url.clone();
async move {
--
2.47.3
_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel
^ permalink raw reply [flat|nested] 3+ messages in thread* [pdm-devel] [PATCH datacenter-manager 2/2] api: move remote-tasks, remote-updates and metrics-collection under /remotes 2025-12-02 9:25 [pdm-devel] [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Fabian Grünbichler @ 2025-12-02 9:25 ` Fabian Grünbichler 2025-12-02 12:29 ` [pdm-devel] applied: [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Thomas Lamprecht 1 sibling, 0 replies; 3+ messages in thread From: Fabian Grünbichler @ 2025-12-02 9:25 UTC (permalink / raw) To: pdm-devel these are all endpoints/trees which are remote-type agnostic, but they are not important enough to warrant their own top-level entry point.. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> --- I hope I haven't missed any references, additional testing would be appreciated! lib/pdm-client/src/lib.rs | 8 ++++---- server/src/api/mod.rs | 4 ---- server/src/api/remotes.rs | 10 +++++++++- ui/src/dashboard/filtered_tasks.rs | 2 +- ui/src/dashboard/view.rs | 2 +- ui/src/main.rs | 2 +- ui/src/remotes/tasks.rs | 2 +- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/pdm-client/src/lib.rs b/lib/pdm-client/src/lib.rs index 2e4e3fc..8cce4f1 100644 --- a/lib/pdm-client/src/lib.rs +++ b/lib/pdm-client/src/lib.rs @@ -343,7 +343,7 @@ impl<T: HttpApiClient> PdmClient<T> { &self, remote: Option<&str>, ) -> Result<(), proxmox_client::Error> { - let path = "/api2/extjs/metric-collection/trigger"; + let path = "/api2/extjs/remotes/metric-collection/trigger"; #[derive(Serialize)] struct TriggerParams<'a> { @@ -363,7 +363,7 @@ impl<T: HttpApiClient> PdmClient<T> { pub async fn get_metric_collection_status( &self, ) -> Result<Vec<pdm_api_types::MetricCollectionStatus>, Error> { - let path = "/api2/extjs/metric-collection/status"; + let path = "/api2/extjs/remotes/metric-collection/status"; Ok(self.0.get(path).await?.expect_json()?.data) } @@ -1326,7 +1326,7 @@ impl<T: HttpApiClient> PdmClient<T> { ) -> Result<pdm_api_types::remote_updates::UpdateSummary, Error> { Ok(self .0 - .get("/api2/extjs/remote-updates/summary") + .get("/api2/extjs/remotes/updates/summary") .await? .expect_json()? .data) @@ -1336,7 +1336,7 @@ impl<T: HttpApiClient> PdmClient<T> { pub async fn refresh_remote_update_summary(&self) -> Result<pdm_api_types::UPID, Error> { Ok(self .0 - .post_without_body("/api2/extjs/remote-updates/refresh") + .post_without_body("/api2/extjs/remotes/updates/refresh") .await? .expect_json()? .data) diff --git a/server/src/api/mod.rs b/server/src/api/mod.rs index e3efed8..5688871 100644 --- a/server/src/api/mod.rs +++ b/server/src/api/mod.rs @@ -26,16 +26,12 @@ pub mod sdn; const SUBDIRS: SubdirMap = &sorted!([ ("access", &access::ROUTER), ("config", &config::ROUTER), - ("metric-collection", &metric_collection::ROUTER), ("ping", &Router::new().get(&API_METHOD_PING)), ("pve", &pve::ROUTER), ("pbs", &pbs::ROUTER), ("remotes", &remotes::ROUTER), ("resources", &resources::ROUTER), ("nodes", &nodes::ROUTER), - ("remote-tasks", &remote_tasks::ROUTER), - // TODO: There might be a better place for this endpoint. - ("remote-updates", &remote_updates::ROUTER), ("sdn", &sdn::ROUTER), ("version", &Router::new().get(&API_METHOD_VERSION)), ]); diff --git a/server/src/api/remotes.rs b/server/src/api/remotes.rs index 17f8746..298ad13 100644 --- a/server/src/api/remotes.rs +++ b/server/src/api/remotes.rs @@ -21,6 +21,9 @@ use pdm_api_types::remotes::{Remote, RemoteType, RemoteUpdater, REMOTE_ID_SCHEMA use pdm_api_types::rrddata::RemoteDatapoint; use pdm_api_types::{Authid, ConfigDigest, PRIV_RESOURCE_AUDIT, PRIV_RESOURCE_MODIFY}; +use crate::api::metric_collection as metric_collection_api; +use crate::api::remote_tasks; +use crate::api::remote_updates; use crate::metric_collection; use crate::{connection, pbs_client}; @@ -33,7 +36,12 @@ pub const ROUTER: Router = Router::new() .subdirs(SUBDIRS); #[sortable] -const SUBDIRS: SubdirMap = &sorted!([("remote", &REMOTE_ROUTER),]); +const SUBDIRS: SubdirMap = &sorted!([ + ("remote", &REMOTE_ROUTER), + ("updates", &remote_updates::ROUTER), + ("tasks", &remote_tasks::ROUTER), + ("metric-collection", &metric_collection_api::ROUTER), +]); pub const REMOTE_ROUTER: Router = Router::new() .get(&API_METHOD_LIST_REMOTES) diff --git a/ui/src/dashboard/filtered_tasks.rs b/ui/src/dashboard/filtered_tasks.rs index fa59e59..bfe3347 100644 --- a/ui/src/dashboard/filtered_tasks.rs +++ b/ui/src/dashboard/filtered_tasks.rs @@ -112,7 +112,7 @@ impl PdmFilteredTasks { params["remote"] = serde_json::Value::String(remote); } - http_get("/remote-tasks/list", Some(params)).await + http_get("/remotes/tasks/list", Some(params)).await } } diff --git a/ui/src/dashboard/view.rs b/ui/src/dashboard/view.rs index 2791277..0606f1a 100644 --- a/ui/src/dashboard/view.rs +++ b/ui/src/dashboard/view.rs @@ -230,7 +230,7 @@ impl ViewComp { "limit": 0, }); add_view_filter(&mut params); - let res = http_get("/remote-tasks/statistics", Some(params)).await; + let res = http_get("/remotes/tasks/statistics", Some(params)).await; link.send_message(Msg::LoadingResult(LoadingResult::TaskStatistics(res))); } }; diff --git a/ui/src/main.rs b/ui/src/main.rs index b7dd3ef..63ac143 100644 --- a/ui/src/main.rs +++ b/ui/src/main.rs @@ -191,7 +191,7 @@ impl Component for DatacenterManagerApp { let mut res: Vec<TaskListItem> = http_get(url.to_string(), params.clone()).await?; - let res2: Vec<_> = http_get("/remote-tasks/list", params).await?; + let res2: Vec<_> = http_get("/remotes/tasks/list", params).await?; res.extend_from_slice(&res2); Ok(res.into_iter().take(100).collect()) diff --git a/ui/src/remotes/tasks.rs b/ui/src/remotes/tasks.rs index 825bd57..f42fa0f 100644 --- a/ui/src/remotes/tasks.rs +++ b/ui/src/remotes/tasks.rs @@ -139,7 +139,7 @@ impl Component for PbsRemoteTaskList { }); let mut task_list = Tasks::new() - .base_url("/remote-tasks/list") + .base_url("/remotes/tasks/list") .on_show_task({ let link = ctx.link().clone(); move |(upid_str, endtime)| link.send_message(Some((upid_str, endtime))) -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel ^ permalink raw reply [flat|nested] 3+ messages in thread
* [pdm-devel] applied: [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} 2025-12-02 9:25 [pdm-devel] [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Fabian Grünbichler 2025-12-02 9:25 ` [pdm-devel] [PATCH datacenter-manager 2/2] api: move remote-tasks, remote-updates and metrics-collection under /remotes Fabian Grünbichler @ 2025-12-02 12:29 ` Thomas Lamprecht 1 sibling, 0 replies; 3+ messages in thread From: Thomas Lamprecht @ 2025-12-02 12:29 UTC (permalink / raw) To: pdm-devel, Fabian Grünbichler On Tue, 02 Dec 2025 10:25:53 +0100, Fabian Grünbichler wrote: > to allow moving other top-level endpoints below /remotes/ as well.. > > Applied, thanks! [1/2] api structure: move /remotes/{id} to /remotes/remote/{id} commit: 7a2ec8437b8267d03d49918b44943030a32ae370 [2/2] api: move remote-tasks, remote-updates and metrics-collection under /remotes commit: 1c31c21930e7656db41c373bae56236d76d68c9c _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-12-02 12:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-02 9:25 [pdm-devel] [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Fabian Grünbichler
2025-12-02 9:25 ` [pdm-devel] [PATCH datacenter-manager 2/2] api: move remote-tasks, remote-updates and metrics-collection under /remotes Fabian Grünbichler
2025-12-02 12:29 ` [pdm-devel] applied: [PATCH datacenter-manager 1/2] api structure: move /remotes/{id} to /remotes/remote/{id} Thomas Lamprecht
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.