From ac3a7cd4abd1593c207f8e22a7957949c2a412ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=E4=BC=9F=E4=BC=9F?= Date: Tue, 15 Jul 2014 10:53:36 +0800 Subject: [PATCH] app data collect --- cat-broker/pom.xml | 373 +++++++++--------- .../cat/broker/api/app/AppDataConsumer.java | 169 ++++++++ .../cat/broker/api/app/AppDataQueue.java | 26 ++ .../cat/broker/api/app/BucketHandler.java | 147 +++++++ .../cat/broker/api/page/IpService.java | 42 +- .../cat/broker/api/page/batch/Handler.java | 66 +++- .../broker/build/ComponentsConfigurator.java | 2 +- .../META-INF/dal/model/appData-codegen.xml | 19 + .../META-INF/dal/model/appData-manifest.xml | 6 + .../META-INF/dal/model/appData-model.xml | 3 + .../resources/META-INF/plexus/components.xml | 25 ++ .../META-INF/wizard/model/manifest.xml | 5 + .../META-INF/wizard/model/wizard.xml | 6 + cat-broker/src/main/webapp/jsp/api/app.jsp | 5 + cat-home/src/main/webapp/jsp/report/cdn.jsp | 6 + 15 files changed, 706 insertions(+), 194 deletions(-) create mode 100644 cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java create mode 100644 cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java create mode 100644 cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java create mode 100644 cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml create mode 100644 cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml create mode 100644 cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml create mode 100644 cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml create mode 100644 cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml create mode 100644 cat-broker/src/main/webapp/jsp/api/app.jsp diff --git a/cat-broker/pom.xml b/cat-broker/pom.xml index ccc4c6ae7..87c19b4ff 100755 --- a/cat-broker/pom.xml +++ b/cat-broker/pom.xml @@ -1,184 +1,195 @@ - - - com.dianping.cat - parent - 1.0.5 - - 4.0.0 - broker-service - broker-service - war - - - org.unidal.eunit - EunitTestFwk - 1.2.1 - test - - - org.unidal.framework - foundation-service - 2.0.5 - - - com.dianping.cat - cat-core - - - com.google.code.gson - gson - 1.6 - - - org.unidal.webres - WebResServer - 1.2.1 - - - org.unidal.framework - web-framework - 2.0.5 - - - javax.servlet - servlet-api - provided - - - javax.servlet - jstl - 1.2 - - - org.mortbay.jetty - jsp-api-2.1 - 6.1.14 - provided - - - org.mortbay.jetty - jsp-2.1 - provided - - - mysql - mysql-connector-java - runtime - - - org.freemarker - freemarker - 2.3.9 - - - junit - junit - test - - - org.mortbay.jetty - jetty - test - - - org.unidal.framework - test-framework - 2.0.4 - test - - - org.unidal.framework - dal-jdbc - 2.0.4 - - - org.apache.commons - commons-email - 1.1 - - - javax.mail - mail - 1.4.4 - - - com.google.code.javaparser - javaparser - 1.0.8 - - - - - - ${basedir}/src/main/resources - true - - - - - org.unidal.maven.plugins - codegen-maven-plugin - 2.0.9 - - - generate plexus component descriptor - process-classes - - plexus - - - com.dianping.cat.broker.build.ComponentsConfigurator - dev - - - - - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 - - broker-service-${env}-${version} - - - src/main/resources - false - WEB-INF/classes - - - src/main/webapp - false - - WEB-INF/web.xml - - - - - - - org.mortbay.jetty - maven-jetty-plugin - 6.1.26 - - 10 - /cat - src/main/webapp/WEB-INF/web.xml - - - 2281 - 500000 - - - - - - - - war - alpha - utf-8 - + + + com.dianping.cat + parent + 1.0.5 + + 4.0.0 + broker-service + broker-service + war + + + org.unidal.eunit + EunitTestFwk + 1.2.1 + test + + + org.unidal.framework + foundation-service + 2.0.5 + + + com.dianping.cat + cat-core + + + com.google.code.gson + gson + 1.6 + + + org.unidal.webres + WebResServer + 1.2.1 + + + org.unidal.framework + web-framework + 2.0.5 + + + javax.servlet + servlet-api + provided + + + javax.servlet + jstl + 1.2 + + + org.mortbay.jetty + jsp-api-2.1 + 6.1.14 + provided + + + org.mortbay.jetty + jsp-2.1 + provided + + + mysql + mysql-connector-java + runtime + + + org.freemarker + freemarker + 2.3.9 + + + junit + junit + test + + + org.mortbay.jetty + jetty + test + + + org.unidal.framework + test-framework + 2.0.4 + test + + + org.unidal.framework + dal-jdbc + 2.0.4 + + + org.apache.commons + commons-email + 1.1 + + + javax.mail + mail + 1.4.4 + + + com.google.code.javaparser + javaparser + 1.0.8 + + + + + + ${basedir}/src/main/resources + true + + + + + org.unidal.maven.plugins + codegen-maven-plugin + 2.0.9 + + + generate plexus component descriptor + process-classes + + plexus + + + com.dianping.cat.broker.build.ComponentsConfigurator + dev + + + + generate dal model files + generate-sources + + dal-model + + + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + broker-service-${env}-${version} + + + src/main/resources + false + WEB-INF/classes + + + src/main/webapp + false + + WEB-INF/web.xml + + + + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.26 + + 10 + /cat + src/main/webapp/WEB-INF/web.xml + + + 2281 + 500000 + + + + + + + + war + alpha + utf-8 + diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java new file mode 100644 index 000000000..d2ed6b88c --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java @@ -0,0 +1,169 @@ +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 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(); + 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); + } + } + + } +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java new file mode 100644 index 000000000..c237d69d8 --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java @@ -0,0 +1,26 @@ +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 m_dataQueue = new LinkedBlockingQueue(); + + 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; + } +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java new file mode 100644 index 000000000..c664ac352 --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java @@ -0,0 +1,147 @@ +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> 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>(); + } + + @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 secondMap = m_mergedData.get(command); + + if (secondMap == null) { + secondMap = new LinkedHashMap(); + + 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> outerEntry : m_mergedData.entrySet()) { + for (Entry 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()); + } + } +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java index 70a643682..b8b9a24b8 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java @@ -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 m_areas; - - private Map m_corps; - private int[] m_areaIds; + private Map m_areas; + private int[] m_corpIds; + private Map 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; } diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java index 8bccdb27c..7c4e700e0 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java @@ -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, 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, 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, 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) { diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java b/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java index 437ea84aa..96f14b817 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java @@ -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"))); diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml new file mode 100644 index 000000000..018b2fe1b --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml new file mode 100644 index 000000000..51face176 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml new file mode 100644 index 000000000..915b4b680 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml @@ -0,0 +1,3 @@ + + + diff --git a/cat-broker/src/main/resources/META-INF/plexus/components.xml b/cat-broker/src/main/resources/META-INF/plexus/components.xml index 6c882c1a0..b94dee474 100644 --- a/cat-broker/src/main/resources/META-INF/plexus/components.xml +++ b/cat-broker/src/main/resources/META-INF/plexus/components.xml @@ -138,5 +138,30 @@ + + com.dianping.cat.broker.api.page.app.Handler + com.dianping.cat.broker.api.page.app.Handler + + + com.dianping.cat.broker.api.page.app.JspViewer + + + com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher + + + + + com.dianping.cat.broker.api.page.app.JspViewer + com.dianping.cat.broker.api.page.app.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher + com.dianping.cat.broker.api.page.app.appdata.AppDataDispatcher + diff --git a/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml b/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml new file mode 100644 index 000000000..8d84f298f --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml b/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml new file mode 100644 index 000000000..b93c1a329 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml @@ -0,0 +1,6 @@ + + + + app + + diff --git a/cat-broker/src/main/webapp/jsp/api/app.jsp b/cat-broker/src/main/webapp/jsp/api/app.jsp new file mode 100644 index 000000000..f2c86701b --- /dev/null +++ b/cat-broker/src/main/webapp/jsp/api/app.jsp @@ -0,0 +1,5 @@ +<%@ page contentType="text/html; charset=utf-8" %> + + + +View of app page under api \ No newline at end of file diff --git a/cat-home/src/main/webapp/jsp/report/cdn.jsp b/cat-home/src/main/webapp/jsp/report/cdn.jsp index 882ba9397..aa7b0362b 100644 --- a/cat-home/src/main/webapp/jsp/report/cdn.jsp +++ b/cat-home/src/main/webapp/jsp/report/cdn.jsp @@ -102,6 +102,12 @@
+
+ + cdn服务商