Example #1
0
        internal static void RegisterDiagnosticsComponents()
        {
            ExchangeDiagnosticsSection config = ExchangeDiagnosticsSection.GetConfig();

            ExTraceGlobals.CommonTracer.TraceInformation <int>(0, 0L, "ExchangeDiagnosticsHelper::RegisterDiagnosticsComponents called. No of Component:{0}", config.DiagnosticComponents.Count);
            foreach (object obj in config.DiagnosticComponents)
            {
                DiagnosticsComponent diagnosticsComponent = (DiagnosticsComponent)obj;
                ExTraceGlobals.CommonTracer.TraceDebug(0L, "ExchangeDiagnosticsHelper::RegisterDiagnosticsComponents ComponentName:{0}, Type:{1}, MethodName:{2}, Argument:{3}", new object[]
                {
                    diagnosticsComponent.Name,
                    diagnosticsComponent.Implementation,
                    diagnosticsComponent.MethodName,
                    diagnosticsComponent.Argument
                });
                IDiagnosable instance = ExchangeDiagnosticsHelper.GetInstance(diagnosticsComponent);
                if (diagnosticsComponent.Data != null)
                {
                    IDiagnosableExtraData diagnosableExtraData = instance as IDiagnosableExtraData;
                    if (diagnosableExtraData != null)
                    {
                        diagnosableExtraData.SetData(diagnosticsComponent.Data);
                    }
                }
                ExchangeDiagnosticsHelper.RegisterDiagnosticsComponents(instance);
            }
        }
Example #2
0
        public static void UnregisterComponent(IDiagnosable diagnosable)
        {
            if (diagnosable == null)
            {
                throw new ArgumentNullException("diagnosable");
            }
            string diagnosticComponentName = diagnosable.GetDiagnosticComponentName();

            if (string.IsNullOrEmpty(diagnosticComponentName))
            {
                throw new ArgumentNullException("diagnosable.GetDiagnosticComponentName()");
            }
            lock (ProcessAccessManager.RpcServerLockObject)
            {
                ProcessAccessManager.diagnosableComponents.Remove(diagnosticComponentName);
                if (ProcessAccessManager.diagnosableComponents.Count == 0 && ProcessAccessManager.RpcServer != null)
                {
                    RpcServerBase.StopServer(ProcessAccessRpcServer.RpcIntfHandle);
                    ProcessAccessManager.RpcServer = null;
                }
            }
            IDiagnosableExtraData diagnosableExtraData = diagnosable as IDiagnosableExtraData;

            if (diagnosableExtraData != null)
            {
                diagnosableExtraData.OnStop();
            }
        }