private IEnumerable <Instantiation> GenerateRedisAutoscalingRules(RuleGeneratorArguments arguments) { if (!arguments.DynamicStampProperties.RedisAutoscalingEnabled) { yield break; } var autoscalingAgentConfiguration = new RedisAutoscalingAgent.Configuration(); if (arguments.DynamicStampProperties.RedisAutoscalingMaximumClusterMemoryAllowedMb > 0) { autoscalingAgentConfiguration.MaximumClusterMemoryAllowedMb = arguments.DynamicStampProperties.RedisAutoscalingMaximumClusterMemoryAllowedMb; } var redisAutoscalingAgent = new RedisAutoscalingAgent(autoscalingAgentConfiguration, arguments.EnvironmentResources.MonitorManagementClient); var configuration = new RedisAutoscalingRule.Configuration(arguments.BaseConfiguration); var primaryRedisInstance = RedisInstance .FromPreloaded(arguments.EnvironmentResources.Azure, arguments.EnvironmentResources.RedisCaches[arguments.StampId.PrimaryRedisName]) .ThrowIfFailure(); var secondaryRedisInstance = RedisInstance .FromPreloaded(arguments.EnvironmentResources.Azure, arguments.EnvironmentResources.RedisCaches[arguments.StampId.SecondaryRedisName]) .ThrowIfFailure(); yield return(new Instantiation { Rule = new RedisAutoscalingRule(configuration, redisAutoscalingAgent, primaryRedisInstance, secondaryRedisInstance), PollingPeriod = TimeSpan.FromMinutes(10), }); }
private async Task RunTestAsync(Func <OperationContext, TestableRedisAutoscalingAgent, Task> testFunc) { // Console is forwarded to XUnit as per TestBase using var consoleLog = new ConsoleLog(); using var logger = new Logger(new[] { consoleLog }); var configuration = new RedisAutoscalingAgent.Configuration(); var redisAutoscalingAgent = new TestableRedisAutoscalingAgent(configuration); var tracingContext = new Context(logger); var operationContext = new OperationContext(tracingContext, token: default); await testFunc(operationContext, redisAutoscalingAgent); }
private IEnumerable <Instantiation> GenerateRedisAutoscalingRules(SingleStampRuleArguments arguments) { if (!arguments.DynamicStampProperties.RedisAutoscalingEnabled) { yield break; } if (!arguments.EnvironmentResources.RedisCaches.ContainsKey(arguments.StampId.PrimaryRedisName) || !arguments.EnvironmentResources.RedisCaches.ContainsKey(arguments.StampId.SecondaryRedisName)) { _logger.Error($"Attempt to create Redis autoscaler for stamp `{arguments.StampId}` failed due to missing Redis instance. Skipping rule"); yield break; } var autoscalingAgentConfiguration = new RedisAutoscalingAgent.Configuration(); if (arguments.DynamicStampProperties.RedisAutoscalingMaximumClusterMemoryAllowedMb > 0) { autoscalingAgentConfiguration.MaximumClusterMemoryAllowedMb = arguments.DynamicStampProperties.RedisAutoscalingMaximumClusterMemoryAllowedMb; } var azureMetricsClient = new AzureMetricsClient(arguments.EnvironmentResources.MonitorManagementClient); var redisAutoscalingAgent = new RedisAutoscalingAgent(autoscalingAgentConfiguration, azureMetricsClient); var configuration = new RedisAutoscalingRule.Configuration(arguments.BaseConfiguration); var primaryRedisInstance = RedisInstance .FromPreloaded( arguments.EnvironmentResources.Azure, arguments.EnvironmentResources.RedisCaches[arguments.StampId.PrimaryRedisName], readOnly: _configuration.ReadOnly) .ThrowIfFailure(); var secondaryRedisInstance = RedisInstance .FromPreloaded( arguments.EnvironmentResources.Azure, arguments.EnvironmentResources.RedisCaches[arguments.StampId.SecondaryRedisName], readOnly: _configuration.ReadOnly) .ThrowIfFailure(); yield return(new Instantiation { Rule = new RedisAutoscalingRule(configuration, redisAutoscalingAgent, primaryRedisInstance, secondaryRedisInstance), PollingPeriod = TimeSpan.FromMinutes(10), }); }