package io.scalecube.services.a.b.testing;
import io.scalecube.services.ServiceHeaders;
import io.scalecube.services.ServiceInstance;
import io.scalecube.services.ServiceRegistry;
import io.scalecube.services.routing.Router;
import io.scalecube.transport.Message;
import java.util.Optional;
public class CanaryTestingRouter implements Router {
private ServiceRegistry serviceRegistry;
public CanaryTestingRouter(ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
@Override
public Optional<ServiceInstance> route(Message request) {
String serviceName = request.header(ServiceHeaders.SERVICE_REQUEST);
RandomCollection<ServiceInstance> weightedRandom = new RandomCollection<>();
serviceRegistry.serviceLookup(serviceName).stream().forEach(instance -> {
weightedRandom.add(
Double.valueOf(instance.tags().get("Weight")),
instance);
});
return Optional.of(weightedRandom.next());
}
}