public async Task <IActionResult> SaveConfiguration(ScalingConfigurationUpdateModel scalingConfigurationUpdate) { FluentValidation.Results.ValidationResult validationResult = await _scalingConfigurationUpdateModelValidator.ValidateAsync(scalingConfigurationUpdate); if (!validationResult.IsValid) { return(validationResult.AsBadRequest()); } CosmosDbScalingCollectionSettings cosmosDbScalingCollectionSettings = await _cosmosDbScalingConfigRepository.GetCollectionSettingsByRepositoryType(scalingConfigurationUpdate.RepositoryType); if (cosmosDbScalingCollectionSettings == null) { cosmosDbScalingCollectionSettings = new CosmosDbScalingCollectionSettings() { CosmosCollectionType = scalingConfigurationUpdate.RepositoryType, MaxRequestUnits = scalingConfigurationUpdate.MaxRequestUnits, MinRequestUnits = scalingConfigurationUpdate.BaseRequestUnits, }; } else { cosmosDbScalingCollectionSettings.MaxRequestUnits = scalingConfigurationUpdate.MaxRequestUnits; cosmosDbScalingCollectionSettings.MinRequestUnits = scalingConfigurationUpdate.BaseRequestUnits; } HttpStatusCode statusCode = await _scalingConfigRepositoryPolicy.ExecuteAsync( () => _cosmosDbScalingConfigRepository.UpdateCollectionSettings(cosmosDbScalingCollectionSettings)); if (!statusCode.IsSuccess()) { string errorMessage = $"Failed to Insert or Update Scaling Collection Setting for repository type: '{scalingConfigurationUpdate.RepositoryType}' with status code: '{statusCode}'"; _logger.Error(errorMessage); throw new RetriableException(errorMessage); } await SaveScalingConfig(scalingConfigurationUpdate); return(new OkObjectResult(scalingConfigurationUpdate)); }
private async Task SaveScalingConfig(ScalingConfigurationUpdateModel scalingConfigurationUpdate) { CosmosDbScalingConfig cosmosDbScalingConfig = await _cosmosDbScalingConfigRepository.GetConfigByRepositoryType(scalingConfigurationUpdate.RepositoryType); if (cosmosDbScalingConfig == null) { cosmosDbScalingConfig = new CosmosDbScalingConfig() { Id = Guid.NewGuid().ToString(), RepositoryType = scalingConfigurationUpdate.RepositoryType, }; } cosmosDbScalingConfig.JobRequestUnitConfigs = scalingConfigurationUpdate.JobRequestUnitConfigs; HttpStatusCode statusCode = await _scalingConfigRepositoryPolicy.ExecuteAsync( () => _cosmosDbScalingConfigRepository.UpdateConfigSettings(cosmosDbScalingConfig)); if (!statusCode.IsSuccess()) { string errorMessage = $"Failed to Insert or Update config setting repository type: '{scalingConfigurationUpdate.RepositoryType}' with status code: '{statusCode}'"; _logger.Error(errorMessage); throw new RetriableException(errorMessage); } }
public async Task <IActionResult> RunSaveConfiguration([FromBody] ScalingConfigurationUpdateModel scalingConfigurationUpdate) { return(await _cosmosDbScalingService.SaveConfiguration(scalingConfigurationUpdate)); }