package com.linkedin.d2.jmx;
import com.linkedin.d2.balancer.strategies.degrader.DegraderLoadBalancerStrategyV2;
import com.linkedin.d2.balancer.strategies.degrader.DegraderLoadBalancerStrategyV2_1;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class DegraderLoadBalancerStrategyV2_1Jmx implements DegraderLoadBalancerStrategyV2_1JmxMBean
{
private final DegraderLoadBalancerStrategyV2_1 _strategy;
public DegraderLoadBalancerStrategyV2_1Jmx(DegraderLoadBalancerStrategyV2_1 strategy)
{
_strategy = strategy;
}
@Override
public double getOverrideClusterDropRate()
{
@SuppressWarnings("deprecation")
double rate = _strategy.getCurrentOverrideDropRate();
return rate;
}
@Override
public String toString()
{
return "DegraderLoadBalancerStrategyV2_1Jmx [_strategy=" + _strategy + "]";
}
@Override
public int getTotalPointsInHashRing()
{
Map<URI, Integer> uris = _strategy.getState().getPointsMap();
int total = 0;
for (Map.Entry<URI, Integer> entry : uris.entrySet())
{
total += entry.getValue();
}
return total;
}
@Override
public String getPointsMap()
{
return _strategy.getState().getPointsMap().toString();
}
@Override
public String getUnhealthyClientsPoints()
{
int pointsPerWeight = _strategy.getConfig().getPointsPerWeight();
List<String> result = new ArrayList<String>();
for (Map.Entry<URI, Integer> entry : _strategy.getState().getPointsMap().entrySet())
{
if (entry.getValue() < pointsPerWeight)
{
result.add(entry.getKey().toString() + ":" + entry.getValue() + "/" + pointsPerWeight);
}
}
return result.toString();
}
}