public ServerStatistics(int criticalMemoryValue, MemoryAlarmStrategy memoryAlarmStrategy) { _criticalMemoryValue = criticalMemoryValue; _counterProvider = CounterProviderFactory.BuildCounterProvider(memoryAlarmStrategy, StartMemoryWarningCount); _memoryIntervalSamplesLeft = _counterProvider.GetNextCount(); _memorySampleCount = _memoryIntervalSamplesLeft; _memoryOverheadOccured = false; _processMemoryTimer = new Timer(MemorySamplingPeriod); _processMemoryTimer.Elapsed += ProcessMemoryTimerOnElapsed; _processMemoryTimer.Start(); _threadsTimer = new Timer(ThreadsSamplingPeriod); _threadsTimer.Elapsed += ThreadsTimerOnElapsed; _threadsTimer.Start(); _totalCpuCounter = new PerformanceCounter { CategoryName = "Processor", CounterName = "% Processor Time", InstanceName = "_Total", ReadOnly = true }; _totalCpuTimer = new Timer(CpuSamplingPeriod); _totalCpuTimer.Elapsed += TotalCpuTimerOnElapsed; _totalCpuTimer.Start(); }
public static IIntervalCounterProvider BuildCounterProvider(MemoryAlarmStrategy alarmStrategy, long startValue) { IIntervalCounterProvider counterProvider; switch (alarmStrategy) { case MemoryAlarmStrategy.Constant: counterProvider = new ConstantCounterProvider(); break; case MemoryAlarmStrategy.Linear: counterProvider = new LinearCounterProvider(); break; case MemoryAlarmStrategy.Geometric: counterProvider = new GeometricCounterProvider(); break; case MemoryAlarmStrategy.Fibonacci: counterProvider = new FibonacciCounterProvider(); break; default: throw new ArgumentOutOfRangeException(nameof(alarmStrategy), alarmStrategy, null); } counterProvider.StartValue = startValue; return(counterProvider); }