From 3742102c5b7be5597bd52e9516e5a5d4f40af643 Mon Sep 17 00:00:00 2001 From: Frankie Wu Date: Tue, 7 Feb 2012 12:03:06 +0800 Subject: [PATCH] adjust ip model --- cat-consumer/pom.xml | 2 +- .../dianping/cat/consumer/ip/IpAnalyzer.java | 74 +++++++++++++++---- .../META-INF/dal/model/ip-codegen.xml | 10 +-- .../resources/META-INF/dal/model/ip-model.xml | 10 +-- .../com/dianping/cat/consumer/ip/ip.xml | 19 ++--- .../dianping/cat/report/page/ip/Handler.java | 37 +++++++--- .../dianping/cat/report/page/ip/Model.java | 10 +++ .../src/main/webapp/WEB-INF/tags/report.tag | 4 +- cat-home/src/main/webapp/css/report.css | 25 ++++++- cat-home/src/main/webapp/jsp/report/ip.jsp | 20 +++-- 10 files changed, 152 insertions(+), 59 deletions(-) diff --git a/cat-consumer/pom.xml b/cat-consumer/pom.xml index 06c2e32b7..7d7b96375 100644 --- a/cat-consumer/pom.xml +++ b/cat-consumer/pom.xml @@ -34,7 +34,7 @@ com.site.maven.plugins maven-codegen-plugin - 1.0.5 + 1.0.6 generate failure report model diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/ip/IpAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/ip/IpAnalyzer.java index e1394cbd0..15bde6b24 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/ip/IpAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/ip/IpAnalyzer.java @@ -1,6 +1,9 @@ package com.dianping.cat.consumer.ip; +import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,9 +18,11 @@ import com.dianping.cat.message.spi.AbstractMessageAnalyzer; import com.dianping.cat.message.spi.MessageTree; public class IpAnalyzer extends AbstractMessageAnalyzer { + private static final String TOKEN = "RemoteIP="; + private Map m_reports = new HashMap(); - private static final String TOKEN = "RemoteIP="; + private int m_lastPhase; private IpReport findOrCreateReport(String domain) { IpReport report = m_reports.get(domain); @@ -41,20 +46,31 @@ public class IpAnalyzer extends AbstractMessageAnalyzer { return null; } - public IpReport generate(String domain) { - IpReport report = null; + public List getDomains() { + List domains = new ArrayList(m_reports.keySet()); - if (domain == null) { - if (!m_reports.isEmpty()) { - domain = m_reports.keySet().iterator().next(); + Collections.sort(domains, new Comparator() { + @Override + public int compare(String d1, String d2) { + if (d1.equals("Cat")) { + return 1; + } + + return d1.compareTo(d2); } - } + }); + return domains; + } + + public IpReport generate(String domain) { if (domain != null) { - report = m_reports.get(domain); - } + IpReport report = m_reports.get(domain); - return report; + return report; + } else { + return null; + } } private String getIpAddress(Transaction root) { @@ -103,10 +119,42 @@ public class IpAnalyzer extends AbstractMessageAnalyzer { int minute = cal.get(Calendar.MINUTE); IpReport report = findOrCreateReport(domain); - Ip ip = report.findOrCreateIp(address); - Period period = ip.findOrCreatePeriod(minute); + Period period = report.findOrCreatePeriod(minute); + Ip ip = period.findOrCreateIp(address); + + ip.incCount(); + + clearLastPhase(); + } + } + + private void clearLastPhase() { + Calendar cal = Calendar.getInstance(); + int minute = cal.get(Calendar.MINUTE); + int currentPhase = minute / 20; // 0, 1, 2 + + if (m_lastPhase != currentPhase) { + int baseIndex = m_lastPhase * 20; + List domains = new ArrayList(); + + for (Map.Entry e : m_reports.entrySet()) { + IpReport report = e.getValue(); + Map periods = report.getPeriods(); + + for (int i = 0; i < 20; i++) { + periods.remove(baseIndex + i); + } + + if (periods.isEmpty()) { + domains.add(e.getKey()); + } + } + + for (String domain : domains) { + m_reports.remove(domain); + } - period.incValue(); + m_lastPhase = currentPhase; } } diff --git a/cat-consumer/src/main/resources/META-INF/dal/model/ip-codegen.xml b/cat-consumer/src/main/resources/META-INF/dal/model/ip-codegen.xml index 4e553637d..ddea988d6 100644 --- a/cat-consumer/src/main/resources/META-INF/dal/model/ip-codegen.xml +++ b/cat-consumer/src/main/resources/META-INF/dal/model/ip-codegen.xml @@ -4,15 +4,15 @@ - - - - - + + + + + diff --git a/cat-consumer/src/main/resources/META-INF/dal/model/ip-model.xml b/cat-consumer/src/main/resources/META-INF/dal/model/ip-model.xml index 2b88ca759..e514c3bac 100644 --- a/cat-consumer/src/main/resources/META-INF/dal/model/ip-model.xml +++ b/cat-consumer/src/main/resources/META-INF/dal/model/ip-model.xml @@ -2,14 +2,14 @@ + + + + - - - - - + diff --git a/cat-consumer/src/test/resources/com/dianping/cat/consumer/ip/ip.xml b/cat-consumer/src/test/resources/com/dianping/cat/consumer/ip/ip.xml index c40c52478..54857a958 100644 --- a/cat-consumer/src/test/resources/com/dianping/cat/consumer/ip/ip.xml +++ b/cat-consumer/src/test/resources/com/dianping/cat/consumer/ip/ip.xml @@ -1,15 +1,8 @@ - - - - - - - - - - - - - + + + + + + diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/ip/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/ip/Handler.java index 7ae62229e..f71b4a71e 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/ip/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/ip/Handler.java @@ -5,7 +5,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.servlet.ServletException; @@ -51,20 +53,29 @@ public class Handler implements PageHandler { if (analyzer != null) { Payload payload = ctx.getPayload(); String domain = payload.getDomain(); + List domains = analyzer.getDomains(); + + if (domain == null && domains.size() > 0) { + domain = domains.get(0); + payload.setDomain(domain); + } report = analyzer.generate(domain); + model.setDomains(domains); } else { report = new IpReport(); } Calendar cal = Calendar.getInstance(); int minute = cal.get(Calendar.MINUTE); - List models = new ArrayList(); + Map models = new HashMap(); DisplayModelBuilder builder = new DisplayModelBuilder(models, minute); report.accept(builder); // prepare display model - Collections.sort(models, new Comparator() { + List displayModels = new ArrayList(models.values()); + + Collections.sort(displayModels, new Comparator() { @Override public int compare(DisplayModel m1, DisplayModel m2) { return m2.getLastFifteen() - m1.getLastFifteen(); // desc @@ -72,33 +83,39 @@ public class Handler implements PageHandler { }); model.setReport(report); - model.setDisplayModels(models); + model.setDisplayModels(displayModels); m_jspViewer.view(ctx, model); } static class DisplayModelBuilder extends BaseVisitor { private int m_minute; - private List m_models; + private Map m_models; - private DisplayModel m_model; + private Period m_period; - public DisplayModelBuilder(List models, int minute) { + public DisplayModelBuilder(Map models, int minute) { m_models = models; m_minute = minute; } @Override public void visitIp(Ip ip) { - m_model = new DisplayModel(ip.getAddress()); - m_models.add(m_model); + String address = ip.getAddress(); + DisplayModel model = m_models.get(address); + + if (model == null) { + model = new DisplayModel(address); + m_models.put(address, model); + } - super.visitIp(ip); + model.process(m_minute, m_period.getMinute(), ip.getCount()); } @Override public void visitPeriod(Period period) { - m_model.process(m_minute, period.getMinute(), period.getValue()); + m_period = period; + super.visitPeriod(period); } } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/ip/Model.java b/cat-home/src/main/java/com/dianping/cat/report/page/ip/Model.java index 8d68d1b09..8646e679b 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/ip/Model.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/ip/Model.java @@ -11,6 +11,8 @@ public class Model extends ViewModel { private List m_displayModels; + private List m_domains; + public Model(Context ctx) { super(ctx); } @@ -24,6 +26,10 @@ public class Model extends ViewModel { return m_displayModels; } + public List getDomains() { + return m_domains; + } + public IpReport getReport() { return m_report; } @@ -36,6 +42,10 @@ public class Model extends ViewModel { m_displayModels = models; } + public void setDomains(List domains) { + m_domains = domains; + } + public void setReport(IpReport report) { m_report = report; } diff --git a/cat-home/src/main/webapp/WEB-INF/tags/report.tag b/cat-home/src/main/webapp/WEB-INF/tags/report.tag index 88ee6a686..32c99e8a1 100644 --- a/cat-home/src/main/webapp/WEB-INF/tags/report.tag +++ b/cat-home/src/main/webapp/WEB-INF/tags/report.tag @@ -5,7 +5,7 @@ <%@ attribute name="title"%> <%@ attribute name="timestamp"%> <%@ attribute name="domain" fragment="true"%> -<%@ attribute name="time" fragment="true"%> +<%@ attribute name="nav" fragment="true"%> <%@ attribute name="subtitle" fragment="true"%> @@ -23,7 +23,7 @@ - + diff --git a/cat-home/src/main/webapp/css/report.css b/cat-home/src/main/webapp/css/report.css index a6306c332..27aa82abf 100644 --- a/cat-home/src/main/webapp/css/report.css +++ b/cat-home/src/main/webapp/css/report.css @@ -22,18 +22,37 @@ width: 100%; } -.report .navbar .time { +.report .navbar .domain { + text-align: left; + font-size: small; + font-weight: bold; +} + +.report .navbar .domain A { + text-decoration: none; + color: blue; +} + +.report .navbar .domain .current { + color: black; +} + +.report .navbar .domain A:hover { + color: yellow; +} + +.report .navbar .nav { text-align: right; font-size: small; font-weight: bold; } -.report .navbar .time A { +.report .navbar .nav A { text-decoration: none; color: blue; } -.report .navbar .time A:hover { +.report .navbar .nav A:hover { color: yellow; } diff --git a/cat-home/src/main/webapp/jsp/report/ip.jsp b/cat-home/src/main/webapp/jsp/report/ip.jsp index 8c8952f25..f8487b559 100644 --- a/cat-home/src/main/webapp/jsp/report/ip.jsp +++ b/cat-home/src/main/webapp/jsp/report/ip.jsp @@ -6,12 +6,21 @@ - + - Domain: ${payload.domain} +
+ +  [ + +  ${domain}  +  ${domain}  + + ]  + +
- + [ -1d ] [ -2h ] [ -1h ] [ +1h ] [ +2h ] [ +1d ] @@ -30,10 +39,7 @@
- -<%-- -${model.reportInJson} - --%> + -- GitLab