提交 f9bfcaa9 编写于 作者: Y youyong205

modify the url pattern

上级 a83b02a5
......@@ -7,8 +7,8 @@
<version>1.0.5</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cat-broker-server</artifactId>
<name>cat-broker-server</name>
<artifactId>cat-broker-service</artifactId>
<name>cat-broker-service</name>
<packaging>war</packaging>
<dependencies>
<dependency>
......@@ -148,7 +148,7 @@
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warName>cat-broker-server-${env}-${version}</warName>
<warName>cat-broker-service-${env}-${version}</warName>
<webResources>
<resource>
<directory>src/main/resources</directory>
......
package com.dianping.cat.broker.api;
import java.io.File;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.unidal.webres.resource.runtime.ResourceConfigurator;
import org.unidal.webres.resource.runtime.ResourceInitializer;
import org.unidal.webres.resource.runtime.ResourceRuntime;
import org.unidal.webres.resource.runtime.ResourceRuntimeContext;
import org.unidal.webres.resource.spi.IResourceRegistry;
import org.unidal.webres.tag.resource.ResourceTagConfigurator;
import org.unidal.webres.taglib.basic.ResourceTagLibConfigurator;
import org.unidal.web.mvc.Action;
import org.unidal.web.mvc.ActionContext;
import org.unidal.web.mvc.ActionPayload;
import org.unidal.web.mvc.Page;
public class ApiContext<T extends ActionPayload<? extends Page, ? extends Action>> extends ActionContext<T> {
@Override
public void initialize(HttpServletRequest request, HttpServletResponse response) {
super.initialize(request, response);
String contextPath = request.getContextPath();
synchronized (ResourceRuntime.INSTANCE) {
if (!ResourceRuntime.INSTANCE.hasConfig(contextPath)) {
ServletContext servletContext = request.getSession().getServletContext();
File warRoot = new File(servletContext.getRealPath("/"));
System.out.println("[INFO] Working directory is "+ System.getProperty("user.dir"));
System.out.println("[INFO] War root is " + warRoot);
ResourceRuntime.INSTANCE.removeConfig(contextPath);
ResourceInitializer.initialize(contextPath, warRoot);
IResourceRegistry registry = ResourceRuntime.INSTANCE.getConfig(contextPath).getRegistry();
new ResourceConfigurator().configure(registry);
new ResourceTagConfigurator().configure(registry);
new ResourceTagLibConfigurator().configure(registry);
registry.lock();
}
ResourceRuntimeContext.setup(contextPath);
}
}
}
package com.dianping.cat.broker.api;
import org.unidal.web.mvc.AbstractModule;
import org.unidal.web.mvc.annotation.ModuleMeta;
import org.unidal.web.mvc.annotation.ModulePagesMeta;
@ModuleMeta(name = "api", defaultInboundAction = "signal", defaultTransition = "default", defaultErrorAction = "default")
@ModulePagesMeta({
com.dianping.cat.broker.api.page.signal.Handler.class,
com.dianping.cat.broker.api.page.batch.Handler.class
})
public class ApiModule extends AbstractModule {
}
package com.dianping.cat.broker.api;
import org.unidal.web.mvc.Page;
import org.unidal.web.mvc.annotation.ModuleMeta;
public enum ApiPage implements Page {
SIGNAL("signal", "signal", "signal", "signal api", true),
BATCH("batch", "batch", "batch", "batch api", true);
private String m_name;
private String m_path;
private String m_title;
private String m_description;
private boolean m_standalone;
private ApiPage(String name, String path, String title, String description, boolean standalone) {
m_name = name;
m_path = path;
m_title = title;
m_description = description;
m_standalone = standalone;
}
public static ApiPage getByName(String name, ApiPage defaultPage) {
for (ApiPage action : ApiPage.values()) {
if (action.getName().equals(name)) {
return action;
}
}
return defaultPage;
}
public String getDescription() {
return m_description;
}
public String getModuleName() {
ModuleMeta meta = ApiModule.class.getAnnotation(ModuleMeta.class);
if (meta != null) {
return meta.name();
} else {
return null;
}
}
@Override
public String getName() {
return m_name;
}
@Override
public String getPath() {
return m_path;
}
public String getTitle() {
return m_title;
}
public boolean isStandalone() {
return m_standalone;
}
public ApiPage[] getValues() {
return ApiPage.values();
}
}
package com.dianping.cat.broker.api.page;
public class IpConvert {
public PositionInfo convert(String ip) {
PositionInfo info = new PositionInfo();
info.setChannel("liantong");
info.setCity("shanghai");
return info;
}
public static class PositionInfo {
private String m_city;
private String m_channel;
public String getCity() {
return m_city;
}
public void setCity(String city) {
m_city = city;
}
public String getChannel() {
return m_channel;
}
public void setChannel(String channel) {
m_channel = channel;
}
}
}
package com.dianping.cat.broker.api.page;
public class MonitorEntity {
private int m_timestamp;
private String m_targetUrl;
private double m_duration;
private String m_httpCode;
private String m_errorCode;
private String m_city;
private String m_channel;
private String m_ip;
public String getCity() {
return m_city;
}
public void setCity(String city) {
m_city = city;
}
public String getChannel() {
return m_channel;
}
public void setChannel(String channel) {
m_channel = channel;
}
public String getIp() {
return m_ip;
}
public void setIp(String ip) {
m_ip = ip;
}
public int getTimestamp() {
return m_timestamp;
}
public MonitorEntity setTimestamp(int timestamp) {
m_timestamp = timestamp;
return this;
}
public String getTargetUrl() {
return m_targetUrl;
}
public MonitorEntity setTargetUrl(String targetUrl) {
m_targetUrl = targetUrl;
return this;
}
public double getDuration() {
return m_duration;
}
public MonitorEntity setDuration(double duration) {
m_duration = duration;
return this;
}
public String getHttpCode() {
return m_httpCode;
}
public MonitorEntity setHttpCode(String httpCode) {
m_httpCode = httpCode;
return this;
}
public String getErrorCode() {
return m_errorCode;
}
public MonitorEntity setErrorCode(String errorCode) {
m_errorCode = errorCode;
return this;
}
}
package com.dianping.cat.broker.api.page;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
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 org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.CatConstants;
import com.dianping.cat.broker.api.page.IpConvert.PositionInfo;
import com.dianping.cat.message.Metric;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.message.internal.DefaultMetric;
import com.site.lookup.util.StringUtils;
public class MonitorManager implements Initializable, LogEnabled {
private final int m_threadCounts = 20;
private volatile long m_total = 0;
private volatile long m_errorCount = -1;
private Map<Integer, BlockingQueue<MonitorEntity>> m_queues = new LinkedHashMap<Integer, BlockingQueue<MonitorEntity>>();
@Inject
private IpConvert m_conver;
private Logger m_logger;
@Override
public void initialize() throws InitializationException {
for (int i = 0; i < m_threadCounts; i++) {
BlockingQueue<MonitorEntity> queue = new LinkedBlockingQueue<MonitorEntity>(10000);
Threads.forGroup("Cat").start(new MessageSender(queue, i));
m_queues.put(i, queue);
}
}
public boolean offer(MonitorEntity entity) {
m_total++;
int index = (int) (m_total % m_threadCounts);
int retryTime = 0;
while (retryTime < m_threadCounts) {
BlockingQueue<MonitorEntity> queue = m_queues.get((index + retryTime) % m_threadCounts);
boolean result = queue.offer(entity);
if (result) {
return true;
}
retryTime++;
}
m_errorCount++;
if (m_errorCount % CatConstants.ERROR_COUNT == 0) {
m_logger.error("Error when offer entity to queues, size:" + m_errorCount);
}
return false;
}
// KEY: city:channel:hit
// KEY: city:channel:httpError|200
// KEY: city:channel:errorCode|200
private void processOneEntity(MonitorEntity entity) {
String url = entity.getTargetUrl();
Transaction t = Cat.newTransaction("Monitor", url);
try {
PositionInfo ip = m_conver.convert(entity.getIp());
if (ip != null) {
String city = ip.getCity();
String channel = ip.getChannel();
String httpCode = entity.getHttpCode();
String errorCode = entity.getErrorCode();
long timestamp = entity.getTimestamp();
double duration = entity.getDuration();
String group = url;
if (duration > 0) {
logMetric(timestamp, duration, group, city + ":" + channel + ":hit");
logMetric(timestamp, duration, group, city + ":" + ":hit");
logMetric(timestamp, duration, group, channel + ":hit");
}
if (!StringUtils.isEmpty(httpCode)) {
String key = city + ":" + channel + ":httpCode|" + httpCode;
Metric metric = Cat.getProducer().newMetric(group, key);
DefaultMetric defaultMetric = (DefaultMetric) metric;
defaultMetric.setTimestamp(timestamp);
defaultMetric.setStatus("C");
defaultMetric.addData(String.valueOf(1));
}
if (!StringUtils.isEmpty(errorCode)) {
String key = city + ":" + channel + ":errorCode|" + errorCode;
Metric metric = Cat.getProducer().newMetric(group, key);
DefaultMetric defaultMetric = (DefaultMetric) metric;
defaultMetric.setTimestamp(timestamp);
defaultMetric.setStatus("C");
defaultMetric.addData(String.valueOf(1));
}
}
} catch (Exception e) {
Cat.logError(e);
t.setStatus(e);
} finally {
t.complete();
}
}
private void logMetric(long timestamp, double duration, String group, String key) {
Metric metric = Cat.getProducer().newMetric(group, key);
DefaultMetric defaultMetric = (DefaultMetric) metric;
defaultMetric.setTimestamp(timestamp);
defaultMetric.setStatus("S,C");
defaultMetric.addData(String.format("%s,%.2f", 1, duration));
}
public class MessageSender implements Task {
private BlockingQueue<MonitorEntity> m_queue;
private int m_index;
public MessageSender(BlockingQueue<MonitorEntity> queue, int index) {
m_queue = queue;
m_index = index;
}
@Override
public void run() {
while (true) {
try {
MonitorEntity entity = m_queue.poll(5, TimeUnit.MILLISECONDS);
if (entity != null) {
try {
processOneEntity(entity);
} catch (Exception e) {
Cat.logError(e);
}
}
} catch (InterruptedException e) {
break;
}
}
}
@Override
public String getName() {
return "Message-Send-" + m_index;
}
@Override
public void shutdown() {
}
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
package com.dianping.cat.broker.api.page;
import javax.servlet.http.HttpServletRequest;
public class RequestUtils {
public String getRemoteIp(HttpServletRequest request) {
String ip = filterXForwardedForIP(request.getHeader("x-forwarded-for"));
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
private String filterXForwardedForIP(String ip) {
if (ip == null || ip.trim().length() == 0) {
return null;
} else {
if (ip.indexOf(',') == -1) {
return ip;
} else {
String[] subIps = ip.split(",");
// for (int i = subIps.length - 1; i >= 0; i--) {
for (int i = 0; i < subIps.length; i++) {
String subIp = subIps[i];
if (subIp == null || subIp.trim().length() == 0) {
continue;
} else {
subIp = subIp.trim();
if (subIp.startsWith("192.168.") || subIp.startsWith("10.1") || subIp.startsWith("10.2")
|| "127.0.0.1".equals(subIp)) {
continue;
} else {
return subIp;
}
}
}
}
return null;
}
}
}
\ No newline at end of file
package com.dianping.cat.broker.api.page.batch;
public enum Action implements org.unidal.web.mvc.Action {
VIEW("view");
private String m_name;
private Action(String name) {
m_name = name;
}
public static Action getByName(String name, Action defaultAction) {
for (Action action : Action.values()) {
if (action.getName().equals(name)) {
return action;
}
}
return defaultAction;
}
@Override
public String getName() {
return m_name;
}
}
package com.dianping.cat.broker.api.page.batch;
import com.dianping.cat.broker.api.ApiContext;
public class Context extends ApiContext<Payload> {
}
package com.dianping.cat.broker.api.page.batch;
import java.io.IOException;
import javax.servlet.ServletException;
import com.dianping.cat.broker.api.ApiPage;
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 org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private MonitorManager m_manager;
@Inject
private RequestUtils m_util;
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "batch")
public void handleInbound(Context ctx) throws ServletException, IOException {
// display only, no action here
}
@Override
@OutboundActionMeta(name = "batch")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
String userIp = m_util.getRemoteIp(ctx.getHttpServletRequest());
if (userIp != null) {
String content = payload.getContent();
String[] lines = content.split("\n");
if (userIp != null) {
for (String line : lines) {
String[] tabs = line.split("\t");
if (tabs.length == 5) {
MonitorEntity entity = new MonitorEntity();
entity.setTimestamp(Integer.parseInt(tabs[0]));
entity.setTargetUrl(tabs[1]);
entity.setDuration(Double.parseDouble(tabs[1]));
entity.setErrorCode(tabs[3]);
entity.setHttpCode(tabs[4]);
entity.setIp(userIp);
m_manager.offer(entity);
}
}
}
}
model.setAction(Action.VIEW);
model.setPage(ApiPage.BATCH);
if (!ctx.isProcessStopped()) {
m_jspViewer.view(ctx, model);
}
}
}
package com.dianping.cat.broker.api.page.batch;
public enum JspFile {
VIEW("/jsp/api/batch.jsp"),
;
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
package com.dianping.cat.broker.api.page.batch;
import com.dianping.cat.broker.api.ApiPage;
import org.unidal.web.mvc.view.BaseJspViewer;
public class JspViewer extends BaseJspViewer<ApiPage, Action, Context, Model> {
@Override
protected String getJspFilePath(Context ctx, Model model) {
Action action = model.getAction();
switch (action) {
case VIEW:
return JspFile.VIEW.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
package com.dianping.cat.broker.api.page.batch;
import com.dianping.cat.broker.api.ApiPage;
import org.unidal.web.mvc.ViewModel;
public class Model extends ViewModel<ApiPage, Action, Context> {
public Model(Context ctx) {
super(ctx);
}
@Override
public Action getDefaultAction() {
return Action.VIEW;
}
}
package com.dianping.cat.broker.api.page.batch;
import com.dianping.cat.broker.api.ApiPage;
import org.unidal.web.mvc.ActionContext;
import org.unidal.web.mvc.ActionPayload;
import org.unidal.web.mvc.payload.annotation.FieldMeta;
public class Payload implements ActionPayload<ApiPage, Action> {
private ApiPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("c")
private String m_content;
public void setAction(String action) {
m_action = Action.getByName(action, Action.VIEW);
}
@Override
public Action getAction() {
return m_action;
}
@Override
public ApiPage getPage() {
return m_page;
}
public String getContent() {
return m_content;
}
public void setContent(String content) {
m_content = content;
}
@Override
public void setPage(String page) {
m_page = ApiPage.getByName(page, ApiPage.BATCH);
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.VIEW;
}
}
}
package com.dianping.cat.broker.api.page.signal;
public enum Action implements org.unidal.web.mvc.Action {
VIEW("view");
private String m_name;
private Action(String name) {
m_name = name;
}
public static Action getByName(String name, Action defaultAction) {
for (Action action : Action.values()) {
if (action.getName().equals(name)) {
return action;
}
}
return defaultAction;
}
@Override
public String getName() {
return m_name;
}
}
package com.dianping.cat.broker.api.page.signal;
import com.dianping.cat.broker.api.ApiContext;
public class Context extends ApiContext<Payload> {
}
package com.dianping.cat.broker.api.page.signal;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import com.dianping.cat.broker.api.ApiPage;
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 org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private MonitorManager m_manager;
@Inject
private RequestUtils m_util;
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "signal")
public void handleInbound(Context ctx) throws ServletException, IOException {
// display only, no action here
}
@Override
@OutboundActionMeta(name = "signal")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
HttpServletRequest request = ctx.getHttpServletRequest();
model.setAction(Action.VIEW);
model.setPage(ApiPage.SIGNAL);
MonitorEntity entity = new MonitorEntity();
String userIp = m_util.getRemoteIp(request);
if (userIp != null) {
entity.setDuration(payload.getDuration());
entity.setErrorCode(payload.getErrorCode());
entity.setHttpCode(payload.getHttpCode());
entity.setIp(userIp);
entity.setTargetUrl(payload.getTargetUrl());
entity.setTimestamp(payload.getTimestamp());
m_manager.offer(entity);
}
if (!ctx.isProcessStopped()) {
m_jspViewer.view(ctx, model);
}
}
}
package com.dianping.cat.broker.api.page.signal;
public enum JspFile {
VIEW("/jsp/api/signal.jsp"),
;
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
package com.dianping.cat.broker.api.page.signal;
import com.dianping.cat.broker.api.ApiPage;
import org.unidal.web.mvc.view.BaseJspViewer;
public class JspViewer extends BaseJspViewer<ApiPage, Action, Context, Model> {
@Override
protected String getJspFilePath(Context ctx, Model model) {
Action action = model.getAction();
switch (action) {
case VIEW:
return JspFile.VIEW.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
package com.dianping.cat.broker.api.page.signal;
import com.dianping.cat.broker.api.ApiPage;
import org.unidal.web.mvc.ViewModel;
public class Model extends ViewModel<ApiPage, Action, Context> {
public Model(Context ctx) {
super(ctx);
}
@Override
public Action getDefaultAction() {
return Action.VIEW;
}
}
package com.dianping.cat.broker.api.page.signal;
import com.dianping.cat.broker.api.ApiPage;
import com.dianping.cat.broker.api.page.batch.Action;
import org.unidal.web.mvc.ActionContext;
import org.unidal.web.mvc.ActionPayload;
import org.unidal.web.mvc.payload.annotation.FieldMeta;
public class Payload implements ActionPayload<ApiPage, Action> {
private ApiPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("ts")
private int m_timestamp;
@FieldMeta("tu")
private String m_targetUrl;
@FieldMeta("v")
private String m_version;
@FieldMeta("d")
private double m_duration;
@FieldMeta("tc")
private String m_httpCode;
@FieldMeta("ec")
private String m_errorCode;
public void setAction(String action) {
m_action = Action.getByName(action, Action.VIEW);
}
@Override
public Action getAction() {
return m_action;
}
public int getTimestamp() {
return m_timestamp;
}
public void setTimestamp(int timestamp) {
m_timestamp = timestamp;
}
public String getTargetUrl() {
return m_targetUrl;
}
public void setTargetUrl(String targetUrl) {
m_targetUrl = targetUrl;
}
public String getVersion() {
return m_version;
}
public void setVersion(String version) {
m_version = version;
}
public double getDuration() {
return m_duration;
}
public void setDuration(double duration) {
m_duration = duration;
}
public String getHttpCode() {
return m_httpCode;
}
public void setHttpCode(String httpCode) {
m_httpCode = httpCode;
}
public String getErrorCode() {
return m_errorCode;
}
public void setErrorCode(String errorCode) {
m_errorCode = errorCode;
}
@Override
public ApiPage getPage() {
return m_page;
}
@Override
public void setPage(String page) {
m_page = ApiPage.getByName(page, ApiPage.SIGNAL);
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.VIEW;
}
}
}
package com.dianping.cat.broker.build;
import java.util.ArrayList;
import java.util.List;
import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.broker.api.page.IpConvert;
import com.dianping.cat.broker.api.page.MonitorManager;
import com.dianping.cat.broker.api.page.RequestUtils;
public class ComponentsConfigurator extends AbstractResourceConfigurator {
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
all.add(C(IpConvert.class));
all.add(C(RequestUtils.class));
all.add(C(MonitorManager.class).req(IpConvert.class));
// Please keep it as last
all.addAll(new WebComponentConfigurator().defineComponents());
return all;
}
public static void main(String[] args) {
generatePlexusComponentsXmlFile(new ComponentsConfigurator());
}
}
package com.dianping.cat.broker.build;
import java.util.ArrayList;
import java.util.List;
import com.dianping.cat.broker.api.ApiModule;
import org.unidal.lookup.configuration.Component;
import org.unidal.web.configuration.AbstractWebComponentsConfigurator;
class WebComponentConfigurator extends AbstractWebComponentsConfigurator {
@SuppressWarnings("unchecked")
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
defineModuleRegistry(all, ApiModule.class, ApiModule.class);
return all;
}
}
package com.dianping.cat.broker.view;
import org.unidal.web.mvc.Page;
import com.dianping.cat.broker.api.ApiPage;
public class NavigationBar {
public Page[] getVisiblePages() {
return new Page[] {
ApiPage.SIGNAL,
ApiPage.BATCH
};
}
}
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<domain id="cat-broker-server"/>
</config>
<plexus>
<components>
<component>
<role>com.dianping.cat.broker.api.page.IpConvert</role>
<implementation>com.dianping.cat.broker.api.page.IpConvert</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.RequestUtils</role>
<implementation>com.dianping.cat.broker.api.page.RequestUtils</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.MonitorManager</role>
<implementation>com.dianping.cat.broker.api.page.MonitorManager</implementation>
</component>
<component>
<role>org.unidal.web.mvc.model.ModuleRegistry</role>
<implementation>org.unidal.web.mvc.model.ModuleRegistry</implementation>
<configuration>
<modules>
<module default="true">com.dianping.cat.broker.api.ApiModule</module>
</modules>
</configuration>
</component>
<component>
<role>com.dianping.cat.broker.api.ApiModule</role>
<implementation>com.dianping.cat.broker.api.ApiModule</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.signal.Handler</role>
<implementation>com.dianping.cat.broker.api.page.signal.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.broker.api.page.signal.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.page.MonitorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.page.RequestUtils</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.signal.JspViewer</role>
<implementation>com.dianping.cat.broker.api.page.signal.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.MonitorManager</role>
<implementation>com.dianping.cat.broker.api.page.MonitorManager</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.RequestUtils</role>
<implementation>com.dianping.cat.broker.api.page.RequestUtils</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.batch.Handler</role>
<implementation>com.dianping.cat.broker.api.page.batch.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.broker.api.page.batch.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.page.MonitorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.page.RequestUtils</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.broker.api.page.batch.JspViewer</role>
<implementation>com.dianping.cat.broker.api.page.batch.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</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.broker">
<webapp package="com.dianping.cat.broker" webres="true" plugin-management="false">
<module name="api" path="api" default="true">
<page name="signal" title="signal" default="true" path="signal" template="default">
<description>signal api</description>
</page>
<page name="batch" title="batch" default="true" path="batch" template="default">
<description>batch api</description>
</page>
</module>
</webapp>
</wizard>
<%@ tag trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:useBean id="navBar" class="com.dianping.cat.broker.view.NavigationBar" scope="page" />
<!DOCTYPE html>
<html lang="en">
<head>
<title>BrokerServer - ${model.page.description}</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="BrokerServer">
<link href="${model.webapp}/css/bootstrap.css" type="text/css" rel="stylesheet">
<link href="${model.webapp}/css/bootstrap-responsive.css" type="text/css" rel="stylesheet">
<script src="${model.webapp}/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script type="text/javascript">var contextpath = "${model.webapp}";</script>
</head>
<body data-spy="scroll" data-target=".subnav" data-offset="50">
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="nav-collapse collapse">
<ul class="nav">
<c:forEach var="page" items="${navBar.visiblePages}">
<c:if test="${page.standalone}">
<li ${model.page.name == page.name ? 'class="selected"' : ''}><a href="${model.webapp}/${page.moduleName}/${page.path}">${page.title}</a></li>
</c:if>
<c:if
test="${not page.standalone and model.page.name == page.name}">
<li class="selected">${page.title}</li>
</c:if>
</c:forEach>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container-fluid" style="min-height:524px;">
<div class="row-fluid">
<div class="span12">
<br><br>
<jsp:doBody />
</div>
</div>
<br />
<div class="container">
<footer><center>&copy;2013 Dianping BrokerServer Team</center></footer>
</div>
</div>
<!--/.fluid-container-->
<script src="${model.webapp}/js/bootstrap.js" type="text/javascript"></script>
</body>
</html>
......@@ -2,19 +2,6 @@
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
<filter-name>cat-filter</filter-name>
<filter-class>com.dianping.cat.servlet.CatFilter</filter-class>
</filter>
<filter>
<filter-name>domain-filter</filter-name>
<filter-class>com.dianping.cat.servlet.DomainFilter</filter-class>
</filter>
<servlet>
<servlet-name>cat-servlet</servlet-name>
<servlet-class>com.dianping.cat.servlet.CatServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>mvc-servlet</servlet-name>
<servlet-class>org.unidal.web.MVC</servlet-class>
......@@ -28,33 +15,9 @@
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/r/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>domain-filter</filter-name>
<url-pattern>/r/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/s/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/jsp/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<servlet-mapping>
<servlet-name>mvc-servlet</servlet-name>
<url-pattern>/r/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>mvc-servlet</servlet-name>
<url-pattern>/s/*</url-pattern>
<url-pattern>/monitor/*</url-pattern>
</servlet-mapping>
<jsp-config>
<taglib>
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
package com.dianping.cat.broker;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({
// add test classes here
})
public class AllTests {
}
package com.dianping.cat.broker;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import org.junit.Test;
import org.unidal.helper.Files;
public class PostTest {
@Test
public void test() throws Exception {
String url = "http://localhost:2765/broker-server/monitor?op=batch";
URLConnection conn = new URL(url).openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
String content = "1400037748182\thttp\t300\t200\t300\n1400037748182\thttp\t300\t200\t300\n1400037748182\thttp\t300\t200\t300\n";
writer.write( content);
writer.flush();
InputStream in = conn.getInputStream();
String result = Files.forIO().readFrom(in, "utf-8");
System.out.println(result);
}
}
package com.dianping.cat.broker;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.servlet.GzipFilter;
import org.unidal.test.jetty.JettyServer;
@RunWith(JUnit4.class)
public class TestServer extends JettyServer {
public static void main(String[] args) throws Exception {
System.out.println(System.currentTimeMillis());
TestServer server = new TestServer();
server.startServer();
server.startWebapp();
server.stopServer();
}
@Before
public void before() throws Exception {
System.setProperty("devMode", "true");
super.startServer();
}
@Override
protected String getContextPath() {
return "/broker-server";
}
@Override
protected int getServerPort() {
return 2765;
}
@Override
protected void postConfigure(WebAppContext context) {
context.addFilter(GzipFilter.class, "/monitor/*", Handler.ALL);
}
@Test
public void startWebapp() throws Exception {
// open the page in the default browser
display("/broker-server/monitor");
waitForAnyKey();
}
}
......@@ -45,16 +45,14 @@
<goal>dal-model</goal>
</goals>
<configuration>
<manifest>
${basedir}/src/main/resources/META-INF/dal/model/transaction-report-manifest.xml,
<manifest>${basedir}/src/main/resources/META-INF/dal/model/transaction-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/event-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/problem-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/heartbeat-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/state-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/top-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/aggreation-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/company-manifest.xml,
</manifest>
${basedir}/src/main/resources/META-INF/dal/model/company-manifest.xml,</manifest>
</configuration>
</execution>
<execution>
......
......@@ -22,7 +22,7 @@ public class AggregationConfigManager implements Initializable {
@Inject
protected AggregationHandler m_handler;
private int m_configId;
private static final String CONFIG_NAME = "aggreationConfig";
......@@ -33,7 +33,7 @@ public class AggregationConfigManager implements Initializable {
public boolean deleteAggregationRule(String rule) {
m_aggregation.removeAggregationRule(rule);
m_handler.register(queryAggrarationRules());
m_handler.register(queryAggregationRules());
return storeConfig();
}
......@@ -69,16 +69,16 @@ public class AggregationConfigManager implements Initializable {
if (m_aggregation == null) {
m_aggregation = new Aggregation();
}
m_handler.register(queryAggrarationRules());
m_handler.register(queryAggregationRules());
}
public boolean insertAggregationRule(AggregationRule rule) {
m_aggregation.addAggregationRule(rule);
m_handler.register(queryAggrarationRules());
m_handler.register(queryAggregationRules());
return storeConfig();
}
public List<AggregationRule> queryAggrarationRules() {
public List<AggregationRule> queryAggregationRules() {
return new ArrayList<AggregationRule>(m_aggregation.getAggregationRules().values());
}
......
......@@ -6,6 +6,9 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.dianping.cat.config.AggregationMessageFormat;
import com.dianping.cat.config.CompositeFormat;
import com.dianping.cat.config.TrieTreeNode;
import com.dianping.cat.consumer.aggreation.model.entity.AggregationRule;
public class DefaultAggregationHandler implements AggregationHandler {
......
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="url-pattern" root="true">
<entity-ref name="pattern-item" type="list" names="pattern-items" />
</entity>
<entity name="pattern-item">
<attribute name="group" value-type="String" />
<attribute name="name" value-type="String" />
<attribute name="pattern" value-type="String" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="url-pattern-codegen.xml" />
<file path="url-pattern-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.consumer.url.pattern" />
......@@ -3,10 +3,13 @@
<model package="com.dianping.cat.consumer.metric-report" name="metric-report">
<sample-model>src/test/resources/com/dianping/cat/consumer/metric/model/metric-report.xml</sample-model>
</model>
<model package="com.dianping.cat.consumer.aggreation" name="aggreation">
<model package="com.dianping.cat.consumer.aggreation" name="aggreation">
<sample-model>src/test/resources/com/dianping/cat/consumer/problem/aggreation/aggreation.xml</sample-model>
</model>
<model package="com.dianping.cat.consumer.company" name="company">
<sample-model>src/test/resources/com/dianping/cat/system/config/company.xml</sample-model>
</model>
<model package="com.dianping.cat.consumer.url.pattern" name="url.pattern">
<sample-model>src/test/resources/com/dianping/cat/consumer/model/url-pattern.xml</sample-model>
</model>
</wizard>
......@@ -8,8 +8,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.dianping.cat.consumer.problem.aggregation.AggregationMessageFormat;
import com.dianping.cat.consumer.problem.aggregation.CompositeFormat;
import com.dianping.cat.config.AggregationMessageFormat;
import com.dianping.cat.config.CompositeFormat;
public class CompositeFormatTest {
@Rule
......
......@@ -8,8 +8,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.dianping.cat.consumer.problem.aggregation.DefaultFormat;
import com.dianping.cat.consumer.problem.aggregation.Format;
import com.dianping.cat.config.DefaultFormat;
import com.dianping.cat.config.Format;
public class DefaultFormatTest {
......
......@@ -46,7 +46,7 @@ public class AggregationConfigManagerTest {
Assert.assertEquals(3, s_storeCount);
List<AggregationRule> rules = manager.queryAggrarationRules();
List<AggregationRule> rules = manager.queryAggregationRules();
Assert.assertEquals(3, rules.size());
List<AggregationRule> dbRules = manager.queryAggrarationRulesFromDB();
......@@ -64,7 +64,7 @@ public class AggregationConfigManagerTest {
manager.setConfigDao(new MockConfigDao2());
manager.initialize();
List<AggregationRule> rules = manager.queryAggrarationRules();
List<AggregationRule> rules = manager.queryAggregationRules();
Assert.assertEquals(0, rules.size());
}
......
......@@ -67,6 +67,7 @@
<configuration>
<manifest>
${basedir}/src/main/resources/META-INF/dal/model/server-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/url-pattern-manifest.xml,
</manifest>
</configuration>
</execution>
......
......@@ -12,6 +12,10 @@ import com.dianping.cat.DomainManager;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.analysis.DefaultMessageAnalyzerManager;
import com.dianping.cat.analysis.MessageAnalyzerManager;
import com.dianping.cat.config.DefaultUrlPatternHandler;
import com.dianping.cat.config.UrlPatternConfigManager;
import com.dianping.cat.config.UrlPatternHandler;
import com.dianping.cat.core.config.ConfigDao;
import com.dianping.cat.core.dal.HostinfoDao;
import com.dianping.cat.core.dal.ProjectDao;
import com.dianping.cat.core.dal.TaskDao;
......@@ -53,6 +57,10 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(DecodeMessageTask.class));
all.add(C(UrlPatternHandler.class, DefaultUrlPatternHandler.class));
all.add(C(UrlPatternConfigManager.class).req(ConfigDao.class, UrlPatternHandler.class));
all.add(C(MessageBucket.class, LocalMessageBucket.ID, LocalMessageBucket.class) //
.is(PER_LOOKUP) //
.req(MessageCodec.class, PlainTextMessageCodec.ID));
......
package com.dianping.cat.consumer.problem.aggregation;
package com.dianping.cat.config;
import java.text.MessageFormat;
import java.util.ArrayList;
......
package com.dianping.cat.consumer.problem.aggregation;
package com.dianping.cat.config;
import java.text.ParseException;
import java.util.ArrayList;
......
package com.dianping.cat.consumer.problem.aggregation;
package com.dianping.cat.config;
import java.text.ParseException;
......
package com.dianping.cat.config;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.dianping.cat.configuration.url.pattern.entity.PatternItem;
public class DefaultUrlPatternHandler implements UrlPatternHandler {
private TrieTreeNode m_formats = new TrieTreeNode();
/**
* build a format tree use prefix as trieTree index and suffix as map key or conversely
*
* @param tree
* @param prefix
* @param suffix
* @param format
*/
private void buildFormatTree(TrieTreeNode tree, char[] prefix, char[] suffix, AggregationMessageFormat format) {
if (prefix.length == 0 && suffix.length == 0) {
tree.addFormat("", format);
return;
}
boolean isPrefix = true;
int sIndex = 0, eIndex = 0;
TrieTreeNode sCurrent = tree, eCurrent = tree;
if (prefix.length != 0) {
for (int i = 0; i < prefix.length; i++) {
TrieTreeNode node = sCurrent.getChildNode(prefix[i], true);
if (node == null) {
node = new TrieTreeNode();
sCurrent.addTreeNode(prefix[i], true, node);
sIndex++;
}
sCurrent = node;
}
}
if (suffix.length != 0) {
for (int i = suffix.length - 1; i >= 0; i--) {
TrieTreeNode node = eCurrent.getChildNode(suffix[i], false);
if (node == null) {
node = new TrieTreeNode();
eCurrent.addTreeNode(suffix[i], false, node);
eIndex++;
}
eCurrent = node;
}
}
// choose prefix or suffix as trieTree index based on size of tree leaf
if (sIndex > eIndex) {
isPrefix = true;
} else if (sIndex < eIndex) {
isPrefix = false;
} else {
isPrefix = sCurrent.getFormatMap().size() >= eCurrent.getFormatMap().size() ? false : true;
}
if (isPrefix) {
sCurrent.addFormat(String.copyValueOf(suffix), format);
} else {
eCurrent.addFormat(String.copyValueOf(prefix), format);
}
}
@Override
public String handle(String input) {
return parse(m_formats, input);
}
/**
* parse input to output based on format tree
*
* @param formatTree
* @param input
* @return
*/
private String parse(TrieTreeNode formatTree, String input) {
char[] cs = input.toCharArray();
List<Map<String, AggregationMessageFormat>> sformatSet = new ArrayList<Map<String, AggregationMessageFormat>>();
List<Map<String, AggregationMessageFormat>> eformatSet = new ArrayList<Map<String, AggregationMessageFormat>>();
TrieTreeNode current = formatTree;
int i = 0;
for (; i < cs.length; i++) {
sformatSet.add(current.getFormatMap());
TrieTreeNode node = current.getChildNode(cs[i], true);
if (node == null) {
i--;
break;
}
current = node;
}
current = formatTree;
int j = cs.length - 1;
for (; j > 0; j--) {
eformatSet.add(current.getFormatMap());
TrieTreeNode node = current.getChildNode(cs[j], false);
if (node == null) {
j++;
break;
}
current = node;
}
for (Map<String, AggregationMessageFormat> amfMap : sformatSet) {
for (Entry<String, AggregationMessageFormat> entry : amfMap.entrySet()) {
String key = entry.getKey();
if (!input.endsWith(key)) {
continue;
}
AggregationMessageFormat amf = amfMap.get(key);
CompositeFormat cf = new CompositeFormat(amf);
String output;
try {
output = cf.parse(input);
} catch (Exception e) {
continue;
}
return output;
}
}
for (Map<String, AggregationMessageFormat> amfMap : eformatSet) {
for (Entry<String, AggregationMessageFormat> entry : amfMap.entrySet()) {
String key = entry.getKey();
if (!input.startsWith(key)) {
continue;
}
AggregationMessageFormat amf = amfMap.get(key);
CompositeFormat cf = new CompositeFormat(amf);
String output;
try {
output = cf.parse(input);
} catch (Exception e) {
continue;
}
return output;
}
}
return input;
}
@Override
public void register(List<PatternItem> rules) {
TrieTreeNode formats = new TrieTreeNode();
for (PatternItem item : rules) {
String format = item.getPattern();
if (format == null || format.isEmpty()) {
continue;
}
int index1 = format.indexOf('{');
if (index1 == -1 || index1 == format.length() - 1) {
continue;
}
int index2 = format.lastIndexOf('}');
if (index2 == -1 || index2 < index1) {
continue;
}
String key1 = format.substring(0, index1);
String key2 = format.substring(index2 + 1);
AggregationMessageFormat value = new AggregationMessageFormat(format);
buildFormatTree(formats, key1.toCharArray(), key2.toCharArray(), value);
}
m_formats = formats;
}
}
package com.dianping.cat.consumer.problem.aggregation;
package com.dianping.cat.config;
import java.text.ParseException;
......
package com.dianping.cat.consumer.problem.aggregation;
package com.dianping.cat.config;
import java.util.HashMap;
import java.util.Map;
......@@ -103,6 +103,6 @@ public class TrieTreeNode {
public String toString() {
return "TrieTreeKey [m_ch=" + m_ch + ", m_isPrefix=" + m_isPrefix + "]";
}
}
}
package com.dianping.cat.config;
import java.util.List;
import com.dianping.cat.configuration.url.pattern.entity.PatternItem;
public interface UrlPatternHandler {
/**
* register aggregation rule to handler
*
* @param formats
* page type and domain to rule List Map
*/
public void register(List<PatternItem> rules);
/**
* parse input to output use aggregation rule
*
* @param input
* @return string after parse
*/
public String handle(String input);
}
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="url-pattern" root="true">
<entity-ref name="pattern-item" type="list" names="pattern-items" />
</entity>
<entity name="pattern-item">
<attribute name="group" value-type="String" />
<attribute name="name" value-type="String" />
<attribute name="pattern" value-type="String" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="url-pattern-codegen.xml" />
<file path="url-pattern-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.configuration.url.pattern" enable-merger="true" enable-sax-parser="true"
enable-base-visitor="true" enable-json-parser="true" enable-json-builder="true" enable-native-parser="true" enable-native-builder="true"
enable-xml-parser="false" enable-xml-builder="false">
<entity name="url-pattern" root="true">
<entity-ref name="pattern-item" type="map" names="pattern-items" method-find-or-create="true"/>
</entity>
<entity name="pattern-item">
<attribute name="group" value-type="String" />
<attribute name="name" value-type="String" key="true"/>
<attribute name="pattern" value-type="String" />
</entity>
</model>
\ No newline at end of file
......@@ -67,6 +67,22 @@
<role>com.dianping.cat.message.spi.core.TcpSocketReceiver$DecodeMessageTask</role>
<implementation>com.dianping.cat.message.spi.core.TcpSocketReceiver$DecodeMessageTask</implementation>
</component>
<component>
<role>com.dianping.cat.config.UrlPatternHandler</role>
<implementation>com.dianping.cat.config.DefaultUrlPatternHandler</implementation>
</component>
<component>
<role>com.dianping.cat.config.UrlPatternConfigManager</role>
<implementation>com.dianping.cat.config.UrlPatternConfigManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.config.ConfigDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.config.UrlPatternHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.storage.dump.MessageBucket</role>
<role-hint>local</role-hint>
......
<url-pattern>
<pattern-item group="GroupWeb" name="index1" pattern="http://i{x}.dpfile.com/{*}"></pattern-item>
<pattern-item group="GroupWeb" name="index2" pattern="http://i{x}.dpfile.com/{*}"></pattern-item>
<pattern-item group="GroupService" name="index3" pattern="http://i{x}.dpfile.com/{*}"></pattern-item>
</url-pattern>
\ No newline at end of file
......@@ -2,7 +2,9 @@ package com.dianping.cat.report.page.monitor;
public enum Action implements org.unidal.web.mvc.Action {
COUNT_API("count"),//default action
AVG_API("avg"),
SUM_API("sum");
private String m_name;
......
......@@ -14,7 +14,7 @@ public class ConfigReloadTask implements Task {
@Inject
private MetricConfigManager m_metricConfigManager;
@Override
public String getName() {
return "Config-Reload";
......
......@@ -15,6 +15,14 @@ public enum Action implements org.unidal.web.mvc.Action {
AGGREGATION_DELETE("aggregationDelete"),
URL_PATTERN_ALL("urlPatterns"),
URL_PATTERN_UPDATE("urlPatternUpdate"),
URL_PATTERN_UPDATE_SUBMIT("urlPatternUpdateSubmit"),
URL_PATTERN_DELETE("urlPatternDelete"),
TOPOLOGY_GRAPH_NODE_CONFIG_LIST("topologyGraphNodeConfigList"),
TOPOLOGY_GRAPH_NODE_CONFIG_ADD_OR_UPDATE("topologyGraphNodeConfigAdd"),
......
......@@ -24,6 +24,14 @@ public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model>
return JspFile.AGGREGATION_UPATE.getPath();
case AGGREGATION_UPDATE_SUBMIT:
return JspFile.AGGREGATION_ALL.getPath();
case URL_PATTERN_ALL:
return JspFile.URL_PATTERN_ALL.getPath();
case URL_PATTERN_DELETE:
return JspFile.URL_PATTERN_ALL.getPath();
case URL_PATTERN_UPDATE:
return JspFile.URL_PATTERN_UPATE.getPath();
case URL_PATTERN_UPDATE_SUBMIT:
return JspFile.URL_PATTERN_ALL.getPath();
// Node Config
case TOPOLOGY_GRAPH_NODE_CONFIG_ADD_OR_UPDATE:
return JspFile.TOPOLOGY_GRAPH_NODE_CONFIG_ADD_OR_UPDATE.getPath();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册