public MicroserviceInstanceDTO Map(IReadonlyMicroserviceInstance instance) { return(new MicroserviceInstanceDTO { Uri = instance.Uri }); }
public Result <Uri> Execute(IEnumerable <IReadonlyMicroserviceInstance> instances) { if (instances == null || !instances.Any()) { return(Result <Uri> .Failure(Messages.CanNotExecuteLoadBalancingStrategyForZeroAvailableInstances())); } IInstanceMetric bestMetric = new MemoryUsageMetric(double.MaxValue); IReadonlyMicroserviceInstance bestInstance = null; foreach (var instance in instances) { if (TryGetProcessorUsageMetric(instance, out var metric)) { if (bestMetric.CompareTo(metric) >= 0) { bestMetric = metric; bestInstance = instance; } } } return(!instances.Any() || bestInstance == null ? Result <Uri> .Failure(Messages.CanNotFindSuitableTarget(instances)) : Result <Uri> .Success(bestInstance.Uri)); }
public MetricMetadata GetFrom(IReadonlyMicroserviceInstance microserviceInstance) { return(new MetricMetadata { Instance = microserviceInstance.Uri.OriginalString, Job = microserviceInstance.MicroServiceName }); }
private static bool TryGetProcessorUsageMetric(IReadonlyMicroserviceInstance instance, out IInstanceMetric?metric) { if (instance?.Metrics == null) { metric = null; return(false); } metric = instance.Metrics .FirstOrDefault(m => m.Key == MetricType.ProcessorUsage) .Value; return(metric != null); }