private static void RemoveFromFailed(IDictionary <string, int> failures, ServiceInstanceData instance) { if (failures.ContainsKey(instance.InstanceId)) { failures.Remove(instance.InstanceId); } }
private static void IncreaseFailures(IDictionary <string, int> failures, ServiceInstanceData instance) { if (failures.ContainsKey(instance.InstanceId)) { failures[instance.InstanceId]++; } else { failures[instance.InstanceId] = 1; } }
private static async Task <bool> IsHealthy(ServiceInstanceData instance, ILogger logger) { try { var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(2) }; var code = (int)(await httpClient.GetAsync(instance.InstanceAddress + instance.HealthCheckAddress)).StatusCode; return(code >= 200 && code <= 299); } catch { return(false); } }
private static void RemoveInstanceOnMaxFailure(IDictionary <string, int> failures, ServiceInstanceData instance, IInstanceRepository repository, ILogger logger) { if (failures[instance.InstanceId] == MaxFailures) { logger.LogInformation( $"Reached max health check failures ({MaxFailures}). Removing instance {JsonConvert.SerializeObject(instance)}."); repository.Remove(instance.InstanceId); } }
public void Add(ServiceInstanceData instanceData) { _collection.Add(instanceData); }