提交 ac3a7cd4 编写于 作者: 曾伟伟

app data collect

上级 824801a1
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>1.0.5</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>broker-service</artifactId>
<name>broker-service</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.unidal.eunit</groupId>
<artifactId>EunitTestFwk</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>foundation-service</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>web-framework</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>test-framework</artifactId>
<version>2.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>dal-jdbc</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.google.code.javaparser</groupId>
<artifactId>javaparser</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>codegen-maven-plugin</artifactId>
<version>2.0.9</version>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.broker.build.ComponentsConfigurator</className>
<env>dev</env>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warName>broker-service-${env}-${version}</warName>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/cat</contextPath>
<defaultsDescriptor>src/main/webapp/WEB-INF/web.xml</defaultsDescriptor>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>2281</port>
<maxIdleTime>500000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<packaging>war</packaging>
<env>alpha</env>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>1.0.5</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>broker-service</artifactId>
<name>broker-service</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.unidal.eunit</groupId>
<artifactId>EunitTestFwk</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>foundation-service</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>web-framework</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>test-framework</artifactId>
<version>2.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>dal-jdbc</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.google.code.javaparser</groupId>
<artifactId>javaparser</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>codegen-maven-plugin</artifactId>
<version>2.0.9</version>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.broker.build.ComponentsConfigurator</className>
<env>dev</env>
</configuration>
</execution>
<execution>
<id>generate dal model files</id>
<phase>generate-sources</phase>
<goals>
<goal>dal-model</goal>
</goals>
<configuration>
<manifest><![CDATA[
${basedir}/src/main/resources/META-INF/dal/model/appData-manifest.xml,
]]></manifest>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warName>broker-service-${env}-${version}</warName>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/cat</contextPath>
<defaultsDescriptor>src/main/webapp/WEB-INF/web.xml</defaultsDescriptor>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>2281</port>
<maxIdleTime>500000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<packaging>war</packaging>
<env>alpha</env>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
</project>
package com.dianping.cat.broker.api.app;
import java.util.concurrent.ConcurrentHashMap;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import com.dianping.cat.Cat;
import com.dianping.cat.service.appData.entity.AppData;
public class AppDataConsumer implements Initializable, LogEnabled {
public static final long DURATION = 5 * 60 * 1000L;
private AppDataQueue m_appDataQueue;
private long m_dataLoss;
private Logger m_logger;
private ConcurrentHashMap<Long, BucketHandler> m_tasks;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
public void enqueue(AppData appData) {
m_appDataQueue.offer(appData);
}
public long getDataLoss() {
return m_dataLoss;
}
@Override
public void initialize() throws InitializationException {
m_dataLoss = 0;
m_appDataQueue = new AppDataQueue();
m_tasks = new ConcurrentHashMap<Long, BucketHandler>();
AppDataDispatcherThread appDataDispatcherThread = new AppDataDispatcherThread();
BucketThreadController bucketThreadController = new BucketThreadController();
Threads.forGroup("Cat").start(appDataDispatcherThread);
Threads.forGroup("Cat").start(bucketThreadController);
}
public void setDataLoss(long dataLoss) {
m_dataLoss = dataLoss;
}
private class AppDataDispatcherThread implements Task {
private static final String NAME = "AppDataDispatcherThread";
@Override
public String getName() {
return NAME;
}
@Override
public void run() {
while (true) {
try {
AppData appData = m_appDataQueue.poll();
if (appData != null) {
long timestamp = appData.getTimestamp();
timestamp -= timestamp % DURATION;
BucketHandler handler = m_tasks.get(new Long(timestamp));
if (handler == null) {
m_dataLoss++;
if (m_dataLoss % 1000 == 0) {
m_logger.error("error timestamp in consumer, loss:" + m_dataLoss);
}
} else {
handler.enqueue(appData);
}
}
} catch (Exception e) {
Cat.logError(e);
}
}
}
@Override
public void shutdown() {
}
}
private class BucketThreadController implements Task {
private void closeLastTask(long currentDuration) {
Long last = new Long(currentDuration - DURATION);
BucketHandler lastBucketHandler = m_tasks.get(last);
if (lastBucketHandler != null) {
lastBucketHandler.shutdown();
}
}
@Override
public String getName() {
return "BucketThreadController";
}
private void removeLastLastTask(long currentDuration) {
Long lastLast = new Long(currentDuration - 2 * DURATION);
m_tasks.remove(lastLast);
}
@Override
public void run() {
while (true) {
long curTime = System.currentTimeMillis();
try {
long currentDuration = curTime - curTime % DURATION;
removeLastLastTask(currentDuration);
closeLastTask(currentDuration);
startCurrentTask(currentDuration);
startNextTask(currentDuration);
} catch (Exception e) {
Cat.logError(e);
}
long elapsedTime = System.currentTimeMillis() - curTime;
try {
Thread.sleep(DURATION - elapsedTime);
} catch (InterruptedException e) {
}
}
}
@Override
public void shutdown() {
}
private void startCurrentTask(long currentDuration) {
Long cur = new Long(currentDuration);
if (m_tasks.get(cur) != null) {
BucketHandler curBucketHandler = new BucketHandler(cur);
Threads.forGroup("Cat").start(curBucketHandler);
m_tasks.put(cur, curBucketHandler);
}
}
private void startNextTask(long currentDuration) {
Long next = new Long(currentDuration + DURATION);
if (m_tasks.get(next) != null) {
BucketHandler nextBucketHandler = new BucketHandler(next);
Threads.forGroup("Cat").start(nextBucketHandler);
m_tasks.put(next, nextBucketHandler);
}
}
}
}
package com.dianping.cat.broker.api.app;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import com.dianping.cat.service.appData.entity.AppData;
public class AppDataQueue {
private BlockingQueue<AppData> m_dataQueue = new LinkedBlockingQueue<AppData>();
public boolean offer(AppData appData) {
return m_dataQueue.offer(appData);
}
public AppData poll() {
AppData appData;
try {
appData = m_dataQueue.poll(5, TimeUnit.MICROSECONDS);
} catch (InterruptedException e) {
return null;
}
return appData;
}
}
package com.dianping.cat.broker.api.app;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.helper.Threads.Task;
import com.dianping.cat.service.appData.entity.AppData;
public class BucketHandler implements Task, LogEnabled {
private Logger m_logger;
private AppDataQueue m_appDataQueue;
private HashMap<Integer, HashMap<String, AppData>> m_mergedData;
private long m_startTime;
private boolean m_isActive = true;
private static final String FILEDIRECTORY = "/data/appdatas/cat/appdata/";
public void setActive(boolean isActive) {
m_isActive = isActive;
}
public BucketHandler(long startTime) {
m_startTime = startTime;
m_appDataQueue = new AppDataQueue();
m_mergedData = new LinkedHashMap<Integer, HashMap<String, AppData>>();
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
@Override
public void run() {
while (m_isActive) {
AppData appData = m_appDataQueue.poll();
if (appData != null) {
processEntity(appData);
}
}
while (true) {
AppData appData = m_appDataQueue.poll();
if (appData != null) {
processEntity(appData);
} else {
break;
}
}
end();
}
private void processEntity(AppData appData) {
Integer command = appData.getCommand();
String key = m_startTime + ":" + appData.getCity() + ":" + appData.getOperator() + ":" + appData.getChannel()
+ ":" + appData.getVersion() + ":" + appData.getNetwork() + ":" + appData.getCode() + ":"
+ appData.getPlatform();
HashMap<String, AppData> secondMap = m_mergedData.get(command);
if (secondMap == null) {
secondMap = new LinkedHashMap<String, AppData>();
secondMap.put(key, appData);
m_mergedData.put(command, secondMap);
} else {
AppData mergedAppData = secondMap.get(key);
if (mergedAppData == null) {
secondMap.put(key, appData);
} else {
mergedAppData.setCount(mergedAppData.getCount() + 1);
mergedAppData.setRequestByte(mergedAppData.getRequestByte() + appData.getRequestByte());
mergedAppData.setResponseByte(mergedAppData.getResponseByte() + appData.getResponseByte());
mergedAppData.setResponseTime(mergedAppData.getResponseTime() + appData.getResponseTime());
}
}
}
private void end() {
for (Entry<Integer, HashMap<String, AppData>> outerEntry : m_mergedData.entrySet()) {
for (Entry<String, AppData> entry : outerEntry.getValue().entrySet()) {
AppData appData = entry.getValue();
if (toHbase(appData) == false) {
saveToFile(appData);
}
}
}
}
@Override
public String getName() {
return "BucketHandler";
}
@Override
public void shutdown() {
m_isActive = false;
}
public void enqueue(AppData appData) {
m_appDataQueue.offer(appData);
}
private boolean toHbase(AppData appData) {
return false;
}
private void saveToFile(AppData appData) {
Date date = new Date();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = formater.format(date);
String filePath = FILEDIRECTORY + dateStr;
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
String content = appData.getTimestamp() + "\t" + appData.getCity() + "\t" + appData.getOperator() + "\t"
+ appData.getNetwork() + "\t" + appData.getVersion() + "\t" + appData.getChannel() + "\t"
+ appData.getCommand() + "\t" + appData.getCode() + "\t" + appData.getPlatform() + "\t"
+ appData.getRequestByte() + "\t" + appData.getResponseByte() + "\t" + appData.getResponseTime() + "\n";
writer.append(content);
writer.close();
} catch (IOException e) {
m_logger.error("save appdata to file " + filePath + " failed. " + e.getMessage());
}
}
}
......@@ -13,14 +13,14 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationExce
import com.dianping.cat.Cat;
public class IpService implements Initializable {
private Map<Integer, Area> m_areas;
private Map<Integer, Corporation> m_corps;
private int[] m_areaIds;
private Map<Integer, Area> m_areas;
private int[] m_corpIds;
private Map<Integer, Corporation> m_corps;
private long[] m_ends;
private long[] m_starts;
......@@ -35,10 +35,12 @@ public class IpService implements Initializable {
Area area = m_areas.get(m_areaIds[mid]);
if (area != null) {
ipInfo.setAreaId(area.getAreaId());
ipInfo.setNation(area.getNation());
ipInfo.setProvince(area.getProvince());
ipInfo.setCity(area.getCity());
} else {
ipInfo.setAreaId(0);
ipInfo.setNation("未知");
ipInfo.setProvince("未知");
ipInfo.setCity("未知");
......@@ -47,8 +49,10 @@ public class IpService implements Initializable {
Corporation corp = m_corps.get(m_corpIds[mid]);
if (corp != null) {
ipInfo.setCorpId(corp.getCorporationId());
ipInfo.setChannel(corp.getName());
} else {
ipInfo.setCorpId(0);
ipInfo.setChannel("其他");
}
return ipInfo;
......@@ -176,12 +180,12 @@ public class IpService implements Initializable {
public static class Area {
private Integer m_areaId;
private String m_city;
private String m_nation;
private String m_province;
private String m_city;
public Integer getAreaId() {
return m_areaId;
}
......@@ -240,13 +244,21 @@ public class IpService implements Initializable {
}
public static class IpInfo {
private String m_nation;
private Integer m_areaId;
private String m_province;
private String m_channel;
private String m_city;
private String m_channel;
private Integer m_corpId;
private String m_nation;
private String m_province;
public Integer getAreaId() {
return m_areaId;
}
public String getChannel() {
return m_channel;
......@@ -256,6 +268,10 @@ public class IpService implements Initializable {
return m_city;
}
public Integer getCorpId() {
return m_corpId;
}
public String getNation() {
return m_nation;
}
......@@ -264,6 +280,10 @@ public class IpService implements Initializable {
return m_province;
}
public void setAreaId(Integer areaId) {
m_areaId = areaId;
}
public void setChannel(String name) {
m_channel = name;
}
......@@ -272,6 +292,10 @@ public class IpService implements Initializable {
m_city = city;
}
public void setCorpId(Integer corpId) {
m_corpId = corpId;
}
public void setNation(String nation) {
m_nation = nation;
}
......
......@@ -15,21 +15,31 @@ import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
import com.dianping.cat.broker.api.app.AppDataConsumer;
import com.dianping.cat.broker.api.page.Constrants;
import com.dianping.cat.broker.api.page.IpService;
import com.dianping.cat.broker.api.page.IpService.IpInfo;
import com.dianping.cat.broker.api.page.MonitorEntity;
import com.dianping.cat.broker.api.page.MonitorManager;
import com.dianping.cat.broker.api.page.RequestUtils;
import com.dianping.cat.service.appData.entity.AppData;
public class Handler implements PageHandler<Context>, LogEnabled {
@Inject
private MonitorManager m_manager;
private AppDataConsumer m_appDataConsumer;
@Inject
private RequestUtils m_util;
private IpService m_ipService;
private Logger m_logger;
@Inject
private MonitorManager m_manager;
@Inject
private RequestUtils m_util;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
......@@ -49,7 +59,18 @@ public class Handler implements PageHandler<Context>, LogEnabled {
HttpServletRequest request = ctx.getHttpServletRequest();
HttpServletResponse response = ctx.getHttpServletResponse();
String userIp = m_util.getRemoteIp(request);
String version = payload.getVersion();
if (version.equals("1")) {
processVersion1(payload, request, userIp);
} else if (version.equals("2")) {
processVersion2(payload, request, userIp);
}
response.getWriter().write("OK");
}
private void processVersion1(Payload payload, HttpServletRequest request, String userIp) {
if (userIp != null) {
try {
String content = payload.getContent();
......@@ -88,7 +109,46 @@ public class Handler implements PageHandler<Context>, LogEnabled {
} else {
m_logger.info("unknown http request, x-forwarded-for:" + request.getHeader("x-forwarded-for"));
}
response.getWriter().write("OK");
}
private void processVersion2(Payload payload, HttpServletRequest request, String userIp) {
if (userIp != null) {
String content = payload.getContent();
String records[] = content.split("\n");
IpInfo ipInfo = m_ipService.findIpInfoByString(userIp);
for (String record : records) {
String items[] = record.split("\t");
if (items.length != 10) {
continue;
}
AppData appData = new AppData();
try {
appData.setTimestamp(Long.parseLong(items[0]));
appData.setNetwork(Integer.parseInt(items[1]));
appData.setVersion(Integer.parseInt(items[2]));
appData.setChannel(Integer.parseInt(items[3]));
appData.setCommand(Integer.parseInt(items[4]));
appData.setCode(Integer.parseInt(items[5]));
appData.setPlatform(Integer.parseInt(items[6]));
appData.setRequestByte(Integer.parseInt(items[7]));
appData.setResponseByte(Integer.parseInt(items[8]));
appData.setResponseTime(Integer.parseInt(items[9]));
appData.setCity(ipInfo.getAreaId());
appData.setOperator(ipInfo.getCorpId());
} catch (Exception e) {
m_logger.error(e.getMessage(), e);
}
m_appDataConsumer.enqueue(appData);
}
} else {
m_logger.info("unknown http request, x-forwarded-for:" + request.getHeader("x-forwarded-for"));
}
}
private boolean validate(String errorCode, String httpStatus) {
......
......@@ -20,7 +20,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(IpService.class));
all.add(C(RequestUtils.class));
all.add(C(MonitorManager.class).req(UrlPatternConfigManager.class, IpService.class));
// database
all.add(C(JdbcDataSourceDescriptorManager.class) //
.config(E("datasourceFile").value("/data/appdatas/cat/datasources.xml")));
......
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="appData" root="true">
<attribute name="timestamp" value-type="long" />
<attribute name="city" value-type="int" />
<attribute name="operator" value-type="int" />
<attribute name="network" value-type="int" />
<attribute name="version" value-type="int" />
<attribute name="channel" value-type="int" />
<attribute name="command" value-type="int" />
<attribute name="code" value-type="int" />
<attribute name="platform" value-type="int" />
<attribute name="count" value-type="int" />
<attribute name="requestByte" value-type="int" />
<attribute name="responseByte" value-type="int" />
<attribute name="responseTime" value-type="int" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="appData-codegen.xml" />
<file path="appData-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.service.appData" />
......@@ -138,5 +138,30 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.app.Handler</role>
<implementation>com.dianping.cat.broker.api.page.app.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.broker.api.page.app.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.app.JspViewer</role>
<implementation>com.dianping.cat.broker.api.page.app.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher</role>
<implementation>com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher</implementation>
</component>
</components>
</plexus>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="wizard.xml" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<wizard package="com.dianping.cat.service">
<model package="com.dianping.cat.service.appData" name="appData">
<sample-model>app</sample-model>
</model>
</wizard>
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.broker.api.page.app.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.broker.api.page.app.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.broker.api.page.app.Model" scope="request"/>
View of app page under api
\ No newline at end of file
......@@ -102,6 +102,12 @@
<div class="report">
<table>
<tr>
<th class="left">
<select style="width: 120px;" name="innerorouter" id=""innerorouter"">
<option value="inner">内部cdn</option>
<option value="outer">外部cdn</option>
</select>
</th>
<th class="left">
cdn服务商 <select style="width: 120px;" name="cdn" id="cdn">
<option value="ALL">ALL</option>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册