提交 b6961f7f 编写于 作者: Y yong.you

refator code

上级 a191dddd
package com.dianping.cat.consumer.browser;
import java.util.List;
import java.util.StringTokenizer;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.analysis.AbstractMessageAnalyzer;
import com.dianping.cat.consumer.browser.model.entity.Browser;
import com.dianping.cat.consumer.browser.model.entity.BrowserReport;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.message.spi.MessageTree;
import com.dianping.cat.service.ReportManager;
public class BrowserAnalyzer extends AbstractMessageAnalyzer<BrowserReport>
implements LogEnabled {
public static final String ID = "browser";
@Inject(ID)
private ReportManager<BrowserReport> m_reportManager;
public BrowserReport update(BrowserReport report, String[] agentToken) {
for (String s : agentToken) {
for (String browser : BrowsersAndOses.BROWSERS) {
int index;
index = s.toUpperCase().indexOf(browser.toUpperCase());
if (index >= 0) {
String subS = s.substring(index);
String[] browserAndVersionString = split(subS, "/");
Browser b = report.findOrCreateDomainDetail("Cat")
.findOrCreateBrowser(browserAndVersionString[0]);
b.setCount(b.getCount() + 1);
if (browserAndVersionString.length >= 2) {
int i;
String version = browserAndVersionString[1];
for (i = 0; (i < version.length())
&& (version.charAt(i) >= '0'
&& version.charAt(i) <= '9' || version
.charAt(i) == '.'); i++)
;
version = version.substring(0, i);
b.findOrCreateBrowserVersion(version).setCount(
b.findOrCreateBrowserVersion(version)
.getCount() + 1);
}
}
}
for (String os : BrowsersAndOses.OSES) {
int index;
index = s.toUpperCase().indexOf(os.toUpperCase());
if (index >= 0) {
report.findOrCreateDomainDetail("Cat")
.findOrCreateOs(os).setCount(report.findOrCreateDomainDetail("Cat")
.findOrCreateOs(os).getCount() + 1);
}
}
}
return report;
}
public String[] splitAgent(String message) {
return null;
}
private String[] split(String message, String divisionChar) {
StringTokenizer tokenizer = new StringTokenizer(message, divisionChar);
int i = 0;
String[] string = new String[tokenizer.countTokens()];// 动态的决定数组的长度
while (tokenizer.hasMoreTokens()) {
string[i] = new String();
string[i] = tokenizer.nextToken();
i++;
}
return string;// 返回字符串数组
}
protected String parseValue(final String key, final String data) {
int len = data == null ? 0 : data.length();
int keyLen = key.length();
StringBuilder name = new StringBuilder();
StringBuilder value = new StringBuilder();
boolean inName = true;
for (int i = 0; i < len; i++) {
char ch = data.charAt(i);
switch (ch) {
case '&':
if (name.length() == keyLen && name.toString().equals(key)) {
return value.toString();
}
inName = true;
name.setLength(0);
value.setLength(0);
break;
case '=':
if (inName) {
inName = false;
} else {
value.append(ch);
}
break;
default:
if (inName) {
name.append(ch);
} else {
value.append(ch);
}
break;
}
}
if (name.length() == keyLen && name.toString().equals(key)) {
return value.toString();
}
return null;
}
@Override
public void enableLogging(Logger logger) {
}
@Override
public BrowserReport getReport(String domain) {
return null;
}
@Override
protected void process(MessageTree tree) {
Message message = tree.getMessage();
if (message instanceof Transaction) {
String type = message.getType();
if ("URL".equals(type)) {
List<Message> children = ((Transaction) message).getChildren();
for (Message child : children) {
String childType = child.getType();
String childName = child.getName();
BrowserReport report = m_reportManager.getHourlyReport(
getStartTime(), "Cat", true);
if ("URL".equals(childType)
&& ("URL.Server".equals(childName) || "ClientInfo"
.equals(childName))) {
String data = (String) child.getData();
updateBrowserReport(report, data);
return;
}
}
}
}
}
private void updateBrowserReport(BrowserReport report, String data) {
}
public class BrowserAndVersion {
private String browser;
private String browserVersion;
public String getBrowser() {
return browser;
}
public void setBrowser(String browser) {
this.browser = browser;
}
public String getBrowserVersion() {
return browserVersion;
}
public void setBrowserVersion(String browserVersion) {
this.browserVersion = browserVersion;
}
}
private static class BrowsersAndOses {
public static final String OSES[] = { "Windows NT", "Linux",
"WindowsMobile", "Android", "Mac OS" };
public static final String BROWSERS[] = { "Chrome", "Maxthon",
"AppleWebKit", "QQBrowser", "UC Browser", "Safari",
"LBBROWSER", "QQ Browser", "UCBrowser" };
}
@Override
public void doCheckpoint(boolean atEnd) {
}
}
package com.dianping.cat.consumer.browser;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.consumer.browser.BrowserReportMerger;
import com.dianping.cat.consumer.browser.model.entity.BrowserReport;
import com.dianping.cat.consumer.browser.model.transform.DefaultSaxParser;
import com.dianping.cat.consumer.browser.model.transform.DefaultNativeBuilder;
import com.dianping.cat.consumer.browser.model.transform.DefaultNativeParser;
import com.dianping.cat.service.ReportDelegate;
import com.dianping.cat.task.TaskManager;
import com.dianping.cat.task.TaskManager.TaskProlicy;
public class BrowserDelegate implements ReportDelegate<BrowserReport> {
@Inject
private TaskManager m_taskManager;
@Override
public void afterLoad(Map<String, BrowserReport> reports) {
}
@Override
public void beforeSave(Map<String, BrowserReport> reports) {
for (BrowserReport report : reports.values()) {
Set<String> domainNames = report.getDomainNames();
domainNames.clear();
domainNames.addAll(reports.keySet());
}
}
@Override
public String buildXml(BrowserReport report) {
return report.toString();
}
@Override
public boolean createHourlyTask(BrowserReport report) {
return m_taskManager.createTask(report.getStartTime(), report.getDomain(), BrowserAnalyzer.ID, TaskProlicy.ALL_EXCLUED_HOURLY);
}
@Override
public String getDomain(BrowserReport report) {
return report.getDomain();
}
@Override
public BrowserReport makeReport(String domain, long startTime, long duration) {
BrowserReport report = new BrowserReport(domain);
report.setStartTime(new Date(startTime));
report.setEndTime(new Date(startTime + duration - 1));
return report;
}
@Override
public BrowserReport mergeReport(BrowserReport old, BrowserReport other) {
BrowserReportMerger merger = new BrowserReportMerger(old);
other.accept(merger);
return old;
}
@Override
public BrowserReport parseXml(String xml) throws Exception {
BrowserReport report = DefaultSaxParser.parse(xml);
return report;
}
@Override
public byte[] buildBinary(BrowserReport report) {
return DefaultNativeBuilder.build(report);
}
@Override
public BrowserReport parseBinary(byte[] bytes) {
return DefaultNativeParser.parse(bytes);
}
}
package com.dianping.cat.consumer.browser;
import com.dianping.cat.consumer.browser.model.entity.Browser;
import com.dianping.cat.consumer.browser.model.entity.BrowserReport;
import com.dianping.cat.consumer.browser.model.entity.BrowserVersion;
import com.dianping.cat.consumer.browser.model.entity.DomainDetail;
import com.dianping.cat.consumer.browser.model.entity.Os;
import com.dianping.cat.consumer.browser.model.transform.DefaultMerger;
public class BrowserReportMerger extends DefaultMerger {
public BrowserReportMerger(BrowserReport browserReport) {
super(browserReport);
}
@Override
protected void mergeDomainDetail(DomainDetail old, DomainDetail other) {
}
@Override
protected void mergeBrowser(Browser old, Browser browser) {
old.setCount(old.getCount() + browser.getCount());
}
@Override
protected void mergeOs(Os old, Os os) {
old.setCount(old.getCount() + os.getCount());
}
@Override
protected void mergeBrowserVersion(BrowserVersion old, BrowserVersion browserVersion) {
old.setCount(old.getCount() + browserVersion.getCount());
}
@Override
public void visitBrowserReport(BrowserReport browserReport) {
BrowserReport oldReport = getBrowserReport();
oldReport.setDomain(browserReport.getDomain());
oldReport.setStartTime(browserReport.getStartTime());
oldReport.setEndTime(browserReport.getEndTime());
oldReport.getDomainNames().addAll(browserReport.getDomainNames());
super.visitBrowserReport(browserReport);
}
}
......@@ -5,7 +5,6 @@ import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import com.dianping.cat.consumer.advanced.MetricAnalyzerTest;
import com.dianping.cat.consumer.browser.BrowserReportMergerTest;
import com.dianping.cat.consumer.cross.CrossAnalyzerTest;
import com.dianping.cat.consumer.cross.CrossInfoTest;
import com.dianping.cat.consumer.cross.CrossReportMergerTest;
......@@ -34,8 +33,6 @@ MatrixReportMergerTest.class,
DatabaseParserTest.class,
BrowserReportMergerTest.class,
CrossAnalyzerTest.class,
SqlAnalyzerTest.class,
......
package com.dianping.cat.consumer.browser;
import org.junit.Assert;
import org.junit.Test;
import org.unidal.lookup.ComponentTestCase;
import com.dianping.cat.consumer.browser.model.entity.BrowserReport;
public class BrowserAnalyzerTest extends ComponentTestCase {
@SuppressWarnings("deprecation")
@Test
public void splitAgentTest() throws Exception {
BrowserAnalyzer browserAnalyzer = new BrowserAnalyzer();
String s = "Agent=Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)";
String[] strings = browserAnalyzer.splitAgent(s);
String[] supposed = { "Mozilla/4.0", "compatible", "MSIE 8.0",
"Windows NT 5.1", "Trident/4.0", ".NET CLR 2.0.50727" };
Assert.assertEquals("Check the split result!", strings, supposed);
}
@Test
public void updateTest() throws Exception {
BrowserAnalyzer browserAnalyzer = new BrowserAnalyzer();
String s = "Agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.4.2.1000 Chrome/18.0.966.0 Safari/535.12";
BrowserReport actual = browserAnalyzer
.update(new BrowserReport("Cat"), browserAnalyzer.splitAgent(s));
System.out.println(actual);
}
@Test
public void updateBrowserReportTest() throws Exception {
BrowserAnalyzer browserAnalyzer = new BrowserAnalyzer();
String s1 = "Agent=Mozilla/5.0 (Linux; U; Android 4.0.3; zh-CN; WM8850-mid Build/IML74K) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.2.4.329 U3/0.8.0 Mobile Safari/534.31";
String s2 = "Agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.4.2.1000 Chrome/18.0.966.0 Safari/535.12";
BrowserReport report1 = browserAnalyzer
.update(new BrowserReport("Cat"), browserAnalyzer.splitAgent(s1));
report1 = browserAnalyzer
.update(report1, browserAnalyzer.splitAgent(s2));
// Assert.assertEquals("Check the split result!", report1.toString()
// .replace("\r", ""), supposed.toString().replace("\r", ""));
}
}
package com.dianping.cat.consumer.browser;
import org.junit.Assert;
import org.junit.Test;
import org.unidal.lookup.ComponentTestCase;
import org.unidal.helper.Files;
import com.dianping.cat.consumer.browser.model.entity.BrowserReport;
import com.dianping.cat.consumer.browser.model.transform.DefaultSaxParser;
public class BrowserReportMergerTest extends ComponentTestCase {
@Test
public void mergeDomainTest() throws Exception{
String oldXml = Files.forIO().readFrom(getClass().getResourceAsStream("old.xml"), "utf-8");
String newXml = Files.forIO().readFrom(getClass().getResourceAsStream("new.xml"), "utf-8");
BrowserReport reportOld = DefaultSaxParser.parse(oldXml);
BrowserReport reportNew = DefaultSaxParser.parse(newXml);
String expected = Files.forIO().readFrom(getClass().getResourceAsStream("result.xml"), "utf-8");
BrowserReport result = DefaultSaxParser.parse(expected);
BrowserReportMerger merger = new BrowserReportMerger(new BrowserReport(reportOld.getDomain()));
reportOld.accept(merger);
reportNew.accept(merger);
Assert.assertEquals("Check the merge result!", result.toString(), merger.getBrowserReport().toString());
}
}
......@@ -90,8 +90,9 @@ public abstract class AbstractReportModel<A extends Action, M extends ActionCont
int hour = cal.get(Calendar.HOUR_OF_DAY);
if (hour < 10) {
return "0" + Integer.toString(hour);
} else
} else {
return Integer.toString(hour);
}
}
// required by report tag
......
......@@ -40,7 +40,7 @@ public class CaseBuilder {
return case_;
} else {
throw new NullPointerException("Cannot builder case due to the abtest , abtestRun or groupStrategy is null");
throw new RuntimeException("Cannot builder case due to the abtest , abtestRun or groupStrategy is null");
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册