internal MExConfiguration(Datacenter.ExchangeSku exchangeSku, ProcessTransportRole transportProcessRole, string installPath) { this.monitoringOptions = new MonitoringOptions(); this.agentList = new List <AgentInfo>(); this.exchangeSku = exchangeSku; this.transportProcessRole = transportProcessRole; this.installPath = installPath; }
public MExPerfCounters(ProcessTransportRole processRole, AgentRecord[] agentRecords) { this.agentRecords = agentRecords; MExCounters.SetCategoryName(MExPerfCounters.GetPerformanceCounterCategory(processRole)); this.synchronousAgentProcessorUsageSlidingCounters = new SlidingAverageCounter[this.agentRecords.Length]; this.asynchronousAgentProcessorUsageSlidingCounters = new SlidingAverageCounter[this.agentRecords.Length]; for (int i = 0; i < this.agentRecords.Length; i++) { MExCounters.GetInstance(this.agentRecords[i].Name); this.synchronousAgentProcessorUsageSlidingCounters[this.agentRecords[i].SequenceNumber] = new SlidingAverageCounter(MExPerfCounters.slidingWindowLengthForAgentProcessorUsageCounters, MExPerfCounters.bucketLengthForAgentProcessorUsageCounters); this.asynchronousAgentProcessorUsageSlidingCounters[this.agentRecords[i].SequenceNumber] = new SlidingAverageCounter(MExPerfCounters.slidingWindowLengthForAgentProcessorUsageCounters, MExPerfCounters.bucketLengthForAgentProcessorUsageCounters); } }
public static void Initialize(string configFilePath, ProcessTransportRole role, LatencyAgentGroup latencyAgentGroup, string agentGroup) { if (MExEvents.mexRuntime != null) { throw new InvalidOperationException("Cannot Initialize() again without calling Shutdown() first"); } MExEvents.processTransportRole = role; MExEvents.latencyAgentGroup = latencyAgentGroup; MExEvents.agentGroup = agentGroup; MExEvents.mexRuntime = new MExRuntime(); MExEvents.mexRuntime.Initialize(configFilePath, agentGroup, role, ConfigurationContext.Setup.InstallPath, new FactoryInitializer(ProcessAccessManager.RegisterAgentFactory)); AgentLatencyTracker.RegisterMExRuntime(latencyAgentGroup, MExEvents.mexRuntime); }
public void Initialize(string configFile, string agentGroup, ProcessTransportRole processTransportRole, string installPath, FactoryInitializer factoryInitializer = null) { if (this.runtimeState != 0) { ExTraceGlobals.InitializeTracer.TraceError <int>((long)this.GetHashCode(), this.InstanceNameFormatted + "invalid state for initialization: {0}", this.runtimeState); throw new InvalidOperationException(MExRuntimeStrings.InvalidState); } this.config = new MExConfiguration(processTransportRole, installPath); this.config.Load(configFile); this.settings = new RuntimeSettings(this.config, agentGroup, factoryInitializer); this.perfCounters = new MExPerfCounters(processTransportRole, this.settings.CreateDefaultAgentOrder()); Interlocked.CompareExchange(ref this.runtimeState, 1, 0); ExTraceGlobals.InitializeTracer.TraceDebug <string, string>((long)this.GetHashCode(), this.InstanceNameFormatted + "initialized ('{0}', '{1}')", configFile, agentGroup); }
private void EnsureMExConfigLoaded() { if (this.mexConfig != null) { return; } Server serverObject = this.GetServerObject(); if (serverObject == null || (!serverObject.IsEdgeServer && !serverObject.IsHubTransportServer && !serverObject.IsFrontendTransportServer)) { this.ThrowRoleRestrictionError(); } this.SetMExConfigPath(); ProcessTransportRole transportProcessRole = ProcessTransportRole.Hub; if (serverObject.IsEdgeServer) { transportProcessRole = ProcessTransportRole.Edge; } else if (!serverObject.IsHubTransportServer && serverObject.IsFrontendTransportServer) { transportProcessRole = ProcessTransportRole.FrontEnd; } this.mexConfig = new MExConfiguration(transportProcessRole, ConfigurationContext.Setup.InstallPath); try { this.mexConfig.Load(this.mexConfigPath); } catch (ExchangeConfigurationException ex) { if (ex.InnerException is FileNotFoundException) { if (!(this is InstallTransportAgent)) { base.ThrowTerminatingError(ex, ErrorCategory.ReadError, null); } this.missingConfigFile = true; } else { base.ThrowTerminatingError(ex, ErrorCategory.ReadError, null); } } }
private static string GetPerformanceCounterCategory(ProcessTransportRole processRole) { switch (processRole) { case ProcessTransportRole.Hub: case ProcessTransportRole.Edge: return("MSExchangeTransport Extensibility Agents"); case ProcessTransportRole.FrontEnd: return("MSExchangeFrontEndTransport Extensibility Agents"); case ProcessTransportRole.MailboxSubmission: return("MSExchange Submission Extensibility Agents"); case ProcessTransportRole.MailboxDelivery: return("MSExchange Delivery Extensibility Agents"); default: throw new InvalidOperationException(string.Format("Performance counter category not defined for process role {0}", processRole)); } }
internal MExConfiguration(ProcessTransportRole transportProcessRole, string installPath) : this(MExConfiguration.GetExchangeSku(), transportProcessRole, installPath) { }
private string GetXmlMarkups(Datacenter.ExchangeSku exchangeSku, ProcessTransportRole transportProcessRole) { string result = null; switch (exchangeSku) { case Datacenter.ExchangeSku.Enterprise: case Datacenter.ExchangeSku.DatacenterDedicated: switch (transportProcessRole) { case ProcessTransportRole.Hub: result = "enterpriseBridgehead"; break; case ProcessTransportRole.Edge: result = "enterpriseGateway"; break; case ProcessTransportRole.FrontEnd: result = "enterpriseFrontend"; break; case ProcessTransportRole.MailboxSubmission: result = "enterpriseMailboxSubmission"; break; case ProcessTransportRole.MailboxDelivery: result = "enterpriseMailboxDelivery"; break; } break; case Datacenter.ExchangeSku.ExchangeDatacenter: switch (transportProcessRole) { case ProcessTransportRole.Hub: result = "exchangeDatacenterBridgehead"; break; case ProcessTransportRole.FrontEnd: result = "exchangeDatacenterFrontend"; break; case ProcessTransportRole.MailboxSubmission: result = "exchangeDatacenterMailboxSubmission"; break; case ProcessTransportRole.MailboxDelivery: result = "exchangeDatacenterMailboxDelivery"; break; } break; case Datacenter.ExchangeSku.PartnerHosted: switch (transportProcessRole) { case ProcessTransportRole.Hub: result = "partnerHostedBridgehead"; break; case ProcessTransportRole.Edge: result = "partnerHostedGateway"; break; case ProcessTransportRole.MailboxSubmission: result = "partnerHostedMailboxSubmission"; break; case ProcessTransportRole.MailboxDelivery: result = "partnerHostedMailboxDelivery"; break; } break; case Datacenter.ExchangeSku.ForefrontForOfficeDatacenter: switch (transportProcessRole) { case ProcessTransportRole.Hub: result = "forefrontForOfficeBridgehead"; break; case ProcessTransportRole.FrontEnd: result = "forefrontForOfficeFrontend"; break; } break; } return(result); }