void RegisterCommonModule( ContainerBuilder builder, bool optimizeForPerformance, StoreAndForward storeAndForward, MetricsConfig metricsConfig, bool nestedEdgeEnabled) { bool cacheTokens = this.configuration.GetValue("CacheTokens", false); Option <string> workloadUri = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.WorkloadUri); Option <string> workloadApiVersion = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.WorkloadAPiVersion); Option <string> moduleGenerationId = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.ModuleGenerationId); bool hasParentEdge = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.GatewayHostname).HasValue; if (!Enum.TryParse(this.configuration.GetValue("AuthenticationMode", string.Empty), true, out AuthenticationMode authenticationMode)) { authenticationMode = AuthenticationMode.Scope; } int scopeCacheRefreshRateSecs = this.configuration.GetValue("DeviceScopeCacheRefreshRateSecs", 3600); TimeSpan scopeCacheRefreshRate = TimeSpan.FromSeconds(scopeCacheRefreshRateSecs); int scopeCacheRefreshDelaySecs = this.configuration.GetValue("DeviceScopeCacheRefreshDelaySecs", 120); TimeSpan scopeCacheRefreshDelay = TimeSpan.FromSeconds(scopeCacheRefreshDelaySecs); string proxy = this.configuration.GetValue("https_proxy", string.Empty); string productInfo = GetProductInfo(); // Register modules builder.RegisterModule( new CommonModule( productInfo, this.iotHubHostname, this.gatewayHostname, this.edgeDeviceId, this.edgeModuleId, this.edgeDeviceHostName, moduleGenerationId, authenticationMode, this.connectionString, optimizeForPerformance, storeAndForward.UsePersistentStorage, storeAndForward.StoragePath, workloadUri, workloadApiVersion, scopeCacheRefreshRate, scopeCacheRefreshDelay, cacheTokens, this.trustBundle, proxy, metricsConfig, storeAndForward.UseBackupAndRestore, storeAndForward.StorageBackupPath, storeAndForward.StorageMaxTotalWalSize, storeAndForward.StorageMaxOpenFiles, storeAndForward.StorageLogLevel, nestedEdgeEnabled)); }
public void Register(ContainerBuilder builder) { builder.RegisterModule(new LoggingModule()); builder.RegisterBuildCallback( c => { // set up loggers for Dotnetty var loggerFactory = c.Resolve <ILoggerFactory>(); InternalLoggerFactory.DefaultFactory = loggerFactory; var eventListener = new LoggerEventListener(loggerFactory.CreateLogger("EdgeHub")); eventListener.EnableEvents(CommonEventSource.Log, EventLevel.Informational); }); bool optimizeForPerformance = this.configuration.GetValue("OptimizeForPerformance", true); StoreAndForward storeAndForward = this.GetStoreAndForwardConfiguration(); IConfiguration experimentalFeaturesConfig = this.configuration.GetSection(Constants.ConfigKey.ExperimentalFeatures); ExperimentalFeatures experimentalFeatures = ExperimentalFeatures.Create(experimentalFeaturesConfig, Logger.Factory.CreateLogger("EdgeHub")); MetricsConfig metricsConfig = new MetricsConfig(this.configuration.GetSection("metrics:listener")); bool nestedEdgeEnabled = this.configuration.GetValue <bool>(Constants.ConfigKey.NestedEdgeEnabled, true); if (!Enum.TryParse(this.configuration.GetValue("AuthenticationMode", string.Empty), true, out AuthenticationMode authenticationMode)) { authenticationMode = AuthenticationMode.Scope; } bool trackDeviceState = authenticationMode == AuthenticationMode.Scope && this.configuration.GetValue("TrackDeviceState", true); string proxyModuleId = this.configuration.GetValue("ApiProxyModuleId", Core.Constants.DefaultApiProxyId); this.RegisterCommonModule(builder, optimizeForPerformance, storeAndForward, metricsConfig, nestedEdgeEnabled, authenticationMode); this.RegisterRoutingModule(builder, storeAndForward, experimentalFeatures, nestedEdgeEnabled, authenticationMode == AuthenticationMode.Scope, trackDeviceState); this.RegisterMqttModule(builder, storeAndForward, optimizeForPerformance, experimentalFeatures); this.RegisterAmqpModule(builder); builder.RegisterModule(new HttpModule(this.iotHubHostname, this.edgeDeviceId, proxyModuleId)); if (experimentalFeatures.EnableMqttBroker) { var authConfig = this.configuration.GetSection("authAgentSettings"); builder.RegisterModule(new AuthModule(authConfig)); var mqttBrokerConfig = this.configuration.GetSection("mqttBrokerSettings"); builder.RegisterModule(new MqttBrokerModule(mqttBrokerConfig)); } }
void RegisterMqttModule( ContainerBuilder builder, StoreAndForward storeAndForward, ExperimentalFeatures experimentalFeatures) { var topics = new MessageAddressConversionConfiguration( this.configuration.GetSection(Constants.TopicNameConversionSectionName + ":InboundTemplates").Get <List <string> >(), this.configuration.GetSection(Constants.TopicNameConversionSectionName + ":OutboundTemplates").Get <Dictionary <string, string> >()); bool clientCertAuthEnabled = this.configuration.GetValue(Constants.ConfigKey.EdgeHubClientCertAuthEnabled, false); IConfiguration mqttSettingsConfiguration = this.configuration.GetSection("mqttSettings"); // MQTT broker overrides the legacy MQTT protocol head if (mqttSettingsConfiguration.GetValue("enabled", true) && !experimentalFeatures.EnableMqttBroker) { builder.RegisterModule(new MqttModule(mqttSettingsConfiguration, topics, this.serverCertificate, storeAndForward.IsEnabled, clientCertAuthEnabled, this.sslProtocols)); } }
public void Register(ContainerBuilder builder) { builder.RegisterModule(new LoggingModule()); builder.RegisterBuildCallback( c => { // set up loggers for Dotnetty var loggerFactory = c.Resolve <ILoggerFactory>(); InternalLoggerFactory.DefaultFactory = loggerFactory; var eventListener = new LoggerEventListener(loggerFactory.CreateLogger("EdgeHub")); eventListener.EnableEvents(CommonEventSource.Log, EventLevel.Informational); }); bool optimizeForPerformance = this.configuration.GetValue("OptimizeForPerformance", true); StoreAndForward storeAndForward = this.GetStoreAndForwardConfiguration(); IConfiguration experimentalFeaturesConfig = this.configuration.GetSection(Constants.ConfigKey.ExperimentalFeatures); ExperimentalFeatures experimentalFeatures = ExperimentalFeatures.Create(experimentalFeaturesConfig, Logger.Factory.CreateLogger("EdgeHub")); MetricsConfig metricsConfig = new MetricsConfig(this.configuration.GetSection("metrics:listener")); this.RegisterCommonModule(builder, optimizeForPerformance, storeAndForward, metricsConfig, experimentalFeatures); this.RegisterRoutingModule(builder, storeAndForward, experimentalFeatures); this.RegisterMqttModule(builder, storeAndForward, optimizeForPerformance, experimentalFeatures); this.RegisterAmqpModule(builder); builder.RegisterModule(new HttpModule(this.iotHubHostname)); if (experimentalFeatures.EnableMqttBroker) { var authConfig = this.configuration.GetSection("authAgentSettings"); builder.RegisterModule(new AuthModule(authConfig)); var mqttBrokerConfig = this.configuration.GetSection("mqttBrokerSettings"); builder.RegisterModule(new MqttBrokerModule(mqttBrokerConfig)); } }
void RegisterRoutingModule( ContainerBuilder builder, StoreAndForward storeAndForward, ExperimentalFeatures experimentalFeatures, bool nestedEdgeEnabled, bool scopeAuthenticationOnly, bool trackDeviceState) { var routes = this.configuration.GetSection("routes").Get <Dictionary <string, string> >(); int connectionPoolSize = this.configuration.GetValue <int>("IotHubConnectionPoolSize"); string configSource = this.configuration.GetValue <string>("configSource"); bool useTwinConfig = !string.IsNullOrWhiteSpace(configSource) && configSource.Equals("twin", StringComparison.OrdinalIgnoreCase); Option <UpstreamProtocol> upstreamProtocolOption = GetUpstreamProtocol(this.configuration); int connectivityCheckFrequencySecs = this.configuration.GetValue("ConnectivityCheckFrequencySecs", 300); TimeSpan connectivityCheckFrequency = connectivityCheckFrequencySecs < 0 ? TimeSpan.MaxValue : TimeSpan.FromSeconds(connectivityCheckFrequencySecs); // n Clients + 1 Edgehub int maxConnectedClients = this.configuration.GetValue("MaxConnectedClients", 100) + 1; int messageAckTimeoutSecs = this.configuration.GetValue("MessageAckTimeoutSecs", 30); TimeSpan messageAckTimeout = TimeSpan.FromSeconds(messageAckTimeoutSecs); int cloudConnectionIdleTimeoutSecs = this.configuration.GetValue("CloudConnectionIdleTimeoutSecs", 3600); TimeSpan cloudConnectionIdleTimeout = TimeSpan.FromSeconds(cloudConnectionIdleTimeoutSecs); bool closeCloudConnectionOnIdleTimeout = this.configuration.GetValue("CloseCloudConnectionOnIdleTimeout", true); int cloudOperationTimeoutSecs = this.configuration.GetValue("CloudOperationTimeoutSecs", 20); bool useServerHeartbeat = this.configuration.GetValue("UseServerHeartbeat", true); TimeSpan cloudOperationTimeout = TimeSpan.FromSeconds(cloudOperationTimeoutSecs); Option <TimeSpan> minTwinSyncPeriod = this.GetConfigurationValueIfExists("MinTwinSyncPeriodSecs") .Map(s => TimeSpan.FromSeconds(s)); Option <TimeSpan> reportedPropertiesSyncFrequency = this.GetConfigurationValueIfExists("ReportedPropertiesSyncFrequencySecs") .Map(s => TimeSpan.FromSeconds(s)); bool useV1TwinManager = this.GetConfigurationValueIfExists <string>("TwinManagerVersion") .Map(v => v.Equals("v1", StringComparison.OrdinalIgnoreCase)) .GetOrElse(false); int maxUpstreamBatchSize = this.configuration.GetValue("MaxUpstreamBatchSize", 10); int upstreamFanOutFactor = this.configuration.GetValue("UpstreamFanOutFactor", 10); bool encryptTwinStore = this.configuration.GetValue("EncryptTwinStore", true); int configUpdateFrequencySecs = this.configuration.GetValue("ConfigRefreshFrequencySecs", 3600); TimeSpan configUpdateFrequency = TimeSpan.FromSeconds(configUpdateFrequencySecs); bool checkEntireQueueOnCleanup = this.configuration.GetValue("CheckEntireQueueOnCleanup", false); int messageCleanupIntervalSecs = this.configuration.GetValue("MessageCleanupIntervalSecs", 1800); bool closeCloudConnectionOnDeviceDisconnect = this.configuration.GetValue("CloseCloudConnectionOnDeviceDisconnect", true); bool isLegacyUpstream = ExperimentalFeatures.IsViaBrokerUpstream( experimentalFeatures, nestedEdgeEnabled, this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.GatewayHostname).HasValue); builder.RegisterModule( new RoutingModule( this.iotHubHostname, this.gatewayHostname, this.edgeDeviceId, this.edgeModuleId, this.connectionString, routes, storeAndForward.IsEnabled, storeAndForward.Config, connectionPoolSize, useTwinConfig, this.versionInfo, upstreamProtocolOption, connectivityCheckFrequency, maxConnectedClients, messageAckTimeout, cloudConnectionIdleTimeout, closeCloudConnectionOnIdleTimeout, cloudOperationTimeout, useServerHeartbeat, minTwinSyncPeriod, reportedPropertiesSyncFrequency, useV1TwinManager, maxUpstreamBatchSize, upstreamFanOutFactor, encryptTwinStore, configUpdateFrequency, checkEntireQueueOnCleanup, messageCleanupIntervalSecs, experimentalFeatures, closeCloudConnectionOnDeviceDisconnect, nestedEdgeEnabled, isLegacyUpstream, scopeAuthenticationOnly: scopeAuthenticationOnly, trackDeviceState: trackDeviceState)); }
void RegisterCommonModule( ContainerBuilder builder, bool optimizeForPerformance, StoreAndForward storeAndForward, MetricsConfig metricsConfig, ExperimentalFeatures experimentalFeatures) { bool cacheTokens = this.configuration.GetValue("CacheTokens", false); Option <string> workloadUri = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.WorkloadUri); Option <string> workloadApiVersion = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.WorkloadAPiVersion); Option <string> moduleGenerationId = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.ModuleGenerationId); bool hasParentEdge = this.GetConfigurationValueIfExists <string>(Constants.ConfigKey.GatewayHostname).HasValue; if (!Enum.TryParse(this.configuration.GetValue("AuthenticationMode", string.Empty), true, out AuthenticationMode authenticationMode)) { if (!hasParentEdge) { // Default setting should be local auth with fallback to cloud auth authenticationMode = AuthenticationMode.CloudAndScope; } else { // If the Edge is nested and connects to a parent Edge, then we // should only allow local authentication as we don't expect to // have internet connectivity. authenticationMode = AuthenticationMode.Scope; } } int scopeCacheRefreshRateSecs = this.configuration.GetValue("DeviceScopeCacheRefreshRateSecs", 3600); TimeSpan scopeCacheRefreshRate = TimeSpan.FromSeconds(scopeCacheRefreshRateSecs); int scopeCacheRefreshDelaySecs = this.configuration.GetValue("DeviceScopeCacheRefreshDelaySecs", 120); TimeSpan scopeCacheRefreshDelay = TimeSpan.FromSeconds(scopeCacheRefreshDelaySecs); string proxy = this.configuration.GetValue("https_proxy", string.Empty); string productInfo = GetProductInfo(); // Register modules builder.RegisterModule( new CommonModule( productInfo, this.iotHubHostname, this.gatewayHostname, this.edgeDeviceId, this.edgeModuleId, this.edgeDeviceHostName, moduleGenerationId, authenticationMode, this.connectionString, optimizeForPerformance, storeAndForward.UsePersistentStorage, storeAndForward.StoragePath, workloadUri, workloadApiVersion, scopeCacheRefreshRate, scopeCacheRefreshDelay, cacheTokens, this.trustBundle, proxy, metricsConfig, storeAndForward.UseBackupAndRestore, storeAndForward.StorageBackupPath, storeAndForward.StorageMaxTotalWalSize, storeAndForward.StorageMaxOpenFiles, storeAndForward.StorageLogLevel, experimentalFeatures.EnableNestedEdge)); }