public ZuulFilterConcurrencyExceededException(ZuulFilter filter, int concurrencyLimit) { super(filter.filterName() + " exceeded concurrency limit of " + concurrencyLimit, true); } }
public ZuulFilterConcurrencyExceededException(ZuulFilter filter, int concurrencyLimit) { super(filter.filterName() + " exceeded concurrency limit of " + concurrencyLimit, true); } }
void putFilter(String sName, ZuulFilter filter, long lastModified) { List<ZuulFilter> list = hashFiltersByType.get(filter.filterType()); if (list != null) { hashFiltersByType.remove(filter.filterType()); //rebuild this list } String nameAndType = filter.filterType() + ":" + filter.filterName(); filtersByNameAndType.put(nameAndType, filter); filterRegistry.put(sName, filter); filterClassLastModified.put(sName, lastModified); }
protected void recordFilterError(final I inMesg, final ZuulFilter<I, O> filter, final Throwable t) { // Add a log statement for this exception. final String errorMsg = "Filter Exception: filter=" + filter.filterName() + ", request-info=" + inMesg.getInfoForLogging() + ", msg=" + String.valueOf(t.getMessage()); if (t instanceof ZuulException && !((ZuulException) t).shouldLogAsError()) { LOG.warn(errorMsg); } else { LOG.error(errorMsg, t); } // Store this filter error for possible future use. But we still continue with next filter in the chain. final SessionContext zuulCtx = inMesg.getContext(); zuulCtx.getFilterErrors().add(new FilterError(filter.filterName(), filter.filterType().toString(), t)); if (zuulCtx.debugRouting()) { Debug.addRoutingDebug(zuulCtx, "Running Filter failed " + filter.filterName() + " type:" + filter.filterType() + " order:" + filter.filterOrder() + " " + t.getMessage()); } }
private final void runFilters(final T mesg, final AtomicInteger runningFilterIdx) { T inMesg = mesg; String filterName = "-"; try { Preconditions.checkNotNull(mesg, "Input message"); int i = runningFilterIdx.get(); while (i < filters.length) { final ZuulFilter<T, T> filter = filters[i]; filterName = filter.filterName(); final T outMesg = filter(filter, inMesg); if (outMesg == null) { return; //either async filter or waiting for the message body to be buffered } inMesg = outMesg; i = runningFilterIdx.incrementAndGet(); } //Filter chain has reached its end, pass result to the next stage invokeNextStage(inMesg); } catch (Exception ex) { handleException(inMesg, filterName, ex); } }
protected void recordFilterCompletion(final ExecutionStatus status, final ZuulFilter<I, O> filter, long startTime, final ZuulMessage zuulMesg, final ZuulMessage startSnapshot) { final SessionContext zuulCtx = zuulMesg.getContext(); final long execTime = System.currentTimeMillis() - startTime; if (execTime >= FILTER_EXCESSIVE_EXEC_TIME.get()) { LOG.warn("Filter {} took {} ms to complete! status = {}", filter.filterName(), execTime, status.name()); } // Record the execution summary in context. switch (status) { case FAILED: zuulCtx.addFilterExecutionSummary(filter.filterName(), FAILED.name(), execTime); break; case SUCCESS: zuulCtx.addFilterExecutionSummary(filter.filterName(), SUCCESS.name(), execTime); if (startSnapshot != null) { //debugRouting == true Debug.addRoutingDebug(zuulCtx, "Filter {" + filter.filterName() + " TYPE:" + filter.filterType().toString() + " ORDER:" + filter.filterOrder() + "} Execution time = " + execTime + "ms"); Debug.compareContextState(filter.filterName(), zuulCtx, startSnapshot.getContext()); } break; default: break; } LOG.debug("Filter {} completed with status {}, UUID {}", filter.filterName(), status.name(), zuulMesg.getContext().getUUID()); // Notify configured listener. usageNotifier.notify(filter, status); }
void putFilter(String sName, ZuulFilter filter, long lastModified) { List<ZuulFilter> list = hashFiltersByType.get(filter.filterType()); if (list != null) { hashFiltersByType.remove(filter.filterType()); //rebuild this list } String nameAndType = filter.filterType() + ":" + filter.filterName(); filtersByNameAndType.put(nameAndType, filter); filterRegistry.put(sName, filter); filterClassLastModified.put(sName, lastModified); }
protected void recordFilterError(final I inMesg, final ZuulFilter<I, O> filter, final Throwable t) { // Add a log statement for this exception. final String errorMsg = "Filter Exception: filter=" + filter.filterName() + ", request-info=" + inMesg.getInfoForLogging() + ", msg=" + String.valueOf(t.getMessage()); if (t instanceof ZuulException && !((ZuulException) t).shouldLogAsError()) { LOG.warn(errorMsg); } else { LOG.error(errorMsg, t); } // Store this filter error for possible future use. But we still continue with next filter in the chain. final SessionContext zuulCtx = inMesg.getContext(); zuulCtx.getFilterErrors().add(new FilterError(filter.filterName(), filter.filterType().toString(), t)); if (zuulCtx.debugRouting()) { Debug.addRoutingDebug(zuulCtx, "Running Filter failed " + filter.filterName() + " type:" + filter.filterType() + " order:" + filter.filterOrder() + " " + t.getMessage()); } }
private final void runFilters(final T mesg, final AtomicInteger runningFilterIdx) { T inMesg = mesg; String filterName = "-"; try { Preconditions.checkNotNull(mesg, "Input message"); int i = runningFilterIdx.get(); while (i < filters.length) { final ZuulFilter<T, T> filter = filters[i]; filterName = filter.filterName(); final T outMesg = filter(filter, inMesg); if (outMesg == null) { return; //either async filter or waiting for the message body to be buffered } inMesg = outMesg; i = runningFilterIdx.incrementAndGet(); } //Filter chain has reached its end, pass result to the next stage invokeNextStage(inMesg); } catch (Exception ex) { handleException(inMesg, filterName, ex); } }
protected void recordFilterCompletion(final ExecutionStatus status, final ZuulFilter<I, O> filter, long startTime, final ZuulMessage zuulMesg, final ZuulMessage startSnapshot) { final SessionContext zuulCtx = zuulMesg.getContext(); final long execTime = System.currentTimeMillis() - startTime; if (execTime >= FILTER_EXCESSIVE_EXEC_TIME.get()) { LOG.warn("Filter {} took {} ms to complete! status = {}", filter.filterName(), execTime, status.name()); } // Record the execution summary in context. switch (status) { case FAILED: zuulCtx.addFilterExecutionSummary(filter.filterName(), FAILED.name(), execTime); break; case SUCCESS: zuulCtx.addFilterExecutionSummary(filter.filterName(), SUCCESS.name(), execTime); if (startSnapshot != null) { //debugRouting == true Debug.addRoutingDebug(zuulCtx, "Filter {" + filter.filterName() + " TYPE:" + filter.filterType().toString() + " ORDER:" + filter.filterOrder() + "} Execution time = " + execTime + "ms"); Debug.compareContextState(filter.filterName(), zuulCtx, startSnapshot.getContext()); } break; default: break; } LOG.debug("Filter {} completed with status {}, UUID {}", filter.filterName(), status.name(), zuulMesg.getContext().getUUID()); // Notify configured listener. usageNotifier.notify(filter, status); }
@Override public void filter(final HttpRequestMessage zuulReq) { if (zuulReq.getContext().isCancelled()) { zuulReq.disposeBufferedBody(); logger.debug("Request was cancelled, UUID {}", zuulReq.getContext().getUUID()); return; } final String endpointName = getEndPointName(zuulReq.getContext()); try { Preconditions.checkNotNull(zuulReq, "input message"); final ZuulFilter<HttpRequestMessage, HttpResponseMessage> endpoint = getEndpoint(endpointName, zuulReq); logger.debug("Got endpoint {}, UUID {}", endpoint.filterName(), zuulReq.getContext().getUUID()); setEndpoint(zuulReq, endpoint); final HttpResponseMessage zuulResp = filter(endpoint, zuulReq); if ((zuulResp != null)&&(! (endpoint instanceof ProxyEndpoint))) { //EdgeProxyEndpoint calls invokeNextStage internally logger.debug("Endpoint calling invokeNextStage, UUID {}", zuulReq.getContext().getUUID()); invokeNextStage(zuulResp); } } catch (Exception ex) { handleException(zuulReq, endpointName, ex); } }
LOG.debug("Filter {} waiting for body, UUID {}", filter.filterName(), inMesg.getContext().getUUID()); return null; //wait for whole body to be buffered Debug.addRoutingDebug(inMesg.getContext(), "Filter " + filter.filterType().toString() + " " + filter.filterOrder() + " " + filter.filterName());
@Override public void filter(final HttpRequestMessage zuulReq, final HttpContent chunk) { if (zuulReq.getContext().isCancelled()) { chunk.release(); return; } String endpointName = "-"; try { ZuulFilter<HttpRequestMessage, HttpResponseMessage> endpoint = Preconditions.checkNotNull( getEndpoint(zuulReq), "endpoint"); endpointName = endpoint.filterName(); final HttpContent newChunk = endpoint.processContentChunk(zuulReq, chunk); if (newChunk != null) { //Endpoints do not directly forward content chunks to next stage in the filter chain. zuulReq.bufferBodyContents(newChunk); //deallocate original chunk if necessary if (newChunk != chunk) { chunk.release(); } if (isFilterAwaitingBody(zuulReq) && zuulReq.hasCompleteBody() && !(endpoint instanceof ProxyEndpoint)) { //whole body has arrived, resume filter chain invokeNextStage(filter(endpoint, zuulReq)); } } } catch (Exception ex) { handleException(zuulReq, endpointName, ex); } }
@Override public void filter(final HttpRequestMessage zuulReq) { if (zuulReq.getContext().isCancelled()) { zuulReq.disposeBufferedBody(); logger.debug("Request was cancelled, UUID {}", zuulReq.getContext().getUUID()); return; } final String endpointName = getEndPointName(zuulReq.getContext()); try { Preconditions.checkNotNull(zuulReq, "input message"); final ZuulFilter<HttpRequestMessage, HttpResponseMessage> endpoint = getEndpoint(endpointName, zuulReq); logger.debug("Got endpoint {}, UUID {}", endpoint.filterName(), zuulReq.getContext().getUUID()); setEndpoint(zuulReq, endpoint); final HttpResponseMessage zuulResp = filter(endpoint, zuulReq); if ((zuulResp != null)&&(! (endpoint instanceof ProxyEndpoint))) { //EdgeProxyEndpoint calls invokeNextStage internally logger.debug("Endpoint calling invokeNextStage, UUID {}", zuulReq.getContext().getUUID()); invokeNextStage(zuulResp); } } catch (Exception ex) { handleException(zuulReq, endpointName, ex); } }
for (int i = 0; i < limit; i++) { final ZuulFilter<T, T> filter = filters[i]; filterName = filter.filterName(); if ((! filter.isDisabled()) && (! shouldSkipFilter(inMesg, filter))) { final HttpContent newChunk = filter.processContentChunk(inMesg, chunk);
LOG.debug("Filter {} waiting for body, UUID {}", filter.filterName(), inMesg.getContext().getUUID()); return null; //wait for whole body to be buffered Debug.addRoutingDebug(inMesg.getContext(), "Filter " + filter.filterType().toString() + " " + filter.filterOrder() + " " + filter.filterName());
@Override public void filter(final HttpRequestMessage zuulReq, final HttpContent chunk) { if (zuulReq.getContext().isCancelled()) { chunk.release(); return; } String endpointName = "-"; try { ZuulFilter<HttpRequestMessage, HttpResponseMessage> endpoint = Preconditions.checkNotNull( getEndpoint(zuulReq), "endpoint"); endpointName = endpoint.filterName(); final HttpContent newChunk = endpoint.processContentChunk(zuulReq, chunk); if (newChunk != null) { //Endpoints do not directly forward content chunks to next stage in the filter chain. zuulReq.bufferBodyContents(newChunk); //deallocate original chunk if necessary if (newChunk != chunk) { chunk.release(); } if (isFilterAwaitingBody(zuulReq) && zuulReq.hasCompleteBody() && !(endpoint instanceof ProxyEndpoint)) { //whole body has arrived, resume filter chain invokeNextStage(filter(endpoint, zuulReq)); } } } catch (Exception ex) { handleException(zuulReq, endpointName, ex); } }
for (int i = 0; i < limit; i++) { final ZuulFilter<T, T> filter = filters[i]; filterName = filter.filterName(); if ((! filter.isDisabled()) && (! shouldSkipFilter(inMesg, filter))) { final HttpContent newChunk = filter.processContentChunk(inMesg, chunk);
public ZuulFilterConcurrencyExceededException(ZuulFilter filter, int concurrencyLimit) { super(filter.filterName() + " exceeded concurrency limit of " + concurrencyLimit, true); } }
void putFilter(String sName, ZuulFilter filter, long lastModified) { List<ZuulFilter> list = hashFiltersByType.get(filter.filterType()); if (list != null) { hashFiltersByType.remove(filter.filterType()); //rebuild this list } String nameAndType = filter.filterType() + ":" + filter.filterName(); filtersByNameAndType.put(nameAndType, filter); filterRegistry.put(sName, filter); filterClassLastModified.put(sName, lastModified); }