public async Task ProcessAsync(CancellationToken cancellationToken) { try { var ingresses = _cache.GetIngresses().ToArray(); var configContext = new YarpConfigContext(); foreach (var ingress in ingresses) { if (_cache.TryGetReconcileData(new NamespacedName(ingress.Metadata.NamespaceProperty, ingress.Metadata.Name), out var data)) { var ingressContext = new YarpIngressContext(ingress, data.ServiceList, data.EndpointsList); YarpParser.ConvertFromKubernetesIngress(ingressContext, configContext); } } var clusters = configContext.BuildClusterConfig(); _logger.LogInformation(JsonSerializer.Serialize(configContext.Routes)); _logger.LogInformation(JsonSerializer.Serialize(clusters)); await _updateConfig.UpdateAsync(configContext.Routes, clusters, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { _logger.LogWarning(ex, "Uncaught exception occured while reconciling"); throw; } }
public override async Task RunAsync(CancellationToken cancellationToken) { using var client = new HttpClient(); while (!cancellationToken.IsCancellationRequested) { await _limiter.WaitAsync(cancellationToken).ConfigureAwait(false); #pragma warning disable CA1303 // Do not pass literals as localized parameters Logger.LogInformation("Connecting with {ControllerUrl}", _options.ControllerUrl.ToString()); try { using var stream = await client.GetStreamAsync(_options.ControllerUrl, cancellationToken).ConfigureAwait(false); using var reader = new StreamReader(stream, Encoding.UTF8, leaveOpen: true); using var cancellation = cancellationToken.Register(stream.Close); while (true) { var json = await reader.ReadLineAsync().ConfigureAwait(false); if (string.IsNullOrEmpty(json)) { break; } var message = System.Text.Json.JsonSerializer.Deserialize <Message>(json); Logger.LogInformation("Received {MessageType} for {MessageKey}", message.MessageType, message.Key); Logger.LogInformation(json); Logger.LogInformation(message.MessageType.ToString()); if (message.MessageType == MessageType.Update) { await _proxyConfigProvider.UpdateAsync(message.Routes, message.Cluster, cancellation.Token).ConfigureAwait(false); } } } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { Logger.LogInformation(ex, "Stream ended"); } #pragma warning restore CA1303 // Do not pass literals as localized parameters } }