public static ResourceLoadPerfCounterWrapper Get(ResourceKey resource, WorkloadClassification classification) { ResourceLoadPerfCounterWrapper resourceLoadPerfCounterWrapper = null; Tuple <ResourceKey, WorkloadClassification> key = new Tuple <ResourceKey, WorkloadClassification>(resource, classification); lock (ResourceLoadPerfCounterWrapper.staticLock) { if (ResourceLoadPerfCounterWrapper.instances.TryGetValue(key, out resourceLoadPerfCounterWrapper)) { resourceLoadPerfCounterWrapper.lastUpdateUtc = DateTime.UtcNow; } } if (resourceLoadPerfCounterWrapper == null) { if (ResourceHealthMonitorManager.Active) { string text = string.Concat(new object[] { ResourceLoadPerfCounterWrapper.GetDefaultInstanceName(), "_", resource, "_", classification }); try { MSExchangeResourceLoadInstance instance = MSExchangeResourceLoad.GetInstance(text); resourceLoadPerfCounterWrapper = new ResourceLoadPerfCounterWrapper(instance); } catch (Exception ex) { Globals.LogEvent(DirectoryEventLogConstants.Tuple_InitializeResourceHealthPerformanceCountersFailed, string.Empty, new object[] { ResourceLoadPerfCounterWrapper.GetDefaultInstanceName(), ex.ToString() }); ExTraceGlobals.ClientThrottlingTracer.TraceError <string, string, string>(0L, "[ResourceLoadPerfCounterWrapper::Get] Perf counter initialization failed for key instance: {0} with exception type: {1}, Messsage: {2}", text, ex.GetType().FullName, ex.Message); } } if (resourceLoadPerfCounterWrapper == null) { resourceLoadPerfCounterWrapper = new ResourceLoadPerfCounterWrapper(null); } lock (ResourceLoadPerfCounterWrapper.staticLock) { ResourceLoadPerfCounterWrapper resourceLoadPerfCounterWrapper2; if (!ResourceLoadPerfCounterWrapper.instances.TryGetValue(key, out resourceLoadPerfCounterWrapper2)) { ResourceLoadPerfCounterWrapper.instances.Add(key, resourceLoadPerfCounterWrapper); } else { resourceLoadPerfCounterWrapper = resourceLoadPerfCounterWrapper2; } } } return(resourceLoadPerfCounterWrapper); }
private ResourceLoadPerfCounterWrapper(MSExchangeResourceLoadInstance instance) { this.perfCounters = instance; this.perfCounterResourceMetric = this.CreateSetCounter((this.perfCounters == null) ? null : this.perfCounters.ResourceMetric); this.perfCounterResourceLoad = this.CreateSetCounter((this.perfCounters == null) ? null : this.perfCounters.ResourceLoad); }