X-Git-Url: https://gerrit.onap.org/r/gitweb?p=dmaap%2Fdatarouter.git;a=blobdiff_plain;f=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Fprovisioning%2Futils%2FThrottleFilter.java;h=da06f6bbc8b54a986bbc0cc19036fa18bcad8d6e;hp=7f8d7a8c87ed3f2407b70d2615a6ff61d70e770d;hb=6c78b3e6a0a67c73f931337356a172cc69cee0e8;hpb=4261823d84c2b911b68cdf4cb4dc3be429ebe285 diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java index 7f8d7a8c..da06f6bb 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java @@ -24,6 +24,8 @@ package org.onap.dmaap.datarouter.provisioning.utils; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -32,8 +34,6 @@ import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; -import java.util.Vector; - import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -42,11 +42,9 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.log4j.Logger; import org.eclipse.jetty.continuation.Continuation; import org.eclipse.jetty.continuation.ContinuationSupport; -import org.eclipse.jetty.server.AbstractHttpConnection; +import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import org.onap.dmaap.datarouter.provisioning.beans.Parameters; @@ -88,9 +86,9 @@ import org.onap.dmaap.datarouter.provisioning.beans.Parameters; * @version $Id: ThrottleFilter.java,v 1.2 2014/03/12 19:45:41 eby Exp $ */ public class ThrottleFilter extends TimerTask implements Filter { - public static final int DEFAULT_N = 10; - public static final int DEFAULT_M = 5; - public static final String THROTTLE_MARKER = "org.onap.dmaap.datarouter.provisioning.THROTTLE_MARKER"; + private static final int DEFAULT_N = 10; + private static final int DEFAULT_M = 5; + private static final String THROTTLE_MARKER = "org.onap.dmaap.datarouter.provisioning.THROTTLE_MARKER"; private static final String JETTY_REQUEST = "org.eclipse.jetty.server.Request"; private static final long ONE_MINUTE = 60000L; private static final int ACTION_DROP = 0; @@ -98,12 +96,12 @@ public class ThrottleFilter extends TimerTask implements Filter { // Configuration private static boolean enabled = false; // enabled or not - private static int n_requests = 0; // number of requests in M minutes - private static int m_minutes = 0; // sampling period + private static int numRequests = 0; // number of requests in M minutes + private static int samplingPeriod = 0; // sampling period private static int action = ACTION_DROP; // action to take (throttle or drop) - private static Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal"); - private static Map map = new HashMap(); + private static EELFLogger logger = EELFManager.getInstance().getLogger("InternalLog"); + private static Map map = new HashMap<>(); private static final Timer rolex = new Timer(); @Override @@ -121,24 +119,25 @@ public class ThrottleFilter extends TimerTask implements Filter { try { Class.forName(JETTY_REQUEST); String v = p.getValue(); - if (v != null && !v.equals("off")) { + if (v != null && !"off".equals(v)) { String[] pp = v.split(","); if (pp != null) { - n_requests = (pp.length > 0) ? getInt(pp[0], DEFAULT_N) : DEFAULT_N; - m_minutes = (pp.length > 1) ? getInt(pp[1], DEFAULT_M) : DEFAULT_M; - action = (pp.length > 2 && pp[2] != null && pp[2].equalsIgnoreCase("throttle")) ? ACTION_THROTTLE : ACTION_DROP; + numRequests = (pp.length > 0) ? getInt(pp[0], DEFAULT_N) : DEFAULT_N; + samplingPeriod = (pp.length > 1) ? getInt(pp[1], DEFAULT_M) : DEFAULT_M; + action = (pp.length > 2 && pp[2] != null && "throttle".equalsIgnoreCase(pp[2])) ? ACTION_THROTTLE : ACTION_DROP; enabled = true; // ACTION_THROTTLE is not currently working, so is not supported if (action == ACTION_THROTTLE) { action = ACTION_DROP; logger.info("Throttling is not currently supported; action changed to DROP"); } - logger.info("ThrottleFilter is ENABLED for /publish requests; N=" + n_requests + ", M=" + m_minutes + ", Action=" + action); + logger.info("ThrottleFilter is ENABLED for /publish requests; N=" + numRequests + ", M=" + samplingPeriod + + ", Action=" + action); return; } } } catch (ClassNotFoundException e) { - logger.warn("Class " + JETTY_REQUEST + " is not available; this filter requires Jetty."); + logger.warn("Class " + JETTY_REQUEST + " is not available; this filter requires Jetty.", e); } } logger.info("ThrottleFilter is DISABLED for /publish requests."); @@ -174,28 +173,30 @@ public class ThrottleFilter extends TimerTask implements Filter { public void dropFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { - int rate = getRequestRate((HttpServletRequest) request); - if (rate >= n_requests) { + int rate = getRequestRate(request); + if (rate >= numRequests) { // drop request - only works under Jetty - String m = String.format("Dropping connection: %s %d bad connections in %d minutes", getConnectionId((HttpServletRequest) request), rate, m_minutes); + String m = String.format("Dropping connection: %s %d bad connections in %d minutes", getConnectionId(request), rate, + samplingPeriod); logger.info(m); - Request base_request = (request instanceof Request) + Request baseRequest = (request instanceof Request) ? (Request) request - : AbstractHttpConnection.getCurrentConnection().getRequest(); - base_request.getConnection().getEndPoint().close(); + : HttpConnection.getCurrentConnection().getHttpChannel().getRequest(); + baseRequest.getHttpChannel().getEndPoint().close(); } else { chain.doFilter(request, response); } } - public void throttleFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + private void throttleFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // throttle request - String id = getConnectionId((HttpServletRequest) request); - int rate = getRequestRate((HttpServletRequest) request); + String id = getConnectionId(request); + int rate = getRequestRate(request); Object results = request.getAttribute(THROTTLE_MARKER); - if (rate >= n_requests && results == null) { - String m = String.format("Throttling connection: %s %d bad connections in %d minutes", getConnectionId((HttpServletRequest) request), rate, m_minutes); + if (rate >= numRequests && results == null) { + String m = String.format("Throttling connection: %s %d bad connections in %d minutes", + getConnectionId(request), rate, samplingPeriod); logger.info(m); Continuation continuation = ContinuationSupport.getContinuation(request); continuation.suspend(); @@ -214,22 +215,22 @@ public class ThrottleFilter extends TimerTask implements Filter { } } - private Map> suspended_requests = new HashMap>(); + private Map> suspendedRequests = new HashMap<>(); private void register(String id, Continuation continuation) { - synchronized (suspended_requests) { - List list = suspended_requests.get(id); + synchronized (suspendedRequests) { + List list = suspendedRequests.get(id); if (list == null) { - list = new ArrayList(); - suspended_requests.put(id, list); + list = new ArrayList<>(); + suspendedRequests.put(id, list); } list.add(continuation); } } private void resume(String id) { - synchronized (suspended_requests) { - List list = suspended_requests.get(id); + synchronized (suspendedRequests) { + List list = suspendedRequests.get(id); if (list != null) { // when the waited for event happens Continuation continuation = list.remove(0); @@ -248,7 +249,7 @@ public class ThrottleFilter extends TimerTask implements Filter { */ private int getRequestRate(HttpServletRequest request) { String expecthdr = request.getHeader("Expect"); - if (expecthdr != null && expecthdr.equalsIgnoreCase("100-continue")) + if (expecthdr != null && "100-continue".equalsIgnoreCase(expecthdr)) return 0; String key = getConnectionId(request); @@ -258,24 +259,23 @@ public class ThrottleFilter extends TimerTask implements Filter { cnt = new Counter(); map.put(key, cnt); } - int n = cnt.getRequestRate(); - return n; + return cnt.getRequestRate(); } } public class Counter { - private List times = new Vector(); // a record of request times + private List times = new ArrayList<>(); // a record of request times public int prune() { try { - long n = System.currentTimeMillis() - (m_minutes * ONE_MINUTE); + long n = System.currentTimeMillis() - (samplingPeriod * ONE_MINUTE); long t = times.get(0); while (t < n) { times.remove(0); t = times.get(0); } } catch (IndexOutOfBoundsException e) { - // ignore + logger.trace("Exception: " + e.getMessage(), e); } return times.size(); } @@ -302,8 +302,7 @@ public class ThrottleFilter extends TimerTask implements Filter { if (ix < 0 || ix == path.length() - 1) return -2; try { - int feedid = Integer.parseInt(path.substring(0, ix)); - return feedid; + return Integer.parseInt(path.substring(0, ix)); } catch (NumberFormatException e) { return -1; }