public SystemStatsHelper(ILogger log, ICheckpoint writerCheckpoint) { Ensure.NotNull(log, "log"); Ensure.NotNull(writerCheckpoint, "writerCheckpoint"); _log = log; _writerCheckpoint = writerCheckpoint; _perfCounter = new PerfCounterHelper(_log); }
private void GetPerfCounterInformation(Dictionary<string, object> stats, int count) { if (_giveup) return; var process = Process.GetCurrentProcess(); try { stats["proc-startTime"] = process.StartTime.ToUniversalTime().ToString("O"); stats["proc-id"] = process.Id; stats["proc-mem"] = new StatMetadata(process.WorkingSet64, "Process", "Process Virtual Memory"); stats["proc-cpu"] = new StatMetadata(_perfCounter.GetProcCpuUsage(), "Process", "Process Cpu Usage"); stats["proc-threadsCount"] = _perfCounter.GetProcThreadsCount(); stats["proc-contentionsRate"] = _perfCounter.GetContentionsRateCount(); stats["proc-thrownExceptionsRate"] = _perfCounter.GetThrownExceptionsRate(); stats["sys-cpu"] = _perfCounter.GetTotalCpuUsage(); stats["sys-freeMem"] = GetFreeMem(); } catch (InvalidOperationException) { _log.Info("Received error reading counters. Attempting to rebuild."); _perfCounter = new PerfCounterHelper(_log); _giveup = count > 10; if (_giveup) _log.Error("Maximum rebuild attempts reached. Giving up on rebuilds."); else GetPerfCounterInformation(stats, count + 1); } }