public async Task <DeploymentServiceModel> CreateAsync(DeploymentServiceModel model, string userId, string tenantId) { if (string.IsNullOrEmpty(model.DeviceGroupId)) { throw new ArgumentNullException(DeviceGroupIdParameter); } if (string.IsNullOrEmpty(model.DeviceGroupQuery) && (model.DeviceIds == null || (model.DeviceIds != null && model.DeviceIds.Count() == 0))) { throw new ArgumentNullException(DeviceGroupQueryParameter); } if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException(NameParameter); } if (string.IsNullOrEmpty(model.PackageContent)) { throw new ArgumentNullException(PackageContentParameter); } if (model.PackageType.Equals(PackageType.DeviceConfiguration) && string.IsNullOrEmpty(model.ConfigType)) { throw new ArgumentNullException(ConfigurationTypeParameter); } if (model.Priority < 0) { throw new ArgumentOutOfRangeException( PriorityParameter, model.Priority, "The priority provided should be 0 or greater"); } var configuration = ConfigurationsHelper.ToHubConfiguration(model); // TODO: Add specific exception handling when exception types are exposed // https://github.com/Azure/azure-iot-sdk-csharp/issues/649 var result = new DeploymentServiceModel(await this.tenantHelper.GetRegistry().AddConfigurationAsync(configuration)); // Setting the id so that deployment id is populated model.Id = result.Id; // Log a custom event to Application Insights this.deploymentLog.LogDeploymentCreate(model, tenantId, userId); return(result); }
public async Task <DeploymentServiceModel> CreateAsync(DeploymentServiceModel model) { if (string.IsNullOrEmpty(model.DeviceGroupId)) { throw new ArgumentNullException(DeviceGroupIdParameter); } if (string.IsNullOrEmpty(model.DeviceGroupQuery)) { throw new ArgumentNullException(DeviceGroupQueryParameter); } if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException(NameParameter); } if (string.IsNullOrEmpty(model.PackageContent)) { throw new ArgumentNullException(PackageContentParameter); } if (model.PackageType.Equals(PackageType.DeviceConfiguration) && string.IsNullOrEmpty(model.ConfigType)) { throw new ArgumentNullException(ConfigurationTypeParameter); } if (model.Priority < 0) { throw new ArgumentOutOfRangeException( PriorityParameter, model.Priority, "The priority provided should be 0 or greater"); } var configuration = ConfigurationsHelper.ToHubConfiguration(model); // TODO: Add specific exception handling when exception types are exposed // https://github.com/Azure/azure-iot-sdk-csharp/issues/649 return(new DeploymentServiceModel(await this.tenantHelper.GetRegistry().AddConfigurationAsync(configuration))); }
/// <summary> /// Schedules a deployment of the provided package, to the given group. /// </summary> /// <returns>Scheduled deployment</returns> public async Task <DeploymentServiceModel> CreateAsync(DeploymentServiceModel model) { if (string.IsNullOrEmpty(model.DeviceGroupId)) { throw new ArgumentNullException(DEVICE_GROUP_ID_PARAM); } if (string.IsNullOrEmpty(model.DeviceGroupQuery)) { throw new ArgumentNullException(DEVICE_GROUP_QUERY_PARAM); } if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException(NAME_PARAM); } if (string.IsNullOrEmpty(model.PackageContent)) { throw new ArgumentNullException(PACKAGE_CONTENT_PARAM); } if (model.PackageType.Equals(PackageType.DeviceConfiguration) && string.IsNullOrEmpty(model.ConfigType)) { throw new ArgumentNullException(CONFIG_TYPE_PARAM); } if (model.Priority < 0) { throw new ArgumentOutOfRangeException(PRIORITY_PARAM, model.Priority, "The priority provided should be 0 or greater"); } var configuration = ConfigurationsHelper.ToHubConfiguration(model); // TODO: Add specific exception handling when exception types are exposed // https://github.com/Azure/azure-iot-sdk-csharp/issues/649 return(new DeploymentServiceModel(await this.registry.AddConfigurationAsync(configuration))); }
public async Task <DeploymentServiceModel> CreateAsync(DeploymentServiceModel model, string userId, string tenantId) { if (string.IsNullOrEmpty(model.DeviceGroupId)) { throw new ArgumentNullException(DeviceGroupIdParameter); } if (string.IsNullOrEmpty(model.DeviceGroupQuery) && (model.DeviceIds == null || (model.DeviceIds != null && model.DeviceIds.Count() == 0))) { throw new ArgumentNullException(DeviceGroupQueryParameter); } if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException(NameParameter); } if (string.IsNullOrEmpty(model.PackageContent)) { throw new ArgumentNullException(PackageContentParameter); } if (model.PackageType.Equals(PackageType.DeviceConfiguration) && string.IsNullOrEmpty(model.ConfigType)) { throw new ArgumentNullException(ConfigurationTypeParameter); } if (model.Priority < 0) { throw new ArgumentOutOfRangeException( PriorityParameter, model.Priority, "The priority provided should be 0 or greater"); } var configuration = ConfigurationsHelper.ToHubConfiguration(model); // Update the Metrics related to previous deployment which targets the same device group as the metrics // will be overriden once the new deployment gets applied to the devices. bool shouldMarkAsLatest = await this.UpdateMetricsOfCurrentDeployment(model.DeviceGroupId, model.Priority); // TODO: Add specific exception handling when exception types are exposed // https://github.com/Azure/azure-iot-sdk-csharp/issues/649 var result = new DeploymentServiceModel(await this.tenantHelper.GetRegistry().AddConfigurationAsync(configuration)); // Setting the id so that deployment id is populated model.Id = result.Id; model.CreatedDateTimeUtc = result.CreatedDateTimeUtc; // Add latest tag to deployment if deployment has highest priority for the device group. if (shouldMarkAsLatest) { if (model.Tags == null) { model.Tags = new List <string>(); } model.Tags.Add(LatestTag); } else { // Update the Device Statuses for the DeploymentId for future references. model.DeploymentMetrics = result.DeploymentMetrics; } // Store the deployment details in Cosmos DB await this.StoreDeploymentInSecondaryStorage(model, userId); // Log a custom event to Application Insights // this.deploymentLog.LogDeploymentCreate(model, tenantId, userId); return(model); }