public inbox for pdm-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager
@ 2025-11-13 13:32 Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 1/2] node_info: only use build date from kernel version Shannon Sterz
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Shannon Sterz @ 2025-11-13 13:32 UTC (permalink / raw)
  To: pdm-devel

this series slightly adapts the previously applied node status panel and
integrates it into pdm. the first commit changes the way we display
kernel version, dropping the preempt mode and similar information to get
this more aligned with pve/pbs. the second commit makes the fingerprint
and power management buttons of the NodeStatusPanel opt-in. finally, the
panel is integrated into pdm as a new tab in the Node Status tab.

Changelog
---------

changes since v4:

- add opt-in power management buttons back to the NodeStatusPanel
  (thanks @ Thomas Lamprecht)
- add a separate toolbar back in, in the tab of the Administration menu
  (thanks @ Thomas Lamprecht)

changes since v3:

- move shutdown and reboot button to the panel again and remove the
  additional toolbar. also make the panel appear like a card. (thanks @
  Lukas Wagner)

changes since v2:

- parts of this series got applied already (thanks @ Thomas Lamprecht)
- add a patch adapting the way we render the kernel version (thanks @
  Thomas Lamprecht & Lukas Wagner)
- make the node status panel a panel in a new "Node Status" tab in der
  "Administration" menu instead of a widget

changes since v1:

- move the node status panel to its own widget type in pdm
- properly import api feature (thanks @ Dominik Csapak)
- smaller clean ups (thanks @ Dominik Csapak)


proxmox-yew-comp:

Shannon Sterz (2):
  node_info: only use build date from kernel version
  node status panel: make power management and fingerprint buttons
    opt-in

 src/node_info.rs         |  4 +++-
 src/node_status_panel.rs | 35 +++++++++++++++++++++++++----------
 2 files changed, 28 insertions(+), 11 deletions(-)


proxmox-datacenter-manager:

Shannon Sterz (1):
  ui: add a Node Status tab to the administration panel

 ui/Cargo.toml                        |   1 +
 ui/src/administration/mod.rs         |   9 +++
 ui/src/administration/node_status.rs | 117 +++++++++++++++++++++++++++
 3 files changed, 127 insertions(+)
 create mode 100644 ui/src/administration/node_status.rs


Summary over all repositories:
  5 files changed, 155 insertions(+), 11 deletions(-)

--
Generated by git-murpp 0.8.1


_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [pdm-devel] [PATCH yew-comp v5 1/2] node_info: only use build date from kernel version
  2025-11-13 13:32 [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Shannon Sterz
@ 2025-11-13 13:32 ` Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 2/2] node status panel: make power management and fingerprint buttons opt-in Shannon Sterz
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Shannon Sterz @ 2025-11-13 13:32 UTC (permalink / raw)
  To: pdm-devel

this aligns the output with pve and pbs [1]. this reduces noise and
only displays useful information to the user.

[1]: https://git.proxmox.com/?p=pve-manager.git;h=be04f8ee8a

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 src/node_info.rs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/node_info.rs b/src/node_info.rs
index 5604787..b7c0360 100644
--- a/src/node_info.rs
+++ b/src/node_info.rs
@@ -146,6 +146,8 @@ pub fn node_info(data: Option<NodeStatus>) -> Container {
         None => (String::new(), String::new(), String::new()),
     };
 
+    let build_date = k_version.split(['(', ')']).nth(1).unwrap_or("unknown");
+
     let boot_mode = if let Some(NodeStatus::Common(node_status)) = data {
         Some(&node_status.boot_info)
     } else {
@@ -247,7 +249,7 @@ pub fn node_info(data: Option<NodeStatus>) -> Container {
         .with_child(
             StatusRow::new(tr!("Kernel Version"))
                 .style("grid-column", "1/-1")
-                .status(format!("{} {} {}", k_sysname, k_release, k_version)),
+                .status(format!("{k_sysname} {k_release} ({build_date})")),
         )
         .with_optional_child(boot_mode.map(|m| {
             let mode = match m.mode {
-- 
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] 5+ messages in thread

* [pdm-devel] [PATCH yew-comp v5 2/2] node status panel: make power management and fingerprint buttons opt-in
  2025-11-13 13:32 [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 1/2] node_info: only use build date from kernel version Shannon Sterz
@ 2025-11-13 13:32 ` Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH datacenter-manager v5 1/1] ui: add a Node Status tab to the administration panel Shannon Sterz
  2025-11-13 21:43 ` [pdm-devel] applied-series: [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Shannon Sterz @ 2025-11-13 13:32 UTC (permalink / raw)
  To: pdm-devel

the panel appeared to dense with all these tools being present in
every situation. so make them opt-in.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 src/node_status_panel.rs | 35 +++++++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/node_status_panel.rs b/src/node_status_panel.rs
index 3d37d80..3f8946d 100644
--- a/src/node_status_panel.rs
+++ b/src/node_status_panel.rs
@@ -27,6 +27,14 @@ pub struct NodeStatusPanel {
     #[builder(IntoPropValue, into_prop_value)]
     #[prop_or_default]
     status_base_url: Option<AttrValue>,
+
+    #[builder(IntoPropValue, into_prop_value)]
+    #[prop_or_default]
+    fingerprint_button: bool,
+
+    #[builder(IntoPropValue, into_prop_value)]
+    #[prop_or_default]
+    power_management_buttons: bool,
 }
 
 impl NodeStatusPanel {
@@ -195,7 +203,7 @@ impl LoadableComponent for ProxmoxNodeStatusPanel {
             .as_ref()
             .map(|r| crate::NodeStatus::Common(r));
 
-        Panel::new()
+        let mut panel = Panel::new()
             .border(false)
             .class(FlexFit)
             .title(
@@ -206,7 +214,11 @@ impl LoadableComponent for ProxmoxNodeStatusPanel {
                     .with_child(tr!("Node Status"))
                     .into_html(),
             )
-            .with_tool(
+            .with_child(node_info(status))
+            .with_optional_child(self.error.as_ref().map(|e| error_message(&e.to_string())));
+
+        if ctx.props().power_management_buttons {
+            panel.add_tool(
                 ConfirmButton::new(tr!("Reboot"))
                     .confirm_message(tr!("Are you sure you want to reboot the node?"))
                     .on_activate(
@@ -214,8 +226,8 @@ impl LoadableComponent for ProxmoxNodeStatusPanel {
                             .callback(|_| Msg::RebootOrShutdown(NodePowerCommand::Reboot)),
                     )
                     .icon_class("fa fa-undo"),
-            )
-            .with_tool(
+            );
+            panel.add_tool(
                 ConfirmButton::new(tr!("Shutdown"))
                     .confirm_message(tr!("Are you sure you want to shut down the node?"))
                     .on_activate(
@@ -223,8 +235,11 @@ impl LoadableComponent for ProxmoxNodeStatusPanel {
                             .callback(|_| Msg::RebootOrShutdown(NodePowerCommand::Shutdown)),
                     )
                     .icon_class("fa fa-power-off"),
-            )
-            .with_tool(
+            );
+        }
+
+        if ctx.props().fingerprint_button {
+            panel.add_tool(
                 Button::new(tr!("Show Fingerprint"))
                     .icon_class("fa fa-hashtag")
                     .class(ColorScheme::Primary)
@@ -232,10 +247,10 @@ impl LoadableComponent for ProxmoxNodeStatusPanel {
                         ctx.link()
                             .change_view_callback(|_| ViewState::FingerprintDialog),
                     ),
-            )
-            .with_child(node_info(status))
-            .with_optional_child(self.error.as_ref().map(|e| error_message(&e.to_string())))
-            .into()
+            );
+        }
+
+        panel.into()
     }
 }
 
-- 
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] 5+ messages in thread

* [pdm-devel] [PATCH datacenter-manager v5 1/1] ui: add a Node Status tab to the administration panel
  2025-11-13 13:32 [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 1/2] node_info: only use build date from kernel version Shannon Sterz
  2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 2/2] node status panel: make power management and fingerprint buttons opt-in Shannon Sterz
@ 2025-11-13 13:32 ` Shannon Sterz
  2025-11-13 21:43 ` [pdm-devel] applied-series: [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Shannon Sterz @ 2025-11-13 13:32 UTC (permalink / raw)
  To: pdm-devel

it shows the current node status via the new NodeStatPanel and has
buttons for shutting down and rebooting the node.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 ui/Cargo.toml                        |   1 +
 ui/src/administration/mod.rs         |   9 +++
 ui/src/administration/node_status.rs | 117 +++++++++++++++++++++++++++
 3 files changed, 127 insertions(+)
 create mode 100644 ui/src/administration/node_status.rs

diff --git a/ui/Cargo.toml b/ui/Cargo.toml
index 780b4ac..4d0da16 100644
--- a/ui/Cargo.toml
+++ b/ui/Cargo.toml
@@ -38,6 +38,7 @@ proxmox-human-byte = "1"
 proxmox-login = "1"
 proxmox-schema = "5"
 proxmox-rrd-api-types = "1"
+proxmox-node-status = "1"
 pbs-api-types = "1.0.3"

 pdm-api-types = { version = "0.9", path = "../lib/pdm-api-types" }
diff --git a/ui/src/administration/mod.rs b/ui/src/administration/mod.rs
index a9f7ac6..028c84f 100644
--- a/ui/src/administration/mod.rs
+++ b/ui/src/administration/mod.rs
@@ -16,6 +16,8 @@ use pwt_macros::builder;
 //mod services;
 //pub use services::Services;

+mod node_status;
+
 use proxmox_yew_comp::{AptPackageManager, AptRepositories, ExistingProduct, Syslog, Tasks};

 #[derive(Clone, PartialEq, Properties)]
@@ -67,6 +69,13 @@ impl Component for PdmServerAdministration {
                 |_| Services::new().into(),
             )
             */
+            .with_item_builder(
+                TabBarItem::new()
+                    .key("status")
+                    .label(tr!("Node Status"))
+                    .icon_class("fa fa-book"),
+                move |_| node_status::NodeStatus::new().into(),
+            )
             .with_item_builder(
                 TabBarItem::new()
                     .key("updates")
diff --git a/ui/src/administration/node_status.rs b/ui/src/administration/node_status.rs
new file mode 100644
index 0000000..cce3426
--- /dev/null
+++ b/ui/src/administration/node_status.rs
@@ -0,0 +1,117 @@
+use std::rc::Rc;
+
+use anyhow::Error;
+use yew::virtual_dom::{VComp, VNode};
+
+use proxmox_node_status::NodePowerCommand;
+use proxmox_yew_comp::{http_post, ConfirmButton, NodeStatusPanel};
+use pwt::prelude::*;
+use pwt::widget::{Column, Container, Row};
+
+#[derive(Properties, Clone, PartialEq)]
+pub(crate) struct NodeStatus {}
+
+impl NodeStatus {
+    pub(crate) fn new() -> Self {
+        yew::props!(Self {})
+    }
+}
+
+impl From<NodeStatus> for VNode {
+    fn from(value: NodeStatus) -> Self {
+        VComp::new::<PdmNodeStatus>(Rc::new(value), None).into()
+    }
+}
+
+enum Msg {
+    Reload,
+    Error(Error),
+    RebootOrShutdown(NodePowerCommand),
+}
+
+struct PdmNodeStatus {
+    error: Option<Error>,
+}
+
+impl PdmNodeStatus {
+    fn change_power_state(&self, ctx: &yew::Context<Self>, command: NodePowerCommand) {
+        ctx.link().send_future(async move {
+            let data = Some(serde_json::json!({"command": command}));
+
+            match http_post("/nodes/localhost/status", data).await {
+                Ok(()) => Msg::Reload,
+                Err(e) => Msg::Error(e),
+            }
+        });
+    }
+}
+
+impl Component for PdmNodeStatus {
+    type Message = Msg;
+    type Properties = NodeStatus;
+
+    fn create(_ctx: &yew::Context<Self>) -> Self {
+        Self { error: None }
+    }
+
+    fn update(&mut self, ctx: &yew::Context<Self>, msg: Self::Message) -> bool {
+        match msg {
+            Msg::RebootOrShutdown(command) => {
+                self.change_power_state(ctx, command);
+                false
+            }
+            Msg::Error(e) => {
+                self.error = Some(e);
+                true
+            }
+            Msg::Reload => true,
+        }
+    }
+
+    fn view(&self, ctx: &yew::Context<Self>) -> Html {
+        Column::new()
+            .class(pwt::css::FlexFit)
+            .with_child(
+                Container::new()
+                    .class("pwt-content-spacer-padding")
+                    .class("pwt-content-spacer-colors")
+                    .class("pwt-default-colors")
+                    .padding_bottom(0)
+                    .with_child(
+                        Row::new()
+                            .gap(1)
+                            .with_child(
+                                ConfirmButton::new(tr!("Reboot"))
+                                    .confirm_message(tr!(
+                                        "Are you sure you want to reboot the node?"
+                                    ))
+                                    .on_activate(ctx.link().callback(|_| {
+                                        Msg::RebootOrShutdown(NodePowerCommand::Reboot)
+                                    }))
+                                    .class(pwt::css::ColorScheme::Neutral)
+                                    .icon_class("fa fa-undo"),
+                            )
+                            .with_child(
+                                ConfirmButton::new(tr!("Shutdown"))
+                                    .confirm_message(tr!(
+                                        "Are you sure you want to shut down the node?"
+                                    ))
+                                    .on_activate(ctx.link().callback(|_| {
+                                        Msg::RebootOrShutdown(NodePowerCommand::Shutdown)
+                                    }))
+                                    .class(pwt::css::ColorScheme::Neutral)
+                                    .icon_class("fa fa-power-off"),
+                            ),
+                    ),
+            )
+            .with_child(
+                Row::new()
+                    .class("pwt-content-spacer-padding")
+                    .class("pwt-content-spacer-colors")
+                    .class("pwt-default-colors")
+                    .class(pwt::css::FlexFit)
+                    .with_child(NodeStatusPanel::new().status_base_url("/nodes/localhost/status")),
+            )
+            .into()
+    }
+}
--
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] 5+ messages in thread

* [pdm-devel] applied-series: [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager
  2025-11-13 13:32 [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Shannon Sterz
                   ` (2 preceding siblings ...)
  2025-11-13 13:32 ` [pdm-devel] [PATCH datacenter-manager v5 1/1] ui: add a Node Status tab to the administration panel Shannon Sterz
@ 2025-11-13 21:43 ` Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Thomas Lamprecht @ 2025-11-13 21:43 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion, Shannon Sterz

Am 13.11.25 um 14:31 schrieb Shannon Sterz:
> this series slightly adapts the previously applied node status panel and
> integrates it into pdm. the first commit changes the way we display
> kernel version, dropping the preempt mode and similar information to get
> this more aligned with pve/pbs. the second commit makes the fingerprint
> and power management buttons of the NodeStatusPanel opt-in. finally, the
> panel is integrated into pdm as a new tab in the Node Status tab.
> 
> Changelog
> ---------
> 
> changes since v4:
> 
> - add opt-in power management buttons back to the NodeStatusPanel
>   (thanks @ Thomas Lamprecht)
> - add a separate toolbar back in, in the tab of the Administration menu
>   (thanks @ Thomas Lamprecht)
> 
applied series, thanks!


_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-11-13 21:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-13 13:32 [pdm-devel] [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Shannon Sterz
2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 1/2] node_info: only use build date from kernel version Shannon Sterz
2025-11-13 13:32 ` [pdm-devel] [PATCH yew-comp v5 2/2] node status panel: make power management and fingerprint buttons opt-in Shannon Sterz
2025-11-13 13:32 ` [pdm-devel] [PATCH datacenter-manager v5 1/1] ui: add a Node Status tab to the administration panel Shannon Sterz
2025-11-13 21:43 ` [pdm-devel] applied-series: [PATCH datacenter-manager/yew-comp v5 0/3] add node status panel to proxmox datacenter manager Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal