Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

Commit 13676d3

Browse files
committed
fix(iot-service): Fix ADM samples
1 parent 7a4b3ad commit 13676d3

File tree

3 files changed

+23
-82
lines changed

3 files changed

+23
-82
lines changed
Lines changed: 18 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
// Copyright (c) Microsoft. All rights reserved.
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

4+
using Newtonsoft.Json;
45
using System;
56
using System.Collections.Generic;
6-
using System.Text;
77
using System.Threading;
88
using System.Threading.Tasks;
9-
using Microsoft.Azure.Devices;
109

1110
namespace Microsoft.Azure.Devices.Samples
1211
{
12+
/// <summary>
13+
/// This sample demonstrates automatic device management using device configurations.
14+
/// For module configurations, refer to: https://github.com/Azure-Samples/azure-iot-samples-csharp/tree/master/iot-hub/Samples/service/EdgeDeploymentSample
15+
/// </summary>
1316
public class AutomaticDeviceManagementSample
1417
{
1518
private readonly RegistryManager _registryManager;
@@ -47,117 +50,54 @@ public async Task RunSampleAsync()
4750
await GetConfigurations(5).ConfigureAwait(false);
4851
}
4952

50-
public async Task AddDeviceConfiguration(string configurationId)
53+
private async Task AddDeviceConfiguration(string configurationId)
5154
{
5255
Configuration configuration = new Configuration(configurationId);
5356

5457
CreateDeviceContent(configuration, configurationId);
55-
CreateModulesContent(configuration, configurationId);
5658
CreateMetricsAndTargetCondition(configuration, configurationId);
5759

5860
await _registryManager.AddConfigurationAsync(configuration).ConfigureAwait(false);
5961

60-
Console.WriteLine("Configuration added, id: " + configurationId);
62+
Console.WriteLine($"Configuration added, id: {configurationId}");
6163
}
6264

63-
public void CreateDeviceContent(Configuration configuration, string configurationId)
65+
private void CreateDeviceContent(Configuration configuration, string configurationId)
6466
{
65-
configuration.Content = new ConfigurationContent();
66-
configuration.Content.DeviceContent = new Dictionary<string, object>();
67+
configuration.Content = new ConfigurationContent
68+
{
69+
DeviceContent = new Dictionary<string, object>()
70+
};
6771
configuration.Content.DeviceContent["properties.desired.deviceContent_key"] = "deviceContent_value-" + configurationId;
6872
}
6973

70-
public void CreateModulesContent(Configuration configuration, string configurationId)
71-
{
72-
configuration.Content.ModulesContent = new Dictionary<string, IDictionary<string, object>>();
73-
IDictionary<string, object> modules_value = new Dictionary<string, object>();
74-
modules_value["properties.desired.modulesContent_key"] = "modulesContent_value-" + configurationId;
75-
configuration.Content.ModulesContent["properties.desired.modules_key"] = modules_value;
76-
}
77-
78-
public void CreateMetricsAndTargetCondition(Configuration configuration, string configurationId)
74+
private void CreateMetricsAndTargetCondition(Configuration configuration, string configurationId)
7975
{
8076
configuration.Metrics.Queries.Add("waterSettingsPending", "SELECT deviceId FROM devices WHERE properties.reported.chillerWaterSettings.status=\'pending\'");
8177
configuration.TargetCondition = "properties.reported.chillerProperties.model=\'4000x\'";
8278
configuration.Priority = 20;
8379
}
8480

85-
public async Task DeleteConfiguration(string configurationId)
81+
private async Task DeleteConfiguration(string configurationId)
8682
{
8783
await _registryManager.RemoveConfigurationAsync(configurationId).ConfigureAwait(false);
8884

89-
Console.WriteLine("Configuration deleted, id: " + configurationId);
85+
Console.WriteLine($"Configuration deleted, id: {configurationId}");
9086
}
9187

92-
public async Task GetConfigurations(int count)
88+
private async Task GetConfigurations(int count)
9389
{
9490
IEnumerable<Configuration> configurations = await _registryManager.GetConfigurationsAsync(count).ConfigureAwait(false);
9591

9692
// Check configuration's metrics for expected conditions
9793
foreach (var configuration in configurations)
9894
{
99-
PrintConfiguration(configuration);
95+
string configurationString = JsonConvert.SerializeObject(configuration, Formatting.Indented);
96+
Console.WriteLine(configurationString);
10097
Thread.Sleep(1000);
10198
}
10299

103100
Console.WriteLine("Configurations received");
104101
}
105-
106-
public void PrintConfiguration(Configuration configuration)
107-
{
108-
Console.WriteLine("Configuration Id: " + configuration.Id);
109-
Console.WriteLine("Configuration SchemaVersion: " + configuration.SchemaVersion);
110-
111-
Console.WriteLine("Configuration Labels: " + configuration.Labels);
112-
113-
PrintContent(configuration.ContentType, configuration.Content);
114-
115-
Console.WriteLine("Configuration TargetCondition: " + configuration.TargetCondition);
116-
Console.WriteLine("Configuration CreatedTimeUtc: " + configuration.CreatedTimeUtc);
117-
Console.WriteLine("Configuration LastUpdatedTimeUtc: " + configuration.LastUpdatedTimeUtc);
118-
119-
Console.WriteLine("Configuration Priority: " + configuration.Priority);
120-
121-
PrintConfigurationMetrics(configuration.SystemMetrics, "SystemMetrics");
122-
PrintConfigurationMetrics(configuration.Metrics, "Metrics");
123-
124-
Console.WriteLine("Configuration ETag: " + configuration.ETag);
125-
Console.WriteLine("------------------------------------------------------------");
126-
}
127-
128-
private void PrintContent(string contentType, ConfigurationContent configurationContent)
129-
{
130-
Console.WriteLine($"Configuration Content [type = {contentType}]");
131-
132-
Console.WriteLine("ModuleContent:");
133-
foreach (string modulesContentKey in configurationContent.ModulesContent.Keys)
134-
{
135-
foreach (string key in configurationContent.ModulesContent[modulesContentKey].Keys)
136-
{
137-
Console.WriteLine($"\t\t{key} = {configurationContent.ModulesContent[modulesContentKey][key]}");
138-
}
139-
}
140-
141-
Console.WriteLine("DeviceContent:");
142-
foreach (string key in configurationContent.DeviceContent.Keys)
143-
{
144-
Console.WriteLine($"\t{key} = {configurationContent.DeviceContent[key]}");
145-
}
146-
}
147-
148-
private void PrintConfigurationMetrics(ConfigurationMetrics metrics, string title)
149-
{
150-
Console.WriteLine($"{title} Results: ({metrics.Results.Count})");
151-
foreach (string key in metrics.Results.Keys)
152-
{
153-
Console.WriteLine($"\t{key} = {metrics.Results[key]}");
154-
}
155-
156-
Console.WriteLine($"{title} Queries: ({metrics.Queries.Count})");
157-
foreach (string key in metrics.Queries.Keys)
158-
{
159-
Console.WriteLine($"\t{key} = {metrics.Queries[key]}");
160-
}
161-
}
162102
}
163103
}

iot-hub/Samples/service/AutomaticDeviceManagementSample/AutomaticDeviceManagementSample.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFramework>netcoreapp2.1</TargetFramework>
6+
<LangVersion>8</LangVersion>
67
</PropertyGroup>
78

89
<ItemGroup>

iot-hub/Samples/service/AutomaticDeviceManagementSample/Program.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

44
using System;
5+
using System.Threading.Tasks;
56

67
namespace Microsoft.Azure.Devices.Samples
78
{
@@ -16,21 +17,20 @@ public class Program
1617

1718
private static string s_connectionString = Environment.GetEnvironmentVariable("IOTHUB_CONN_STRING_CSHARP");
1819

19-
public static int Main(string[] args)
20+
public static async Task Main(string[] args)
2021
{
2122
if (string.IsNullOrEmpty(s_connectionString) && args.Length > 0)
2223
{
2324
s_connectionString = args[0];
2425
}
2526

26-
RegistryManager registryManager = RegistryManager.CreateFromConnectionString(s_connectionString);
27+
using var registryManager = RegistryManager.CreateFromConnectionString(s_connectionString);
2728

2829
var sample = new AutomaticDeviceManagementSample(registryManager);
2930

30-
sample.RunSampleAsync().GetAwaiter().GetResult();
31+
await sample.RunSampleAsync().ConfigureAwait(false);
3132

3233
Console.WriteLine("Done.\n");
33-
return 0;
3434
}
3535
}
3636
}

0 commit comments

Comments
 (0)