public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup/widget-toolkit] Handle optional services and expose more details
@ 2022-12-14  9:42 Christoph Heiss
  2022-12-14  9:42 ` [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state Christoph Heiss
  2022-12-14  9:43 ` [pbs-devel] [PATCH widget-toolkit] node/ServiceView: Show unit-state column in PBS too Christoph Heiss
  0 siblings, 2 replies; 5+ messages in thread
From: Christoph Heiss @ 2022-12-14  9:42 UTC (permalink / raw)
  To: pbs-devel

Add the `unit-state` property for services to the PBS api, much like
it's PVE counterpart. This avoids erroneously marking services as dead
that might be just not installed, e.g. systemd-timesyncd.

On the GUI side, this functionality already exists (from PVE), just the
appropriate cookie name needs to be added.

See also #4406.

proxmox-backup:

Christoph Heiss (1):
      api2/node/services: Handle optional services and expose unit-state

 src/api2/node/services.rs | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

proxmox-widget-toolkit:

Christoph Heiss (1):
      node/ServiceView: Show unit-state column in PBS too

 src/node/ServiceView.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.30.2





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

* [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state
  2022-12-14  9:42 [pbs-devel] [PATCH proxmox-backup/widget-toolkit] Handle optional services and expose more details Christoph Heiss
@ 2022-12-14  9:42 ` Christoph Heiss
  2022-12-15  9:29   ` Wolfgang Bumiller
  2022-12-14  9:43 ` [pbs-devel] [PATCH widget-toolkit] node/ServiceView: Show unit-state column in PBS too Christoph Heiss
  1 sibling, 1 reply; 5+ messages in thread
From: Christoph Heiss @ 2022-12-14  9:42 UTC (permalink / raw)
  To: pbs-devel

.. in the same way the PVE api does, esp. regarding the logic to handle
oneshot and missing services.

This then allows re-using the GUI parts from there as well, so that the
services page in PVE and PBS looks the same.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 src/api2/node/services.rs | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/api2/node/services.rs b/src/api2/node/services.rs
index 0cc1857e..534c41e8 100644
--- a/src/api2/node/services.rs
+++ b/src/api2/node/services.rs
@@ -76,12 +76,27 @@ fn get_full_service_state(service: &str) -> Result<Value, Error> {
 fn json_service_state(service: &str, status: Value) -> Value {
     if let Some(desc) = status["Description"].as_str() {
         let name = status["Name"].as_str().unwrap_or(service);
-        let state = status["SubState"].as_str().unwrap_or("unknown");
+
+        let state = if status["Type"] == "oneshot" && status["SubState"] == "dead" {
+            &status["Result"]
+        } else {
+            &status["SubState"]
+        }
+        .as_str()
+        .unwrap_or("unknown");
+
+        let unit_state = if status["LoadState"] == "not-found" {
+            "not-found"
+        } else {
+            status["UnitFileState"].as_str().unwrap_or("unknown")
+        };
+
         return json!({
             "service": service,
             "name": name,
             "desc": desc,
             "state": state,
+            "unit-state": unit_state,
         });
     }
 
@@ -117,6 +132,10 @@ fn json_service_state(service: &str, status: Value) -> Value {
                     type: String,
                     description: "systemd service 'SubState'.",
                 },
+                "unit-state": {
+                    type: String,
+                    description: "systemd service unit state.",
+                },
             },
         },
     },
-- 
2.30.2





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

* [pbs-devel] [PATCH widget-toolkit] node/ServiceView: Show unit-state column in PBS too
  2022-12-14  9:42 [pbs-devel] [PATCH proxmox-backup/widget-toolkit] Handle optional services and expose more details Christoph Heiss
  2022-12-14  9:42 ` [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state Christoph Heiss
@ 2022-12-14  9:43 ` Christoph Heiss
  1 sibling, 0 replies; 5+ messages in thread
From: Christoph Heiss @ 2022-12-14  9:43 UTC (permalink / raw)
  To: pbs-devel

The PBS api now reports `unit-state` for services as well, thus enable
the column for it.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 src/node/ServiceView.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/node/ServiceView.js b/src/node/ServiceView.js
index 75a5c28..19cfc18 100644
--- a/src/node/ServiceView.js
+++ b/src/node/ServiceView.js
@@ -201,7 +201,7 @@ Ext.define('Proxmox.node.ServiceView', {
 		    header: gettext('Unit'),
 		    width: 120,
 		    sortable: true,
-		    hidden: Proxmox?.Setup?.auth_cookie_name !== 'PVEAuthCookie', // FIXME currently only PVE supports it
+		    hidden: !Ext.Array.contains(['PVEAuthCookie', 'PBSAuthCookie'], Proxmox?.Setup?.auth_cookie_name),
 		    dataIndex: 'unit-state',
 		},
 		{
-- 
2.30.2





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

* Re: [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state
  2022-12-14  9:42 ` [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state Christoph Heiss
@ 2022-12-15  9:29   ` Wolfgang Bumiller
  2022-12-15 10:30     ` Christoph Heiss
  0 siblings, 1 reply; 5+ messages in thread
From: Wolfgang Bumiller @ 2022-12-15  9:29 UTC (permalink / raw)
  To: Christoph Heiss; +Cc: pbs-devel

On Wed, Dec 14, 2022 at 10:42:59AM +0100, Christoph Heiss wrote:
> .. in the same way the PVE api does, esp. regarding the logic to handle
> oneshot and missing services.
> 
> This then allows re-using the GUI parts from there as well, so that the
> services page in PVE and PBS looks the same.
> 
> Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
> ---
>  src/api2/node/services.rs | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/src/api2/node/services.rs b/src/api2/node/services.rs
> index 0cc1857e..534c41e8 100644
> --- a/src/api2/node/services.rs
> +++ b/src/api2/node/services.rs
> @@ -76,12 +76,27 @@ fn get_full_service_state(service: &str) -> Result<Value, Error> {
>  fn json_service_state(service: &str, status: Value) -> Value {
>      if let Some(desc) = status["Description"].as_str() {
>          let name = status["Name"].as_str().unwrap_or(service);
> -        let state = status["SubState"].as_str().unwrap_or("unknown");
> +
> +        let state = if status["Type"] == "oneshot" && status["SubState"] == "dead" {
> +            &status["Result"]

Reading the perl equivalent, if we end up here but `Result` does not
exist we'd see 'dead' in perl as it falls back to SubState (which at
this point is known to be 'dead'), while we'd show 'unknown' in this
case from the 'unwrap_or' below.
Not sure if this can happen though?

> +        } else {
> +            &status["SubState"]
> +        }
> +        .as_str()
> +        .unwrap_or("unknown");

> +
> +        let unit_state = if status["LoadState"] == "not-found" {
> +            "not-found"
> +        } else {
> +            status["UnitFileState"].as_str().unwrap_or("unknown")
> +        };
> +
>          return json!({
>              "service": service,
>              "name": name,
>              "desc": desc,
>              "state": state,
> +            "unit-state": unit_state,
>          });
>      }
>  
> @@ -117,6 +132,10 @@ fn json_service_state(service: &str, status: Value) -> Value {
>                      type: String,
>                      description: "systemd service 'SubState'.",
>                  },
> +                "unit-state": {
> +                    type: String,
> +                    description: "systemd service unit state.",
> +                },
>              },
>          },
>      },
> -- 
> 2.30.2




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

* Re: [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state
  2022-12-15  9:29   ` Wolfgang Bumiller
@ 2022-12-15 10:30     ` Christoph Heiss
  0 siblings, 0 replies; 5+ messages in thread
From: Christoph Heiss @ 2022-12-15 10:30 UTC (permalink / raw)
  To: Wolfgang Bumiller; +Cc: pbs-devel


On 12/15/22 10:29, Wolfgang Bumiller wrote:
> On Wed, Dec 14, 2022 at 10:42:59AM +0100, Christoph Heiss wrote:
>> .. in the same way the PVE api does, esp. regarding the logic to handle
>> oneshot and missing services.
>>
>> This then allows re-using the GUI parts from there as well, so that the
>> services page in PVE and PBS looks the same.
>>
>> Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
>> ---
>>   src/api2/node/services.rs | 21 ++++++++++++++++++++-
>>   1 file changed, 20 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/api2/node/services.rs b/src/api2/node/services.rs
>> index 0cc1857e..534c41e8 100644
>> --- a/src/api2/node/services.rs
>> +++ b/src/api2/node/services.rs
>> @@ -76,12 +76,27 @@ fn get_full_service_state(service: &str) -> Result<Value, Error> {
>>   fn json_service_state(service: &str, status: Value) -> Value {
>>       if let Some(desc) = status["Description"].as_str() {
>>           let name = status["Name"].as_str().unwrap_or(service);
>> -         let state = status["SubState"].as_str().unwrap_or("unknown");
>> +
>> +         let state = if status["Type"] == "oneshot" && status["SubState"] == "dead" {
>> +             &status["Result"]
> 
> Reading the perl equivalent, if we end up here but `Result` does not
> exist we'd see 'dead' in perl as it falls back to SubState (which at
> this point is known to be 'dead'), while we'd show 'unknown' in this
> case from the 'unwrap_or' below.
> Not sure if this can happen though?

Not sure either, but if it is a finished one-shot service, systemd
*should* always provide a result. That's IMHO a very reasonable
assumption and was my thought while working on it too.

Playing a bit with `systemctl show` and looking at some services, it
really seems that the Result property is always present, even for e.g.
non-existing services.

But if you want, I can send a v2 and add the fallback to SubState here
as well, to align it with the Perl equivalent.

>> [..]
>> -- 
>> 2.30.2




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

end of thread, other threads:[~2022-12-15 10:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-14  9:42 [pbs-devel] [PATCH proxmox-backup/widget-toolkit] Handle optional services and expose more details Christoph Heiss
2022-12-14  9:42 ` [pbs-devel] [PATCH proxmox-backup] api2/node/services: Handle optional services and expose unit-state Christoph Heiss
2022-12-15  9:29   ` Wolfgang Bumiller
2022-12-15 10:30     ` Christoph Heiss
2022-12-14  9:43 ` [pbs-devel] [PATCH widget-toolkit] node/ServiceView: Show unit-state column in PBS too Christoph Heiss

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