Exemple #1
0
 internal EdgeAgentConnection(
     IModuleClientProvider moduleClientProvider,
     ISerde <DeploymentConfig> desiredPropertiesSerDe,
     IRequestManager requestManager,
     IDeviceManager deviceManager,
     bool enableSubscriptions,
     TimeSpan refreshConfigFrequency,
     RetryStrategy retryStrategy,
     IDeploymentMetrics deploymentMetrics,
     Option <X509Certificate2> manifestTrustBundle,
     TimeSpan twinPullOnConnectThrottleTime)
 {
     this.desiredPropertiesSerDe = Preconditions.CheckNotNull(desiredPropertiesSerDe, nameof(desiredPropertiesSerDe));
     this.deploymentConfigInfo   = Option.None <DeploymentConfigInfo>();
     this.reportedProperties     = Option.None <TwinCollection>();
     this.moduleConnection       = new ModuleConnection(moduleClientProvider, requestManager, this.OnConnectionStatusChanged, this.OnDesiredPropertiesUpdated, enableSubscriptions);
     this.retryStrategy          = Preconditions.CheckNotNull(retryStrategy, nameof(retryStrategy));
     this.refreshTwinTask        = new PeriodicTask(this.ForceRefreshTwin, refreshConfigFrequency, refreshConfigFrequency, Events.Log, "refresh twin config");
     this.pullOnReconnect        = enableSubscriptions;
     this.deviceManager          = Preconditions.CheckNotNull(deviceManager, nameof(deviceManager));
     Events.TwinRefreshInit(refreshConfigFrequency);
     this.deploymentMetrics             = Preconditions.CheckNotNull(deploymentMetrics, nameof(deploymentMetrics));
     this.initTask                      = this.ForceRefreshTwin();
     this.manifestTrustBundle           = manifestTrustBundle;
     this.twinPullOnConnectThrottleTime = twinPullOnConnectThrottleTime;
 }
Exemple #2
0
 public Agent(
     IConfigSource configSource,
     IEnvironmentProvider environmentProvider,
     IPlanner planner,
     IPlanRunner planRunner,
     IReporter reporter,
     IModuleIdentityLifecycleManager moduleIdentityLifecycleManager,
     IEntityStore <string, string> configStore,
     DeploymentConfigInfo initialDeployedConfigInfo,
     ISerde <DeploymentConfigInfo> deploymentConfigInfoSerde,
     IEncryptionProvider encryptionProvider,
     IDeploymentMetrics deploymentMetrics)
 {
     this.configSource = Preconditions.CheckNotNull(configSource, nameof(configSource));
     this.planner      = Preconditions.CheckNotNull(planner, nameof(planner));
     this.planRunner   = Preconditions.CheckNotNull(planRunner, nameof(planRunner));
     this.reporter     = Preconditions.CheckNotNull(reporter, nameof(reporter));
     this.moduleIdentityLifecycleManager = Preconditions.CheckNotNull(moduleIdentityLifecycleManager, nameof(moduleIdentityLifecycleManager));
     this.configStore               = Preconditions.CheckNotNull(configStore, nameof(configStore));
     this.environmentProvider       = Preconditions.CheckNotNull(environmentProvider, nameof(environmentProvider));
     this.currentConfig             = Preconditions.CheckNotNull(initialDeployedConfigInfo);
     this.deploymentConfigInfoSerde = Preconditions.CheckNotNull(deploymentConfigInfoSerde, nameof(deploymentConfigInfoSerde));
     this.environment               = this.environmentProvider.Create(this.currentConfig.DeploymentConfig);
     this.encryptionProvider        = Preconditions.CheckNotNull(encryptionProvider, nameof(encryptionProvider));
     this.deploymentMetrics         = Preconditions.CheckNotNull(deploymentMetrics, nameof(deploymentMetrics));
     this.status = DeploymentStatus.Unknown;
     Events.AgentCreated();
 }
 public EdgeAgentConnection(
     IModuleClientProvider moduleClientProvider,
     ISerde <DeploymentConfig> desiredPropertiesSerDe,
     IRequestManager requestManager,
     IDeviceManager deviceManager,
     IDeploymentMetrics deploymentMetrics)
     : this(moduleClientProvider, desiredPropertiesSerDe, requestManager, deviceManager, true, DefaultConfigRefreshFrequency, TransientRetryStrategy, deploymentMetrics)
 {
 }
Exemple #4
0
 public EdgeAgentConnection(
     IModuleClientProvider moduleClientProvider,
     ISerde <DeploymentConfig> desiredPropertiesSerDe,
     IRequestManager requestManager,
     IDeviceManager deviceManager,
     IDeploymentMetrics deploymentMetrics,
     Option <X509Certificate2> manifestTrustBundle)
     : this(moduleClientProvider, desiredPropertiesSerDe, requestManager, deviceManager, true, DefaultConfigRefreshFrequency, TransientRetryStrategy, deploymentMetrics, manifestTrustBundle, DefaultTwinPullOnConnectThrottleTime)
 {
 }
 public EdgeAgentConnection(
     IModuleClientProvider moduleClientProvider,
     ISerde <DeploymentConfig> desiredPropertiesSerDe,
     IRequestManager requestManager,
     IDeviceManager deviceManager,
     bool enableSubscriptions,
     TimeSpan configRefreshFrequency,
     IDeploymentMetrics deploymentMetrics)
     : this(moduleClientProvider, desiredPropertiesSerDe, requestManager, deviceManager, enableSubscriptions, configRefreshFrequency, TransientRetryStrategy, deploymentMetrics)
 {
 }
Exemple #6
0
        public static async Task <Agent> Create(
            IConfigSource configSource,
            IPlanner planner,
            IPlanRunner planRunner,
            IReporter reporter,
            IModuleIdentityLifecycleManager moduleIdentityLifecycleManager,
            IEnvironmentProvider environmentProvider,
            IEntityStore <string, string> configStore,
            ISerde <DeploymentConfigInfo> deploymentConfigInfoSerde,
            IEncryptionProvider encryptionProvider,
            IDeploymentMetrics deploymentMetrics)
        {
            Preconditions.CheckNotNull(deploymentConfigInfoSerde, nameof(deploymentConfigInfoSerde));
            Preconditions.CheckNotNull(configStore, nameof(configStore));

            Option <DeploymentConfigInfo> deploymentConfigInfo = Option.None <DeploymentConfigInfo>();

            try
            {
                Option <string> deploymentConfigInfoJson = await Preconditions.CheckNotNull(configStore, nameof(configStore)).Get(StoreConfigKey);

                await deploymentConfigInfoJson.ForEachAsync(
                    async json =>
                {
                    string decryptedJson = await encryptionProvider.DecryptAsync(json);
                    deploymentConfigInfo = Option.Some(deploymentConfigInfoSerde.Deserialize(decryptedJson));
                });
            }
            catch (Exception ex) when(!ex.IsFatal())
            {
                Events.ErrorDeserializingConfig(ex);
            }

            var agent = new Agent(
                configSource,
                environmentProvider,
                planner,
                planRunner,
                reporter,
                moduleIdentityLifecycleManager,
                configStore,
                deploymentConfigInfo.GetOrElse(DeploymentConfigInfo.Empty),
                deploymentConfigInfoSerde,
                encryptionProvider,
                deploymentMetrics);

            return(agent);
        }