Beispiel #1
0
        public async Task <RequestRouterConfigurationBase> GetConfigurationForRequest(HttpRequestMessage requestMessage, CancellationToken cancellationToken)
        {
            var configuration = await _configurationReader.GetConfiguration(cancellationToken);

            var localConfigs = new List <ConfigContainer>((configuration.Config ?? new List <ConfigContainer>()).Where(i => i.Rule != null && i.Route != null));

            foreach (var config in localConfigs)
            {
                try
                {
                    if (await config.IsMatch(requestMessage, cancellationToken))
                    {
                        return(config.Route);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Warn($"Failed to handle a rule due to an exception, Bad configuration?", ex);
                }
            }

            var route = localConfigs.FirstOrDefault(i => i.Default)?.Route;

            if (route == null)
            {
                Logger.Error($"No configuration found!");
                throw new NoConfigurationMatchException();
            }
            return(route);
        }
Beispiel #2
0
 public void Start()
 {
     try
     {
         _configurationReader.GetConfiguration(CancellationToken.None).GetAwaiter().GetResult();
     }
     catch (Exception ex)
     {
         Logger.Warn($"Failed to load configuration: {ex.Message}, Will retry automatically as requests come in", ex);
         Logger.Warn("Server will return BadGateway until successful.", ex);
     }
 }
 public Task ConfigurationChangedAsync()
 {
     _logger.Information($"Configuration was changed. Current values: {_configurationReader.GetConfiguration()})");
     return(Task.CompletedTask);
 }