From 2eef712025361b94c05803103f034de241c86571 Mon Sep 17 00:00:00 2001
From: Niko Ehrenfeuchter <nikolaus.ehrenfeuchter@unibas.ch>
Date: Fri, 9 Mar 2018 22:23:30 +0100
Subject: [PATCH] Add a local WMI query method to ATxDiagnostics.

---
 ATxDiagnostics/ATxDiagnostics.cs     | 49 +++++++++++++++++++++++++++-
 ATxDiagnostics/ATxDiagnostics.csproj |  1 +
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/ATxDiagnostics/ATxDiagnostics.cs b/ATxDiagnostics/ATxDiagnostics.cs
index 7f1c725..0d10ae8 100644
--- a/ATxDiagnostics/ATxDiagnostics.cs
+++ b/ATxDiagnostics/ATxDiagnostics.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Management;
 using ATxCommon;
 using NLog;
 using NLog.Config;
@@ -15,13 +16,59 @@ namespace ATxDiagnostics
             var logTargetConsole = new ConsoleTarget {
                 Name = "console",
                 Header = "test-header",
+                Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} [${level}] (${logger}) ${message}",
             };
             logConfig.AddTarget(logTargetConsole);
             var logRuleConsole = new LoggingRule("*", LogLevel.Trace, logTargetConsole);
             logConfig.LoggingRules.Add(logRuleConsole);
             LogManager.Configuration = logConfig;
 
-            Console.WriteLine(SystemChecks.WmiSummary());
+            Log.Debug(Conv.BytesToString(SystemChecks.GetFreeDriveSpace("C:")));
+            /*
+            Log.Debug(SystemChecks.GetCpuUsage());
+            Log.Debug(SystemChecks.GetCpuUsage());
+            Log.Debug(SystemChecks.GetCpuUsage());
+            Log.Debug(SystemChecks.GetCpuUsage());
+            Log.Debug(SystemChecks.GetCpuUsage());
+            Log.Debug(SystemChecks.GetCpuUsage());
+            */
+            Log.Debug(QueryCpuLoad());
+        }
+
+        private static int QueryCpuLoad() {
+            Log.Trace("Querying WMI for CPU load...");
+            var searcher = new ManagementObjectSearcher(
+                "root\\CIMV2",
+                "select Name, PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor",
+                new EnumerationOptions {
+                    Timeout = new TimeSpan(0, 0, 10),
+                    ReturnImmediately = false,
+                }
+                );
+            Int32 usageInt32 = -1;
+
+
+            var managementObjects = searcher.Get();
+            Log.Trace("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);
+                //}
+
+            }
+
+            managementObjects.Dispose();
+            searcher.Dispose();
+
+            return usageInt32;
         }
     }
 }
diff --git a/ATxDiagnostics/ATxDiagnostics.csproj b/ATxDiagnostics/ATxDiagnostics.csproj
index d234b10..f38bdad 100644
--- a/ATxDiagnostics/ATxDiagnostics.csproj
+++ b/ATxDiagnostics/ATxDiagnostics.csproj
@@ -44,6 +44,7 @@
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
-- 
GitLab