예제 #1
0
        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));
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
 public async Task <IActionResult> RunSaveConfiguration([FromBody] ScalingConfigurationUpdateModel scalingConfigurationUpdate)
 {
     return(await _cosmosDbScalingService.SaveConfiguration(scalingConfigurationUpdate));
 }