From 6c746cbeadbb4d24b799de3eb0ab76648f973b2e Mon Sep 17 00:00:00 2001 From: ainilife Date: Fri, 31 May 2013 17:11:13 +0800 Subject: [PATCH] Bug Fix & Cat log --- .../abtest/sample/ABTestSampleServlet.java | 6 +-- .../abtest/sample/IPDistributionStrategy.java | 2 +- .../internal/DefaultABTestContextManager.java | 1 - .../internal/DefaultABTestEntityManager.java | 4 ++ .../com/dianping/cat/servlet/CatFilter.java | 46 ++++++++++++++----- 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/abtest-sample/src/main/java/com/dianping/abtest/sample/ABTestSampleServlet.java b/abtest-sample/src/main/java/com/dianping/abtest/sample/ABTestSampleServlet.java index 9b7d311b0..2bddb341b 100644 --- a/abtest-sample/src/main/java/com/dianping/abtest/sample/ABTestSampleServlet.java +++ b/abtest-sample/src/main/java/com/dianping/abtest/sample/ABTestSampleServlet.java @@ -20,18 +20,18 @@ public class ABTestSampleServlet extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (m_abtest.isGroupA()) { - RequestDispatcher rd = getServletContext().getRequestDispatcher("/index2.jsp"); + RequestDispatcher rd = getServletContext().getRequestDispatcher("/index1.jsp"); rd.forward(request, response); // Cat.logMetric(...); } else { - RequestDispatcher rd = getServletContext().getRequestDispatcher("/index1.jsp"); + RequestDispatcher rd = getServletContext().getRequestDispatcher("/index2.jsp"); rd.forward(request, response); // Cat.logMetric(...); } } public static enum MyABTestId implements ABTestId { - CASE1(2); + CASE1(11); private int m_id; diff --git a/abtest-sample/src/main/java/com/dianping/abtest/sample/IPDistributionStrategy.java b/abtest-sample/src/main/java/com/dianping/abtest/sample/IPDistributionStrategy.java index dc8b67637..2f3b2f6e3 100644 --- a/abtest-sample/src/main/java/com/dianping/abtest/sample/IPDistributionStrategy.java +++ b/abtest-sample/src/main/java/com/dianping/abtest/sample/IPDistributionStrategy.java @@ -52,7 +52,7 @@ public class IPDistributionStrategy implements ABTestGroupStrategy { } if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { ip = req.getRemoteAddr(); - if(ip.equals("127.0.0.1") && ip.startsWith("0:0:0:0:0:0:0:1")){ + if(ip.equals("127.0.0.1") || ip.startsWith("0:0:0:0:0:0:0:1")){ ip = IPUtils.getFirstNoLoopbackIP4Address(); } } diff --git a/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java b/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java index b410690e9..4fa02ead9 100644 --- a/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java +++ b/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java @@ -38,7 +38,6 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe ABTestEntity entity = m_entityManager.getEntity(testId); ctx = createContext(entity, entry.getHttpServletRequest()); - map.put(id, ctx); } diff --git a/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java b/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java index 0d6cb5521..b106d4858 100644 --- a/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java +++ b/cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java @@ -29,6 +29,10 @@ public class DefaultABTestEntityManager extends ContainerHolder implements ABTes entity.setDisabled(true); m_repository.getEntities().put(id.getValue(), entity); + + StringBuilder sb = new StringBuilder(); + sb.append("id ").append(id.getValue()).append(" doesn't exsit"); + Cat.getProducer().logEvent("ABTest.IDMiss", "id-miss", sb.toString(), ""); } return entity; diff --git a/cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java b/cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java index ea48033cd..175c85116 100644 --- a/cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java +++ b/cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java @@ -25,22 +25,32 @@ public class CatFilter implements Filter { } @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, + ServletException { HttpServletRequest req = (HttpServletRequest) request; - String sessionToken = getSessionIdFromCookie(req); + boolean isRoot = !Cat.getManager().hasContext(); - // setup for thread local data - Cat.setup(sessionToken); - ABTestManager.onRequestBegin(req); + if (isRoot) { + String sessionToken = getSessionIdFromCookie(req); + Cat.setup(sessionToken); + } MessageProducer cat = Cat.getProducer(); - Transaction t = cat.newTransaction(CatConstants.TYPE_URL, getOriginalUrl(request)); + Transaction t = null; + + if (isRoot) { + t = Cat.newTransaction(getTypeName(), getOriginalUrl(request)); + logRequestClientInfo(cat, req); + ABTestManager.onRequestBegin(req); + } else { + t = Cat.newTransaction(getTypeName() + ".Forward", getOriginalUrl(request)); + } + - logRequestClientInfo(cat, req); logRequestPayload(cat, req); try { - chain.doFilter(request, response); + doNextFilter(request, response, chain); Object catStatus = request.getAttribute("cat-state"); if (catStatus != null) { @@ -66,11 +76,18 @@ public class CatFilter implements Filter { throw e; } finally { t.complete(); - Cat.reset(); - ABTestManager.onRequestEnd(); + if (isRoot) { + Cat.reset(); + ABTestManager.onRequestEnd(); + } } } + protected void doNextFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, + ServletException { + chain.doFilter(request, response); + } + protected String getOriginalUrl(ServletRequest request) { return ((HttpServletRequest) request).getRequestURI(); } @@ -89,6 +106,10 @@ public class CatFilter implements Filter { return null; } + protected String getTypeName() { + return CatConstants.TYPE_URL; + } + @Override public void init(FilterConfig filterConfig) throws ServletException { } @@ -112,7 +133,7 @@ public class CatFilter implements Filter { sb.append("&Referer=").append(req.getHeader("referer")); sb.append("&Agent=").append(req.getHeader("user-agent")); - cat.logEvent("URL", "ClientInfo", Message.SUCCESS, sb.toString()); + cat.logEvent(getTypeName(), "ClientInfo", Message.SUCCESS, sb.toString()); } protected void logRequestPayload(MessageProducer cat, HttpServletRequest req) { @@ -127,6 +148,7 @@ public class CatFilter implements Filter { sb.append('?').append(qs); } - cat.logEvent(CatConstants.TYPE_URL, CatConstants.NAME_PAYLOAD, Event.SUCCESS, sb.toString()); + cat.logEvent(getTypeName(), CatConstants.NAME_PAYLOAD, Event.SUCCESS, sb.toString()); } } + -- GitLab