diff --git a/ATxDiagnostics/ATxDiagnostics.cs b/ATxDiagnostics/ATxDiagnostics.cs index 86467849d6a8506dbf4ac13f18871cda339d56aa..c56ec2f007348bf1249c55ad5399997fb9962efa 100644 --- a/ATxDiagnostics/ATxDiagnostics.cs +++ b/ATxDiagnostics/ATxDiagnostics.cs @@ -1,6 +1,5 @@ -using System; -using System.Diagnostics; -using System.Management; +using System.Diagnostics; +using System.Linq; using System.Reflection; using ATxCommon; using ATxCommon.Monitoring; @@ -30,67 +29,43 @@ namespace ATxDiagnostics logConfig.LoggingRules.Add(logRuleConsole); LogManager.Configuration = logConfig; - var commonAssembly = Assembly.GetAssembly(typeof(ATxCommon.Monitoring.Cpu)); + // set the default performance monitors: + var perfMonitors = new[] {"CPU", "PhysicalDisk"}; + // if requested explicitly as a command line parameter, override them: + if (args.Length > 1) + perfMonitors = args[1].Split(','); + + var commonAssembly = Assembly.GetAssembly(typeof(Cpu)); var commonVersionInfo = FileVersionInfo.GetVersionInfo(commonAssembly.Location); Log.Info("ATxCommon library version: {0}", commonVersionInfo.ProductVersion); Log.Debug("Free space on drive [C:]: " + Conv.BytesToString(SystemChecks.GetFreeDriveSpace("C:"))); - - Log.Info("Checking CPU load using ATxCommon.Monitoring..."); - var cpu = new Cpu { - Interval = 250, - Limit = 25, - Probation = 4, // 4 * 250 ms = 1 second - Enabled = true - }; - System.Threading.Thread.Sleep(10000); - cpu.Enabled = false; - Log.Info("Finished checking CPU load using ATxCommon.Monitoring.\n"); - Log.Info("Checking CPU load using WMI..."); - for (int i = 0; i < 10; i++) { - WmiQueryCpuLoad(); - System.Threading.Thread.Sleep(1000); + if (perfMonitors.Contains("CPU")) { + Log.Info("Watching CPU load using ATxCommon.Monitoring..."); + var cpu = new Cpu { + Interval = 250, + Limit = 50, + Probation = 4, // 4 * 250 ms = 1 second + LogPerformanceReadings = LogLevel.Info, + Enabled = true + }; } - Log.Info("Finished checking CPU load using WMI.\n"); - } - - private static int WmiQueryCpuLoad() { - Log.Trace("Querying WMI for CPU load..."); - 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, - }; - var searcher = new ManagementObjectSearcher("", queryString, opts); - Int32 usageInt32 = -1; - - var managementObjects = searcher.Get(); - if (managementObjects.Count > 0) { - 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.Debug("CPU usage {1}: {0}", usageInt32, name); - - } - } else { - Log.Error("No objects returned from WMI!"); + if (perfMonitors.Contains("PhysicalDisk")) { + Log.Info("Watching I/O load using ATxCommon.Monitoring..."); + var disk = new PhysicalDisk { + Interval = 250, + Limit = 0.25F, + Probation = 4, // 4 * 250 ms = 1 second + LogPerformanceReadings = LogLevel.Info, + Enabled = true + }; } - managementObjects.Dispose(); - searcher.Dispose(); - - watch.Stop(); - Log.Trace("WMI query took {0} ms.", watch.ElapsedMilliseconds); - - return usageInt32; + while (true) { + System.Threading.Thread.Sleep(10000); + } } - } }