package com.workshare.msnos.usvc.api.routing.strategies;
import com.workshare.msnos.usvc.IMicroservice;
import com.workshare.msnos.usvc.api.routing.ApiEndpoint;
import com.workshare.msnos.usvc.api.routing.RoutingStrategy;
import java.util.ArrayList;
import java.util.List;
public class PriorityRoutingStrategy implements RoutingStrategy {
public static final String SYSP_PRIORITY_ENABLED = "com.ws.nsnos.usvc.priority.enabled";
public static final String SYSP_PRIORITY_DEFAULT_LEVEL = "com.ws.nsnos.usvc.priority.default.level";
@Override
public List<ApiEndpoint> select(IMicroservice from, List<ApiEndpoint> apis) {
boolean noPriority = true;
for (ApiEndpoint api : apis) {
if (api.priority() != 0 && !api.isFaulty()) {
noPriority = false;
}
}
if (noPriority)
return apis;
int highest = 0;
for (ApiEndpoint api : apis) {
if (api.priority() > highest && !api.isFaulty())
highest = api.priority();
}
List<ApiEndpoint> priorityEndpoints = new ArrayList<ApiEndpoint>();
for (ApiEndpoint api : apis) {
if (api.priority() == highest && !api.isFaulty())
priorityEndpoints.add(api);
}
return priorityEndpoints;
}
public static boolean isEnabled() {
return Boolean.getBoolean(SYSP_PRIORITY_ENABLED) || getDefaultLevel() != null;
}
public static Integer getDefaultLevel() {
return Integer.getInteger(SYSP_PRIORITY_DEFAULT_LEVEL);
}
}