in zuul-core/src/main/java/com/netflix/zuul/stats/StatsManager.java [211:269]
public void collectRouteStats(String route, int statusCode) {
// increments 200, 301, 401, 503, etc. status counters
String preciseStatusString = String.format("status_%d", statusCode);
NamedCountingMonitor preciseStatus = namedStatusMap.get(preciseStatusString);
if (preciseStatus == null) {
preciseStatus = new NamedCountingMonitor(preciseStatusString);
NamedCountingMonitor found = namedStatusMap.putIfAbsent(preciseStatusString, preciseStatus);
if (found != null) {
preciseStatus = found;
} else {
MonitorRegistry.getInstance().registerObject(preciseStatus);
}
}
preciseStatus.increment();
// increments 2xx, 3xx, 4xx, 5xx status counters
String summaryStatusString = String.format("status_%dxx", statusCode / 100);
NamedCountingMonitor summaryStatus = namedStatusMap.get(summaryStatusString);
if (summaryStatus == null) {
summaryStatus = new NamedCountingMonitor(summaryStatusString);
NamedCountingMonitor found = namedStatusMap.putIfAbsent(summaryStatusString, summaryStatus);
if (found != null) {
summaryStatus = found;
} else {
MonitorRegistry.getInstance().registerObject(summaryStatus);
}
}
summaryStatus.increment();
// increments route and status counter
if (route == null) {
route = "ROUTE_NOT_FOUND";
}
route = route.replace("/", "_");
ConcurrentHashMap<Integer, RouteStatusCodeMonitor> statsMap = routeStatusMap.get(route);
if (statsMap == null) {
statsMap = new ConcurrentHashMap<Integer, RouteStatusCodeMonitor>();
routeStatusMap.putIfAbsent(route, statsMap);
}
RouteStatusCodeMonitor sd = statsMap.get(statusCode);
if (sd == null) {
// don't register only 404 status codes (these are garbage endpoints)
if (statusCode == 404) {
if (statsMap.size() == 0) {
return;
}
}
sd = new RouteStatusCodeMonitor(route, statusCode);
RouteStatusCodeMonitor sd1 = statsMap.putIfAbsent(statusCode, sd);
if (sd1 != null) {
sd = sd1;
} else {
MonitorRegistry.getInstance().registerObject(sd);
}
}
sd.update();
}