in zuul-core/src/main/java/com/netflix/zuul/netty/filter/BaseZuulFilterRunner.java [340:389]
protected void recordFilterCompletion(
ExecutionStatus status,
ZuulFilter<I, O> filter,
long startTime,
ZuulMessage zuulMesg,
ZuulMessage startSnapshot) {
SessionContext zuulCtx = zuulMesg.getContext();
long execTimeNs = System.nanoTime() - startTime;
long execTimeMs = execTimeNs / 1_000_000L;
if (execTimeMs >= FILTER_EXCESSIVE_EXEC_TIME.get()) {
registry.timer(filterExcessiveTimerId
.withTag("id", filter.filterName())
.withTag("status", status.name()))
.record(execTimeMs, TimeUnit.MILLISECONDS);
}
// Record the execution summary in context.
switch (status) {
case FAILED:
if (logger.isDebugEnabled()) {
zuulCtx.addFilterExecutionSummary(filter.filterName(), ExecutionStatus.FAILED.name(), execTimeMs);
}
break;
case SUCCESS:
if (logger.isDebugEnabled()) {
zuulCtx.addFilterExecutionSummary(filter.filterName(), ExecutionStatus.SUCCESS.name(), execTimeMs);
}
if (startSnapshot != null) {
// debugRouting == true
Debug.addRoutingDebug(
zuulCtx,
"Filter {" + filter.filterName() + " TYPE:"
+ filter.filterType().toString() + " ORDER:" + filter.filterOrder()
+ "} Execution time = " + execTimeMs + "ms");
Debug.compareContextState(filter.filterName(), zuulCtx, startSnapshot.getContext());
}
break;
default:
break;
}
logger.debug(
"Filter {} completed with status {}, UUID {}",
filter.filterName(),
status.name(),
zuulMesg.getContext().getUUID());
// Notify configured listener.
usageNotifier.notify(filter, status);
}