public MetricInfo(string context, string metricName, MetricTags tags, TimerMetric timer, PerfCounterGauge perfCounter) { this.Context = context; this.MetricName = metricName; this.Tags = tags; this.Timer = timer; this.PerfCounter = perfCounter; this.Key = TagName(this.Context + this.MetricName, this.Tags); }
private MetricInfo RegisterMetric(PdhCounterPathElement pathElement, IDictionary <String, MetricInfo> existingMetrics) { string contextName = CleanName(pathElement.ObjectName); string metricName = CleanName(pathElement.CounterName); string instanceName = CleanName(pathElement.InstanceName); MetricTags tags = default(MetricTags); if (instanceName != null) { tags = "instance=" + instanceName; } string keyName = MetricInfo.TagName(contextName + metricName, tags); MetricInfo mInfo; if (existingMetrics.TryGetValue(keyName, out mInfo)) { existingMetrics.Remove(keyName); return(mInfo); } PerfCounterGauge pcGauge = new PerfCounterGauge(pathElement.ObjectName, pathElement.CounterName, pathElement.InstanceName); TimerMetric timer = null; PerformanceCounterType type = pcGauge.performanceCounter.CounterType; switch (type) { //these types of counters are not usable case PerformanceCounterType.AverageBase: case PerformanceCounterType.CounterMultiBase: case PerformanceCounterType.RawBase: case PerformanceCounterType.SampleBase: _log.Error(String.Format("Don't know how to handle metric of type {0} for {1}", type.ToString(), metricName)); return(null); //timers case PerformanceCounterType.AverageTimer32: case PerformanceCounterType.ElapsedTime: timer = new TimerMetric(SamplingType.FavourRecent); break; } mInfo = new MetricInfo(contextName, metricName, tags, timer, pcGauge); if (mInfo.Timer != null) { _timers[keyName] = mInfo; } return(mInfo); }