From 3b05d4707234e3eb8896db64528bb2ed25a62ace Mon Sep 17 00:00:00 2001
From: Niko Ehrenfeuchter <nikolaus.ehrenfeuchter@unibas.ch>
Date: Sun, 11 Mar 2018 14:36:35 +0100
Subject: [PATCH] Improve code readability and measure WMI query execution
 time.

---
 ATxCommon/SystemChecks.cs | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/ATxCommon/SystemChecks.cs b/ATxCommon/SystemChecks.cs
index bcf9349..591c83d 100644
--- a/ATxCommon/SystemChecks.cs
+++ b/ATxCommon/SystemChecks.cs
@@ -40,34 +40,39 @@ namespace ATxCommon
             // TODO: fix bug #36
             try {
                 Log.Trace("Querying WMI for CPU load...");
-                var searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
+                var watch = Stopwatch.StartNew();
+                var queryString = "SELECT Name, PercentProcessorTime " +
+                            "FROM Win32_PerfFormattedData_PerfOS_Processor";
                 var opts = new EnumerationOptions {
                     Timeout = new TimeSpan(0, 0, 10),
                     ReturnImmediately = false,
                 };
-                searcher.Options = opts;
+                var searcher = new ManagementObjectSearcher("", queryString, opts);
                 Int32 usageInt32 = -1;
 
-                /*
+                
                 var managementObjects = searcher.Get();
-                Log.Trace("WMI query returned {0} objects.", managementObjects.Count);
+                if (managementObjects.Count == 0) {
+                    Log.Error("No objects returned from WMI!");
+                    watch.Stop();
+                    Log.Debug("WMI query took {0} ms.", watch.ElapsedMilliseconds);
+                    return -1;
+                }
+                Log.Debug("WMI query returned {0} objects.", managementObjects.Count);
                 foreach (var mo in managementObjects) {
                     var obj = (ManagementObject)mo;
                     var usage = obj["PercentProcessorTime"];
                     var name = obj["Name"];
                     
                     usageInt32 = Convert.ToInt32(usage);
-                    Log.Trace("CPU usage {1}: {0}", usageInt32, name);
-
-                    if (name.ToString().Equals("_Total")) {
-                        usageInt32 = Convert.ToInt32(usage);
-                        Log.Trace("CPU usage: {0}", usageInt32);
-                    }
-
+                    Log.Debug("CPU usage {1}: {0}", usageInt32, name);
                 }
+                watch.Stop();
+                Log.Debug("WMI query took {0} ms.", watch.ElapsedMilliseconds);
                 return usageInt32;
-                */
+                
 
+                /*
                 var cpuTimes = searcher.Get()
                     .Cast<ManagementObject>()
                     .Select(mo => new {
@@ -87,7 +92,7 @@ namespace ATxCommon
                 usageInt32 = Convert.ToInt32(cpuUsage);
                 Log.Trace("CPU usage: {0}", usageInt32);
                 return usageInt32;
-                // */
+                */
             }
             catch (Exception ex) {
                 Log.Trace("Error in GetCpuUsage: {0}", ex.Message);
-- 
GitLab