From b25ccd0d8f59942ed5485a85308f81f774971d64 Mon Sep 17 00:00:00 2001 From: Hublack <71221641+HublackBE@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:54:22 +0100 Subject: [PATCH 1/4] Update Memory proto fields to uint64 and refactor usage Changed Memory message fields in resources.proto from string to uint64 for total and free. Updated srvOverview.xaml.cs to use ulong and double types for memory calculations, improving type safety and performance by eliminating string parsing. --- .../Protos/Resources/V2/resources.proto | 4 ++-- .../srvMgnt/Views/srvOverview.xaml.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/paradigm-ehb.CommandCenter.Core/Protos/Resources/V2/resources.proto b/src/paradigm-ehb.CommandCenter.Core/Protos/Resources/V2/resources.proto index 8508ae9..5b76427 100644 --- a/src/paradigm-ehb.CommandCenter.Core/Protos/Resources/V2/resources.proto +++ b/src/paradigm-ehb.CommandCenter.Core/Protos/Resources/V2/resources.proto @@ -49,8 +49,8 @@ message Cpu { * @return total memory on system, available memory on system * */ message Memory { - string total = 1; - string free = 2; + uint64 total = 1; + uint64 free = 2; } /** diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs index b33291d..a5e0c56 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs @@ -50,9 +50,9 @@ private async void updatePage() Processes.Text = string.Format("{0} running", data.Resources.Processes.Count()); - var totalRamGB = Math.Floor(float.Parse(data.Resources.Memory.Total) / 1024 / 1024); - var usedRam = float.Parse(data.Resources.Memory.Total) - float.Parse(data.Resources.Memory.Free); - var usedRamPercentage = (usedRam / float.Parse(data.Resources.Memory.Total)) * 100; + var totalRamGB = Math.Floor((decimal)data.Resources.Memory.Total / 1024 / 1024); + ulong usedRam = data.Resources.Memory.Total - data.Resources.Memory.Free; + double usedRamPercentage = ((double)usedRam / (double)data.Resources.Memory.Total) * 100; RamUsageBar.Progress = usedRamPercentage; RamUsagePercent.Text = string.Format("{0:F2}%", usedRamPercentage); From d88d726a1bc96a4dbe74d72d0670919f547b1c86 Mon Sep 17 00:00:00 2001 From: Hublack <71221641+HublackBE@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:03:40 +0100 Subject: [PATCH 2/4] Update process state colors and add CPU usage display - Changed process state color mapping for Running and Sleeping states to use success-themed brushes. - Re-enabled and improved CPU usage display in srvOverview, including a percentage label and progress bar. - Added logic to calculate and display CPU usage based on total and idle times. --- .../srvMgnt/Views/ProcessesPage.xaml.cs | 4 ++-- .../srvMgnt/Views/srvOverview.xaml | 6 +++--- .../srvMgnt/Views/srvOverview.xaml.cs | 8 ++++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs index 90c43b4..ed5beae 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs @@ -559,8 +559,8 @@ await DispatcherQueue.EnqueueAsync(() => SolidColorBrush brush = process.State switch { ProcessState.Unspecified => (SolidColorBrush)Application.Current.Resources["SystemFillColorNeutralBrush"], - ProcessState.Running => (SolidColorBrush)Application.Current.Resources["SystemFillColorAttentionBrush"], - ProcessState.Sleeping => (SolidColorBrush)Application.Current.Resources["SystemFillColorCautionBrush"], + ProcessState.Running => (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBrush"], + ProcessState.Sleeping => (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBackgroundBrush"], ProcessState.Stopped => (SolidColorBrush)Application.Current.Resources["SystemFillColorCriticalBrush"], _ => (SolidColorBrush)Application.Current.Resources["SystemFillColorCriticalBackgroundBrush"], }; diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml index fa4de9e..a278bb1 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml @@ -34,7 +34,7 @@ - + diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs index a5e0c56..ca62918 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/srvOverview.xaml.cs @@ -50,6 +50,14 @@ private async void updatePage() Processes.Text = string.Format("{0} running", data.Resources.Processes.Count()); + ulong cpuTotalTime = data.Resources.Cpu.TotalTime; + ulong cpuIdleTime = data.Resources.Cpu.IdleTime; + + double cpuUsagePercentage = ((double)(cpuTotalTime - cpuIdleTime) / (double)cpuTotalTime) * 100; + + CpuUsageBar.Progress = cpuUsagePercentage; + CpuUsagePercent.Text = string.Format("{0:F2}%", cpuUsagePercentage); + var totalRamGB = Math.Floor((decimal)data.Resources.Memory.Total / 1024 / 1024); ulong usedRam = data.Resources.Memory.Total - data.Resources.Memory.Free; double usedRamPercentage = ((double)usedRam / (double)data.Resources.Memory.Total) * 100; From aea12efa1d5ad54da5039d2f88520bc45fced503 Mon Sep 17 00:00:00 2001 From: Hublack <71221641+HublackBE@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:07:27 +0100 Subject: [PATCH 3/4] Refactor process ordering and update state colors Renamed Order_services() to Order_processes() for clarity and updated all references. Improved RefreshButton_Click to re-apply filtering and ordering after refresh. Adjusted process state color assignments for better visual distinction. --- .../srvMgnt/Views/ProcessesPage.xaml.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs index ed5beae..2d4cab2 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ProcessesPage.xaml.cs @@ -117,7 +117,7 @@ private void OnFilterChanged(object sender, RoutedEventArgs args) IEnumerable filtered = allProcesses.Where(process => Filter(process)); Remove_NonMatching(filtered); AddBack_Processes(filtered); - Order_services(); + Order_processes(); } private bool Filter(ProcessInfo process) @@ -155,6 +155,10 @@ private async void RefreshButton_Click(object sender, RoutedEventArgs e) await ClearAllProcesses(); // Refresh is user-initiated; use non-cancellable token await LoadAllProcesses(CancellationToken.None); + IEnumerable filtered = allProcesses.Where(process => Filter(process)); + Remove_NonMatching(filtered); + AddBack_Processes(filtered); + Order_processes(); } private async void ProcessTerminate_Click(object sender, RoutedEventArgs e) @@ -559,8 +563,8 @@ await DispatcherQueue.EnqueueAsync(() => SolidColorBrush brush = process.State switch { ProcessState.Unspecified => (SolidColorBrush)Application.Current.Resources["SystemFillColorNeutralBrush"], - ProcessState.Running => (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBrush"], - ProcessState.Sleeping => (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBackgroundBrush"], + ProcessState.Running => (SolidColorBrush)Application.Current.Resources["SystemFillColorAttentionBrush"], + ProcessState.Sleeping => (SolidColorBrush)Application.Current.Resources["SystemFillColorSuccessBrush"], ProcessState.Stopped => (SolidColorBrush)Application.Current.Resources["SystemFillColorCriticalBrush"], _ => (SolidColorBrush)Application.Current.Resources["SystemFillColorCriticalBackgroundBrush"], }; @@ -579,16 +583,16 @@ await DispatcherQueue.EnqueueAsync(() => } await DispatcherQueue.EnqueueAsync(() => { - Order_services(); + Order_processes(); }); } public void OnOrderChanged(object sender, SelectionChangedEventArgs args) { - Order_services(); + Order_processes(); } - private void Order_services() + private void Order_processes() { string order = OrderByCombo?.SelectedValue as string ?? "State"; From cdcda18c3d69940071b8534388f6703386fffbe3 Mon Sep 17 00:00:00 2001 From: Hublack <71221641+HublackBE@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:09:05 +0100 Subject: [PATCH 4/4] Update service refresh to filter and order results Refined the RefreshButton_Click handler to filter loaded services, remove non-matching entries, re-add filtered services, and order the list before disabling the loading indicator. This improves the accuracy and presentation of the displayed services. --- .../srvMgnt/Views/ServicesPage.xaml.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ServicesPage.xaml.cs b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ServicesPage.xaml.cs index c68ca42..c7e8d66 100644 --- a/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ServicesPage.xaml.cs +++ b/src/paradigm-ehb.CommandCenter.WinUI/srvMgnt/Views/ServicesPage.xaml.cs @@ -86,6 +86,10 @@ private async void RefreshButton_Click(object sender, RoutedEventArgs e) await ClearAllServices(); await DispatcherQueue.EnqueueAsync(() => LoadingProgressRing.IsActive = true); await LoadAllServices(); + IEnumerable filtered = allServices.Where(service => Filter(service)); + Remove_NonMatching(filtered); + AddBack_Services(filtered); + Order_Services(); await DispatcherQueue.EnqueueAsync(() => LoadingProgressRing.IsActive = false); }