コード例 #1
0
        public static async Task <TwinAllOperationsInitializer> CreateAsync(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler resultHandler, TwinEventStorage storage)
        {
            try
            {
                TwinState initializedState;
                Twin      twin = await registryManager.GetTwinAsync(Settings.Current.DeviceId, Settings.Current.ModuleId);

                Dictionary <string, DateTime> reportedPropertyUpdates = await storage.GetAllReportedPropertiesUpdatedAsync();

                Dictionary <string, DateTime> desiredPropertyUpdates = await storage.GetAllDesiredPropertiesUpdatedAsync();

                if (reportedPropertyUpdates.Count == 0 &&
                    desiredPropertyUpdates.Count == 0 &&
                    (await storage.GetAllDesiredPropertiesReceivedAsync()).Count == 0)
                {
                    Logger.LogInformation("No existing storage detected. Initializing new module twin for fresh run.");

                    // reset desired properties
                    Twin desiredPropertyResetTwin = await registryManager.ReplaceTwinAsync(Settings.Current.DeviceId, Settings.Current.ModuleId, new Twin(), twin.ETag);

                    // reset reported properties
                    TwinCollection eraseReportedProperties = GetReportedPropertiesResetTwin(desiredPropertyResetTwin);
                    await moduleClient.UpdateReportedPropertiesAsync(eraseReportedProperties);

                    await Task.Delay(TimeSpan.FromSeconds(10)); // give enough time for reported properties reset to reach cloud

                    twin = await registryManager.GetTwinAsync(Settings.Current.DeviceId, Settings.Current.ModuleId);

                    initializedState = new TwinState {
                        ReportedPropertyUpdateCounter = 0, DesiredPropertyUpdateCounter = 0, TwinETag = twin.ETag, LastTimeOffline = DateTime.MinValue
                    };
                }
                else
                {
                    Logger.LogInformation("Existing storage detected. Initializing reported / desired property update counters.");
                    initializedState = new TwinState {
                        ReportedPropertyUpdateCounter = GetNewPropertyCounter(reportedPropertyUpdates), DesiredPropertyUpdateCounter = GetNewPropertyCounter(desiredPropertyUpdates), TwinETag = twin.ETag, LastTimeOffline = DateTime.MinValue
                    };
                }

                Logger.LogInformation($"Start state of module twin: {JsonConvert.SerializeObject(twin, Formatting.Indented)}");
                return(new TwinAllOperationsInitializer(registryManager, moduleClient, resultHandler, storage, initializedState));
            }
            catch (Exception e)
            {
                throw new Exception($"Shutting down module. Initialization failure: {e}");
            }
        }
コード例 #2
0
        public static async Task <TwinEdgeOperationsInitializer> CreateAsync(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler reporter)
        {
            try
            {
                TwinState initializedState;
                Twin      twin = await registryManager.GetTwinAsync(Settings.Current.DeviceId, Settings.Current.ModuleId);

                // reset properties
                Twin desiredPropertyResetTwin = await registryManager.ReplaceTwinAsync(Settings.Current.DeviceId, Settings.Current.ModuleId, new Twin(), twin.ETag);

                initializedState = new TwinState {
                    TwinETag = desiredPropertyResetTwin.ETag
                };

                Logger.LogInformation($"Start state of module twin: {JsonConvert.SerializeObject(twin, Formatting.Indented)}");
                return(new TwinEdgeOperationsInitializer(registryManager, moduleClient, reporter, initializedState));
            }
            catch (Exception e)
            {
                throw new Exception($"Shutting down module. Initialization failure: {e}");
            }
        }
コード例 #3
0
 TwinAllOperationsInitializer(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler resultHandler, TwinEventStorage storage, TwinState twinState)
 {
     this.reportedPropertyUpdater     = new ReportedPropertyUpdater(registryManager, moduleClient, resultHandler, twinState);
     this.desiredPropertyUpdater      = new DesiredPropertyUpdater(registryManager, resultHandler, twinState);
     this.desiredPropertyReceiver     = new DesiredPropertyReceiver(registryManager, moduleClient, resultHandler);
     this.reportedPropertiesValidator = new ReportedPropertiesValidator(registryManager, moduleClient, storage, resultHandler, twinState);
     this.desiredPropertiesValidator  = new DesiredPropertiesValidator(registryManager, moduleClient, storage, resultHandler, twinState);
 }
コード例 #4
0
        public static async Task <TwinCloudOperationsInitializer> CreateAsync(RegistryManager registryManager, ITwinTestResultHandler resultHandler)
        {
            try
            {
                TwinTestState initializedState;
                Twin          twin = await registryManager.GetTwinAsync(Settings.Current.DeviceId, Settings.Current.TargetModuleId);

                initializedState = new TwinTestState(twin.ETag);

                Logger.LogInformation($"Start state of module twin: {JsonConvert.SerializeObject(twin, Formatting.Indented)}");
                return(new TwinCloudOperationsInitializer(registryManager, resultHandler, initializedState));
            }
            catch (Exception e)
            {
                throw new Exception($"Shutting down module. Initialization failure: {e}");
            }
        }
コード例 #5
0
 TwinEdgeOperationsInitializer(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler reporter, TwinState initializedState)
 {
     this.reportedPropertyUpdater   = new ReportedPropertyUpdater(registryManager, moduleClient, reporter, initializedState);
     this.desiredPropertiesReceiver = new DesiredPropertyReceiver(registryManager, moduleClient, reporter);
 }
コード例 #6
0
 public static Task <TwinEdgeOperationsInitializer> CreateAsync(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler reporter)
 {
     return(Task.FromResult(new TwinEdgeOperationsInitializer(registryManager, moduleClient, reporter, 0)));
 }
コード例 #7
0
 TwinCloudOperationsInitializer(RegistryManager registryManager, ITwinTestResultHandler resultHandler, TwinTestState twinTestState)
 {
     this.desiredPropertyUpdater = new DesiredPropertyUpdater(registryManager, resultHandler, twinTestState);
 }
コード例 #8
0
 public ReportedPropertyUpdater(ModuleClient moduleClient, ITwinTestResultHandler reporter, int reportedPropertyUpdateCounter)
 {
     this.moduleClient = moduleClient;
     this.reporter     = reporter;
     this.reportedPropertyUpdateCounter = reportedPropertyUpdateCounter;
 }
コード例 #9
0
 public DesiredPropertiesValidator(RegistryManager registryManager, ModuleClient moduleClient, TwinEventStorage storage, ITwinTestResultHandler resultHandler, TwinState twinState)
 {
     this.registryManager = registryManager;
     this.moduleClient = moduleClient;
     this.storage = storage;
     this.resultHandler = resultHandler;
     this.twinState = twinState;
 }
コード例 #10
0
 public DesiredPropertyReceiver(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler resultHandler)
 {
     this.registryManager = registryManager;
     this.moduleClient    = moduleClient;
     this.resultHandler   = resultHandler;
 }
コード例 #11
0
        public DesiredPropertiesValidator(RegistryManager registryManager, ModuleClient moduleClient, TwinEventStorage storage, ITwinTestResultHandler resultHandler, TwinState twinState)
        {
            this.registryManager = registryManager;
            this.moduleClient    = moduleClient;
            this.storage         = storage;
            this.resultHandler   = resultHandler;
            this.twinState       = twinState;

            moduleClient.SetConnectionStatusChangesHandler((status, reason) =>
            {
                Logger.LogInformation($"Detected change in connection status:{Environment.NewLine}Changed Status: {status} Reason: {reason}");
                if (status == ConnectionStatus.Disconnected_Retrying)
                {
                    this.twinState.LastTimeOfEdgeRestart = DateTime.UtcNow;
                }
            });
        }
コード例 #12
0
 public ReportedPropertyUpdater(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler reporter, TwinState twinState)
 {
     this.registryManager = registryManager;
     this.moduleClient    = moduleClient;
     this.reporter        = reporter;
     this.twinState       = twinState;
 }
コード例 #13
0
 public DesiredPropertyUpdater(RegistryManager registryManager, ITwinTestResultHandler resultHandler, TwinState twinState)
 {
     this.registryManager = registryManager;
     this.resultHandler   = resultHandler;
     this.twinState       = twinState;
 }
コード例 #14
0
        public static async Task <TwinEdgeOperationsInitializer> CreateAsync(RegistryManager registryManager, ModuleClient moduleClient, ITwinTestResultHandler reporter)
        {
            try
            {
                Twin twin = await registryManager.GetTwinAsync(Settings.Current.DeviceId, Settings.Current.TargetModuleId);

                // reset reported properties
                await TwinTesterUtil.ResetTwinReportedPropertiesAsync(moduleClient, twin);

                return(new TwinEdgeOperationsInitializer(registryManager, moduleClient, reporter, 0));
            }
            catch (Exception e)
            {
                throw new Exception($"Shutting down module. Initialization failure: {e}");
            }
        }