From b8690bf214f2af460dcf1558878aa86246f1e929 Mon Sep 17 00:00:00 2001
From: Brian Read <brianr@koozali.org>
Date: Mon, 3 Mar 2025 15:54:20 +0000
Subject: [PATCH] * Mon Mar 03 2025 Brian Read <brianr@koozali.org>
 11.0.0-7.sme - Enhance UPS Status screen [SME: ]

---
 .../lib/SrvMngr/Controller/Nutups-Custom.pm   | 12 +++++-
 .../templates/partials/_nut_STATUS.html.ep    |  6 ++-
 .../partials/_nut_UPS_STATUS.html.ep          | 39 +++++++++----------
 smeserver-nutUPS.spec                         |  5 ++-
 4 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/root/usr/share/smanager/lib/SrvMngr/Controller/Nutups-Custom.pm b/root/usr/share/smanager/lib/SrvMngr/Controller/Nutups-Custom.pm
index c24b370..9631996 100644
--- a/root/usr/share/smanager/lib/SrvMngr/Controller/Nutups-Custom.pm
+++ b/root/usr/share/smanager/lib/SrvMngr/Controller/Nutups-Custom.pm
@@ -77,7 +77,7 @@ my $cdb = esmith::ConfigDB->open()   || die("Couldn't open config db");
 			#'Data1'=>'Data for STATUS', #Example
 			# fields from Inputs in STATUS $fields['STATUS']
 			'UPSStatus'=>$c->get_ups_status(),
-			
+			'ups_data' => $c->get_ups_status_as_hash()
 		);
 		return %ret;
 	}
@@ -239,6 +239,16 @@ sub get_ups_status {
 	}
 }
 
+sub get_ups_status_as_hash {
+	$c = shift;
+	$string = $c->get_ups_status();
+	my %hash;
+	while ($string =~ /^(.+?):\s*(.+)$/mg) {
+		$hash{$1} = $2;
+	}
+	return \%hash
+}
+
 sub get_status_from_device {
 	my ($c,$device) = @_;
 	my $command = '/usr/bin/upsc';
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_nut_STATUS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_nut_STATUS.html.ep
index 68bc844..5c6f435 100644
--- a/root/usr/share/smanager/themes/default/templates/partials/_nut_STATUS.html.ep
+++ b/root/usr/share/smanager/themes/default/templates/partials/_nut_STATUS.html.ep
@@ -35,13 +35,17 @@
 		<p class='paragraph para1'>
 			%=l('nut_Descriptive_paragraph')
 		</p>
-	
+
+<!--
 		<span class=label>
 			%=l('nut_Status_(from_upsc)')
 		</span><span class=data>
 			% param 'UPSStatus' => $nut_data->{UPSStatus} unless param 'UPSStatus';
 			%= text_area 'UPSStatus', cols=>55, rows=>35, Readonly=>'true'
 		</span><br>
+-->
+		
+		%= include 'partials/_nut_UPS_STATUS'
 	
 		%# Probably finally by a submit.
 	%end    
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_nut_UPS_STATUS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_nut_UPS_STATUS.html.ep
index 7de670f..76b5e53 100644
--- a/root/usr/share/smanager/themes/default/templates/partials/_nut_UPS_STATUS.html.ep
+++ b/root/usr/share/smanager/themes/default/templates/partials/_nut_UPS_STATUS.html.ep
@@ -1,6 +1,3 @@
-% layout 'default';
-% title 'UPS Status';
-
 <h1>UPS Status</h1>
 %= stylesheet '/css/nut_ups-status-page.css'
 <div class="ups-status-page">
@@ -8,42 +5,42 @@
 		<div class="card">
 			<h2>Device Information</h2>
 			<table>
-				<tr><td>Manufacturer:</td><td><%= $ups_data->{'device.mfr'} %></td></tr>
-				<tr><td>Model:</td><td><%= $ups_data->{'device.model'} %></td></tr>
-				<tr><td>Serial:</td><td><%= $ups_data->{'device.serial'} %></td></tr>
-				<tr><td>Type:</td><td><%= $ups_data->{'device.type'} %></td></tr>
+				<tr><td>Manufacturer:</td><td><%= $nut_data->{'ups_data'}->{'device.mfr'} %></td></tr>
+				<tr><td>Model:</td><td><%= $nut_data->{'ups_data'}->{'device.model'} %></td></tr>
+				<tr><td>Serial:</td><td><%= $nut_data->{'ups_data'}->{'device.serial'} %></td></tr>
+				<tr><td>Type:</td><td><%= $nut_data->{'ups_data'}->{'device.type'} %></td></tr>
 			</table>
 		</div>
 		
 		<div class="card">
 			<h2>Battery Status</h2>
 			<table>
-				<tr><td>Charge:</td><td><%= $ups_data->{'battery.charge'} %>%</td></tr>
-				<tr><td>Runtime:</td><td><%= sprintf("%.2f", $ups_data->{'battery.runtime'} / 60) %> minutes</td></tr>
-				<tr><td>Voltage:</td><td><%= $ups_data->{'battery.voltage'} %>V</td></tr>
-				<tr><td>Type:</td><td><%= $ups_data->{'battery.type'} %></td></tr>
+				<tr><td>Charge:</td><td><%= $nut_data->{'ups_data'}->{'battery.charge'} %>%</td></tr>
+				<tr><td>Runtime:</td><td><%= sprintf("%.2f", $nut_data->{'ups_data'}->{'battery.runtime'} / 60) %> minutes</td></tr>
+				<tr><td>Voltage:</td><td><%= $nut_data->{'ups_data'}->{'battery.voltage'} %>V</td></tr>
+				<tr><td>Type:</td><td><%= $nut_data->{'ups_data'}->{'battery.type'} %></td></tr>
 			</table>
 		</div>
 		
 		<div class="card">
 			<h2>Input Power</h2>
 			<table>
-				<tr><td>Voltage:</td><td><%= $ups_data->{'input.voltage'} %>V</td></tr>
-				<tr><td>Nominal Voltage:</td><td><%= $ups_data->{'input.voltage.nominal'} %>V</td></tr>
-				<tr><td>Sensitivity:</td><td><%= $ups_data->{'input.sensitivity'} %></td></tr>
-				<tr><td>Transfer High:</td><td><%= $ups_data->{'input.transfer.high'} %>V</td></tr>
-				<tr><td>Transfer Low:</td><td><%= $ups_data->{'input.transfer.low'} %>V</td></tr>
+				<tr><td>Voltage:</td><td><%= $nut_data->{'ups_data'}->{'input.voltage'} %>V</td></tr>
+				<tr><td>Nominal Voltage:</td><td><%= $nut_data->{'ups_data'}->{'input.voltage.nominal'} %>V</td></tr>
+				<tr><td>Sensitivity:</td><td><%= $nut_data->{'ups_data'}->{'input.sensitivity'} %></td></tr>
+				<tr><td>Transfer High:</td><td><%= $nut_data->{'ups_data'}->{'input.transfer.high'} %>V</td></tr>
+				<tr><td>Transfer Low:</td><td><%= $nut_data->{'ups_data'}->{'input.transfer.low'} %>V</td></tr>
 			</table>
 		</div>
 		
 		<div class="card">
 			<h2>UPS Status</h2>
 			<table>
-				<tr><td>Status:</td><td><%= $ups_data->{'ups.status'} %></td></tr>
-				<tr><td>Load:</td><td><%= $ups_data->{'ups.load'} %>%</td></tr>
-				<tr><td>Beeper:</td><td><%= $ups_data->{'ups.beeper.status'} %></td></tr>
-				<tr><td>Firmware:</td><td><%= $ups_data->{'ups.firmware'} %></td></tr>
-				<tr><td>Test Result:</td><td><%= $ups_data->{'ups.test.result'} %></td></tr>
+				<tr><td>Status:</td><td><%= $nut_data->{'ups_data'}->{'ups.status'} %></td></tr>
+				<tr><td>Load:</td><td><%= $nut_data->{'ups_data'}->{'ups.load'} %>%</td></tr>
+				<tr><td>Beeper:</td><td><%= $nut_data->{'ups_data'}->{'ups.beeper.status'} %></td></tr>
+				<tr><td>Firmware:</td><td><%= $nut_data->{'ups_data'}->{'ups.firmware'} %></td></tr>
+				<tr><td>Test Result:</td><td><%= $nut_data->{'ups_data'}->{'ups.test.result'} %></td></tr>
 			</table>
 		</div>
 	</div>
diff --git a/smeserver-nutUPS.spec b/smeserver-nutUPS.spec
index 0ecab99..740bf9a 100644
--- a/smeserver-nutUPS.spec
+++ b/smeserver-nutUPS.spec
@@ -4,7 +4,7 @@ Summary: SME server - nut UPS interaction module
 %define name smeserver-nutUPS
 Name: %{name}
 %define version 11.0.0
-%define release 6
+%define release 7
 Version: %{version}
 Release: %{release}%{?dist}
 License: GPL
@@ -25,6 +25,9 @@ A module which configures the Network UPS Tools suite for operation with
 the SME server software.
 
 %changelog
+* Mon Mar 03 2025 Brian Read <brianr@koozali.org> 11.0.0-7.sme
+- Enhance UPS Status screen [SME: ]
+
 * Mon Mar 03 2025 Brian Read <brianr@koozali.org> 11.0.0-6.sme
 - Add in SM2 NutUPS configuration and status panel [SME: 12949]