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); }
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); }