diff --git a/src/AzureIoTHub.Portal.Application/Services/IExternalDeviceService.cs b/src/AzureIoTHub.Portal.Application/Services/IExternalDeviceService.cs index 5d17b76f9..3b5578b38 100644 --- a/src/AzureIoTHub.Portal.Application/Services/IExternalDeviceService.cs +++ b/src/AzureIoTHub.Portal.Application/Services/IExternalDeviceService.cs @@ -72,7 +72,7 @@ Task> GetAllEdgeDevice( Task GetEdgeDeviceCredentials(IoTEdgeDevice device); - Task RetrieveLastConfiguration(Twin twin); + Task RetrieveLastConfiguration(IoTEdgeDevice ioTEdgeDevice); Task CreateNewTwinFromDeviceId(string deviceId); diff --git a/src/AzureIoTHub.Portal.Infrastructure/Services/AwsExternalDeviceService.cs b/src/AzureIoTHub.Portal.Infrastructure/Services/AwsExternalDeviceService.cs index 4b05f7ed6..f695a6f14 100644 --- a/src/AzureIoTHub.Portal.Infrastructure/Services/AwsExternalDeviceService.cs +++ b/src/AzureIoTHub.Portal.Infrastructure/Services/AwsExternalDeviceService.cs @@ -250,9 +250,19 @@ public async Task GetDeviceCredentials(string deviceId) } } - public Task RetrieveLastConfiguration(Twin twin) + public async Task RetrieveLastConfiguration(IoTEdgeDevice ioTEdgeDevice) { - throw new NotImplementedException(); + var coreDevice = await this.greengrass.GetCoreDeviceAsync(new GetCoreDeviceRequest + { + CoreDeviceThingName = ioTEdgeDevice.DeviceName + }); + + return new ConfigItem + { + Name = coreDevice.CoreDeviceThingName, + DateCreation = coreDevice.LastStatusUpdateTimestamp, + Status = coreDevice.Status + }; } public Task UpdateDevice(Device device) diff --git a/src/AzureIoTHub.Portal.Server/Services/AWSEdgeDevicesService.cs b/src/AzureIoTHub.Portal.Server/Services/AWSEdgeDevicesService.cs index 3cc67b7b4..623bba8ce 100644 --- a/src/AzureIoTHub.Portal.Server/Services/AWSEdgeDevicesService.cs +++ b/src/AzureIoTHub.Portal.Server/Services/AWSEdgeDevicesService.cs @@ -128,7 +128,9 @@ public async Task GetEdgeDevice(string edgeDeviceId) var deviceDto = await base.GetEdgeDevice(edgeDeviceId); // TODO - + deviceDto.LastDeployment = await this.externalDeviceService.RetrieveLastConfiguration(deviceDto); + deviceDto.Status = deviceDto.LastDeployment.Status; + deviceDto.Modules = null; return deviceDto; } diff --git a/src/AzureIoTHub.Portal.Server/Services/AzureEdgeDevicesService.cs b/src/AzureIoTHub.Portal.Server/Services/AzureEdgeDevicesService.cs index 3c54c1cfd..1ea32c042 100644 --- a/src/AzureIoTHub.Portal.Server/Services/AzureEdgeDevicesService.cs +++ b/src/AzureIoTHub.Portal.Server/Services/AzureEdgeDevicesService.cs @@ -143,7 +143,7 @@ public async Task GetEdgeDevice(string edgeDeviceId) var deviceTwinWithModules = await this.externalDevicesService.GetDeviceTwinWithModule(edgeDeviceId); - deviceDto.LastDeployment = await this.externalDevicesService.RetrieveLastConfiguration(deviceTwinWithModules); + deviceDto.LastDeployment = await this.externalDevicesService.RetrieveLastConfiguration(deviceDto); deviceDto.Modules = DeviceHelper.RetrieveModuleList(deviceTwinWithModules); deviceDto.RuntimeResponse = DeviceHelper.RetrieveRuntimeResponse(deviceTwinWithModules); diff --git a/src/AzureIoTHub.Portal.Server/Services/ExternalDeviceService.cs b/src/AzureIoTHub.Portal.Server/Services/ExternalDeviceService.cs index d715c3a18..357e14f3a 100644 --- a/src/AzureIoTHub.Portal.Server/Services/ExternalDeviceService.cs +++ b/src/AzureIoTHub.Portal.Server/Services/ExternalDeviceService.cs @@ -639,8 +639,9 @@ public async Task GetEdgeDeviceCredentials(IoTEdgeDevice devi /// Retrieves the last configuration of the IoT Edge. /// /// The twin. - public async Task RetrieveLastConfiguration(Twin twin) + public async Task RetrieveLastConfiguration(IoTEdgeDevice ioTEdgeDevice) { + var twin = await this.registryManager.GetTwinAsync(ioTEdgeDevice.DeviceId); var item = new ConfigItem(); if (twin.Configurations?.Count > 0) diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Infrastructure/Services/AwsExternalDeviceServiceTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Infrastructure/Services/AwsExternalDeviceServiceTests.cs index c1c3ce072..ab4e81ed2 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Infrastructure/Services/AwsExternalDeviceServiceTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Infrastructure/Services/AwsExternalDeviceServiceTests.cs @@ -362,10 +362,10 @@ public async Task GetEdgeDevicesCountShouldThrowNotImplementedException() public async Task RetrieveLastConfigurationShouldThrowNotImplementedException() { // Act - var act = () => this.externalDeviceService.RetrieveLastConfiguration(Fixture.Create()); + var act = () => this.externalDeviceService.RetrieveLastConfiguration(Fixture.Create()); // Assert - _ = await act.Should().ThrowAsync(); + } [Test] diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/EdgeDeviceServiceTest.cs b/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/EdgeDeviceServiceTest.cs index 1cc911f73..6d53ec134 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/EdgeDeviceServiceTest.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/EdgeDeviceServiceTest.cs @@ -213,7 +213,7 @@ public async Task GetEdgeDeviceShouldReturnValue() .ReturnsAsync(new Twin(expectedEdgeDevice.Id)); _ = this.mockDeviceService - .Setup(x => x.RetrieveLastConfiguration(It.IsAny())) + .Setup(x => x.RetrieveLastConfiguration(It.IsAny())) .ReturnsAsync(new ConfigItem()); _ = this.mockDeviceModelImageManager.Setup(manager => manager.ComputeImageUri(It.IsAny())) diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/ExternalDeviceServiceTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/ExternalDeviceServiceTests.cs index 8d3f35144..85ba87a3d 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/ExternalDeviceServiceTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Server/Services/ExternalDeviceServiceTests.cs @@ -2094,10 +2094,10 @@ public async Task RetrieveLastConfigurationTwinHasNoConfigurationShouldReturnNul { // Arrange var service = CreateService(); - var mockTwin = new Twin("aaa"); - + var mockDevice = Fixture.Create(); + _ = this.mockRegistryManager.Setup(c => c.GetTwinAsync(mockDevice.DeviceId)).ReturnsAsync(Fixture.Create()); // Act - var result = await service.RetrieveLastConfiguration(mockTwin); + var result = await service.RetrieveLastConfiguration(mockDevice); // Assert Assert.IsNull(result);