private void monitor(PerfMonLib perfMon) { int interval = 5; // seconds while (!_stopping) { PerfData data = perfMon.GetValues(); DateTime now = DateTime.Now; string timestamp = now.ToString("yyyy-MM-ddTHH:mm:ss") + now.ToString("zzz").Replace(":", ""); string message = "{" + CreateJsonItem("device", Environment.MachineName) + "," + CreateJsonItem("timestamp", timestamp) + "," + CreateJsonItem("cpu", data.ProcessorUtilization) + "," + CreateJsonItem("memory", data.AvailableMemoryMB) + "," + CreateJsonItem("process", data.ActiveProcess) + "," + CreateJsonItem("interval", interval) + "}"; Console.WriteLine(message); string path = Path.Combine(_dataDir, timestamp.Replace("-", "").Replace(":", "") + ".json"); File.WriteAllText(path, message, _encoding); Thread.Sleep(interval * 1000); } }
public PerfData GetValues() { double processorUtilization; double availableMemoryMB; StringBuilder activeProcess = new StringBuilder(512); if (!PdhGetValues(out processorUtilization, out availableMemoryMB, activeProcess, activeProcess.Capacity)) { string error = PdhGetLastError(); throw new Exception(error); } PerfData data = new PerfData(); data.ProcessorUtilization = processorUtilization; data.AvailableMemoryMB = (int)availableMemoryMB; if (activeProcess.ToString().Length > 0) { data.ActiveProcess = Path.GetFileName(activeProcess.ToString()); } return(data); }