Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
f9bfcaa9
C
cat
项目概览
梦中观雨
/
cat
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
cat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f9bfcaa9
编写于
5月 14, 2014
作者:
Y
youyong205
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify the url pattern
上级
a83b02a5
变更
80
展开全部
隐藏空白更改
内联
并排
Showing
80 changed file
with
11151 addition
and
82 deletion
+11151
-82
cat-broker/pom.xml
cat-broker/pom.xml
+3
-3
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiContext.java
...src/main/java/com/dianping/cat/broker/api/ApiContext.java
+54
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiModule.java
.../src/main/java/com/dianping/cat/broker/api/ApiModule.java
+16
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiPage.java
...er/src/main/java/com/dianping/cat/broker/api/ApiPage.java
+75
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpConvert.java
...main/java/com/dianping/cat/broker/api/page/IpConvert.java
+36
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/MonitorEntity.java
.../java/com/dianping/cat/broker/api/page/MonitorEntity.java
+90
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/MonitorManager.java
...java/com/dianping/cat/broker/api/page/MonitorManager.java
+181
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/RequestUtils.java
...n/java/com/dianping/cat/broker/api/page/RequestUtils.java
+50
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Action.java
...n/java/com/dianping/cat/broker/api/page/batch/Action.java
+26
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Context.java
.../java/com/dianping/cat/broker/api/page/batch/Context.java
+7
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java
.../java/com/dianping/cat/broker/api/page/batch/Handler.java
+73
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/JspFile.java
.../java/com/dianping/cat/broker/api/page/batch/JspFile.java
+17
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/JspViewer.java
...ava/com/dianping/cat/broker/api/page/batch/JspViewer.java
+18
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Model.java
...in/java/com/dianping/cat/broker/api/page/batch/Model.java
+15
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Payload.java
.../java/com/dianping/cat/broker/api/page/batch/Payload.java
+50
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Action.java
.../java/com/dianping/cat/broker/api/page/signal/Action.java
+26
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Context.java
...java/com/dianping/cat/broker/api/page/signal/Context.java
+7
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Handler.java
...java/com/dianping/cat/broker/api/page/signal/Handler.java
+64
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/JspFile.java
...java/com/dianping/cat/broker/api/page/signal/JspFile.java
+17
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/JspViewer.java
...va/com/dianping/cat/broker/api/page/signal/JspViewer.java
+18
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Model.java
...n/java/com/dianping/cat/broker/api/page/signal/Model.java
+15
-0
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Payload.java
...java/com/dianping/cat/broker/api/page/signal/Payload.java
+107
-0
cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java
...com/dianping/cat/broker/build/ComponentsConfigurator.java
+31
-0
cat-broker/src/main/java/com/dianping/cat/broker/build/WebComponentConfigurator.java
...m/dianping/cat/broker/build/WebComponentConfigurator.java
+21
-0
cat-broker/src/main/java/com/dianping/cat/broker/view/NavigationBar.java
...main/java/com/dianping/cat/broker/view/NavigationBar.java
+17
-0
cat-broker/src/main/resources/META-INF/cat/client.xml
cat-broker/src/main/resources/META-INF/cat/client.xml
+4
-0
cat-broker/src/main/resources/META-INF/plexus/components.xml
cat-broker/src/main/resources/META-INF/plexus/components.xml
+85
-0
cat-broker/src/main/resources/META-INF/wizard/webapp/manifest.xml
...er/src/main/resources/META-INF/wizard/webapp/manifest.xml
+5
-0
cat-broker/src/main/resources/META-INF/wizard/webapp/wizard.xml
...oker/src/main/resources/META-INF/wizard/webapp/wizard.xml
+13
-0
cat-broker/src/main/webapp/WEB-INF/tags/layout.tag
cat-broker/src/main/webapp/WEB-INF/tags/layout.tag
+64
-0
cat-broker/src/main/webapp/WEB-INF/web.xml
cat-broker/src/main/webapp/WEB-INF/web.xml
+1
-38
cat-broker/src/main/webapp/css/bootstrap-responsive.css
cat-broker/src/main/webapp/css/bootstrap-responsive.css
+1092
-0
cat-broker/src/main/webapp/css/bootstrap.css
cat-broker/src/main/webapp/css/bootstrap.css
+6039
-0
cat-broker/src/main/webapp/img/glyphicons-halflings-white.png
...broker/src/main/webapp/img/glyphicons-halflings-white.png
+0
-0
cat-broker/src/main/webapp/img/glyphicons-halflings.png
cat-broker/src/main/webapp/img/glyphicons-halflings.png
+0
-0
cat-broker/src/main/webapp/js/bootstrap.js
cat-broker/src/main/webapp/js/bootstrap.js
+2027
-0
cat-broker/src/main/webapp/js/jquery-1.8.3.min.js
cat-broker/src/main/webapp/js/jquery-1.8.3.min.js
+2
-0
cat-broker/src/main/webapp/jsp/api/batch.jsp
cat-broker/src/main/webapp/jsp/api/batch.jsp
+1
-0
cat-broker/src/main/webapp/jsp/api/signal.jsp
cat-broker/src/main/webapp/jsp/api/signal.jsp
+1
-0
cat-broker/src/test/java/com/dianping/cat/broker/AllTests.java
...roker/src/test/java/com/dianping/cat/broker/AllTests.java
+15
-0
cat-broker/src/test/java/com/dianping/cat/broker/PostTest.java
...roker/src/test/java/com/dianping/cat/broker/PostTest.java
+33
-0
cat-broker/src/test/java/com/dianping/cat/broker/TestServer.java
...ker/src/test/java/com/dianping/cat/broker/TestServer.java
+52
-0
cat-consumer/pom.xml
cat-consumer/pom.xml
+2
-4
cat-consumer/src/main/java/com/dianping/cat/consumer/problem/aggregation/AggregationConfigManager.java
...onsumer/problem/aggregation/AggregationConfigManager.java
+5
-5
cat-consumer/src/main/java/com/dianping/cat/consumer/problem/aggregation/DefaultAggregationHandler.java
...nsumer/problem/aggregation/DefaultAggregationHandler.java
+3
-0
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-codegen.xml
...main/resources/META-INF/dal/model/url-pattern-codegen.xml
+12
-0
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-manifest.xml
...ain/resources/META-INF/dal/model/url-pattern-manifest.xml
+6
-0
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-model.xml
...c/main/resources/META-INF/dal/model/url-pattern-model.xml
+3
-0
cat-consumer/src/main/resources/META-INF/wizard/model/wizard.xml
...sumer/src/main/resources/META-INF/wizard/model/wizard.xml
+4
-1
cat-consumer/src/test/java/com/dianping/cat/consumer/core/aggregation/CompositeFormatTest.java
...ng/cat/consumer/core/aggregation/CompositeFormatTest.java
+2
-2
cat-consumer/src/test/java/com/dianping/cat/consumer/core/aggregation/DefaultFormatTest.java
...ping/cat/consumer/core/aggregation/DefaultFormatTest.java
+2
-2
cat-consumer/src/test/java/com/dianping/cat/consumer/problem/AggregationConfigManagerTest.java
...ng/cat/consumer/problem/AggregationConfigManagerTest.java
+2
-2
cat-core/pom.xml
cat-core/pom.xml
+1
-0
cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
...n/java/com/dianping/cat/build/ComponentsConfigurator.java
+8
-0
cat-core/src/main/java/com/dianping/cat/config/AggregationMessageFormat.java
...ava/com/dianping/cat/config/AggregationMessageFormat.java
+1
-1
cat-core/src/main/java/com/dianping/cat/config/CompositeFormat.java
...rc/main/java/com/dianping/cat/config/CompositeFormat.java
+1
-1
cat-core/src/main/java/com/dianping/cat/config/DefaultFormat.java
.../src/main/java/com/dianping/cat/config/DefaultFormat.java
+1
-1
cat-core/src/main/java/com/dianping/cat/config/DefaultUrlPatternHandler.java
...ava/com/dianping/cat/config/DefaultUrlPatternHandler.java
+173
-0
cat-core/src/main/java/com/dianping/cat/config/Format.java
cat-core/src/main/java/com/dianping/cat/config/Format.java
+1
-1
cat-core/src/main/java/com/dianping/cat/config/TrieTreeNode.java
...e/src/main/java/com/dianping/cat/config/TrieTreeNode.java
+2
-2
cat-core/src/main/java/com/dianping/cat/config/UrlPatternConfigManager.java
...java/com/dianping/cat/config/UrlPatternConfigManager.java
+160
-0
cat-core/src/main/java/com/dianping/cat/config/UrlPatternHandler.java
.../main/java/com/dianping/cat/config/UrlPatternHandler.java
+25
-0
cat-core/src/main/resources/META-INF/dal/model/url-pattern-codegen.xml
...main/resources/META-INF/dal/model/url-pattern-codegen.xml
+12
-0
cat-core/src/main/resources/META-INF/dal/model/url-pattern-manifest.xml
...ain/resources/META-INF/dal/model/url-pattern-manifest.xml
+6
-0
cat-core/src/main/resources/META-INF/dal/model/url-pattern-model.xml
...c/main/resources/META-INF/dal/model/url-pattern-model.xml
+13
-0
cat-core/src/main/resources/META-INF/plexus/components.xml
cat-core/src/main/resources/META-INF/plexus/components.xml
+16
-0
cat-core/src/test/resources/com/dianping/cat/url-pattern.xml
cat-core/src/test/resources/com/dianping/cat/url-pattern.xml
+5
-0
cat-home/src/main/java/com/dianping/cat/report/page/monitor/Action.java
...ain/java/com/dianping/cat/report/page/monitor/Action.java
+2
-0
cat-home/src/main/java/com/dianping/cat/system/config/ConfigReloadTask.java
...java/com/dianping/cat/system/config/ConfigReloadTask.java
+1
-1
cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java
...main/java/com/dianping/cat/system/page/config/Action.java
+8
-0
cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java
...ain/java/com/dianping/cat/system/page/config/Handler.java
+30
-11
cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java
...ain/java/com/dianping/cat/system/page/config/JspFile.java
+7
-3
cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java
...n/java/com/dianping/cat/system/page/config/JspViewer.java
+8
-0
cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java
.../main/java/com/dianping/cat/system/page/config/Model.java
+20
-0
cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java
...ain/java/com/dianping/cat/system/page/config/Payload.java
+23
-0
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+15
-0
cat-home/src/main/resources/config/default-url-pattern-config.xml
.../src/main/resources/config/default-url-pattern-config.xml
+1
-0
cat-home/src/main/webapp/jsp/system/configTree.jsp
cat-home/src/main/webapp/jsp/system/configTree.jsp
+7
-4
cat-home/src/main/webapp/jsp/system/urlPattern/urlPattern.jsp
...home/src/main/webapp/jsp/system/urlPattern/urlPattern.jsp
+51
-0
cat-home/src/main/webapp/jsp/system/urlPattern/urlPatternUpdate.jsp
...rc/main/webapp/jsp/system/urlPattern/urlPatternUpdate.jsp
+44
-0
未找到文件。
cat-broker/pom.xml
浏览文件 @
f9bfcaa9
...
...
@@ -7,8 +7,8 @@
<version>
1.0.5
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
cat-broker-serv
er
</artifactId>
<name>
cat-broker-serv
er
</name>
<artifactId>
cat-broker-serv
ice
</artifactId>
<name>
cat-broker-serv
ice
</name>
<packaging>
war
</packaging>
<dependencies>
<dependency>
...
...
@@ -148,7 +148,7 @@
<artifactId>
maven-war-plugin
</artifactId>
<version>
2.1.1
</version>
<configuration>
<warName>
cat-broker-serv
er
-${env}-${version}
</warName>
<warName>
cat-broker-serv
ice
-${env}-${version}
</warName>
<webResources>
<resource>
<directory>
src/main/resources
</directory>
...
...
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiContext.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiModule.java
0 → 100644
浏览文件 @
f9bfcaa9
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
{
}
cat-broker/src/main/java/com/dianping/cat/broker/api/ApiPage.java
0 → 100644
浏览文件 @
f9bfcaa9
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
();
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpConvert.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/MonitorEntity.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/MonitorManager.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/RequestUtils.java
0 → 100644
浏览文件 @
f9bfcaa9
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
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Action.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Context.java
0 → 100644
浏览文件 @
f9bfcaa9
package
com.dianping.cat.broker.api.page.batch
;
import
com.dianping.cat.broker.api.ApiContext
;
public
class
Context
extends
ApiContext
<
Payload
>
{
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/JspFile.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/JspViewer.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Model.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Payload.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Action.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Context.java
0 → 100644
浏览文件 @
f9bfcaa9
package
com.dianping.cat.broker.api.page.signal
;
import
com.dianping.cat.broker.api.ApiContext
;
public
class
Context
extends
ApiContext
<
Payload
>
{
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Handler.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/JspFile.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/JspViewer.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Model.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/api/page/signal/Payload.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
}
cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java
0 → 100644
浏览文件 @
f9bfcaa9
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
());
}
}
cat-broker/src/main/java/com/dianping/cat/broker/build/WebComponentConfigurator.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-broker/src/main/java/com/dianping/cat/broker/view/NavigationBar.java
0 → 100644
浏览文件 @
f9bfcaa9
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
};
}
}
cat-broker/src/main/resources/META-INF/cat/client.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?xml version="1.0" encoding="utf-8"?>
<config
mode=
"client"
>
<domain
id=
"cat-broker-server"
/>
</config>
cat-broker/src/main/resources/META-INF/plexus/components.xml
0 → 100644
浏览文件 @
f9bfcaa9
<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>
cat-broker/src/main/resources/META-INF/wizard/webapp/manifest.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"wizard.xml"
/>
</manifest>
cat-broker/src/main/resources/META-INF/wizard/webapp/wizard.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?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>
cat-broker/src/main/webapp/WEB-INF/tags/layout.tag
0 → 100644
浏览文件 @
f9bfcaa9
<
%@
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>
©
2013 Dianping BrokerServer Team
</center></footer>
</div>
</div>
<!--/.fluid-container-->
<script
src=
"${model.webapp}/js/bootstrap.js"
type=
"text/javascript"
></script>
</body>
</html>
cat-broker/src/main/webapp/WEB-INF/web.xml
浏览文件 @
f9bfcaa9
...
...
@@ -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>
...
...
cat-broker/src/main/webapp/css/bootstrap-responsive.css
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-broker/src/main/webapp/css/bootstrap.css
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-broker/src/main/webapp/img/glyphicons-halflings-white.png
0 → 100644
浏览文件 @
f9bfcaa9
8.6 KB
cat-broker/src/main/webapp/img/glyphicons-halflings.png
0 → 100644
浏览文件 @
f9bfcaa9
12.5 KB
cat-broker/src/main/webapp/js/bootstrap.js
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-broker/src/main/webapp/js/jquery-1.8.3.min.js
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-broker/src/main/webapp/jsp/api/batch.jsp
0 → 100644
浏览文件 @
f9bfcaa9
OK
\ No newline at end of file
cat-broker/src/main/webapp/jsp/api/signal.jsp
0 → 100644
浏览文件 @
f9bfcaa9
OK
\ No newline at end of file
cat-broker/src/test/java/com/dianping/cat/broker/AllTests.java
0 → 100644
浏览文件 @
f9bfcaa9
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
{
}
cat-broker/src/test/java/com/dianping/cat/broker/PostTest.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
}
cat-broker/src/test/java/com/dianping/cat/broker/TestServer.java
0 → 100644
浏览文件 @
f9bfcaa9
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
();
}
}
cat-consumer/pom.xml
浏览文件 @
f9bfcaa9
...
...
@@ -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>
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/problem/aggregation/AggregationConfigManager.java
浏览文件 @
f9bfcaa9
...
...
@@ -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
(
queryAggr
ar
ationRules
());
m_handler
.
register
(
queryAggr
eg
ationRules
());
return
storeConfig
();
}
...
...
@@ -69,16 +69,16 @@ public class AggregationConfigManager implements Initializable {
if
(
m_aggregation
==
null
)
{
m_aggregation
=
new
Aggregation
();
}
m_handler
.
register
(
queryAggr
ar
ationRules
());
m_handler
.
register
(
queryAggr
eg
ationRules
());
}
public
boolean
insertAggregationRule
(
AggregationRule
rule
)
{
m_aggregation
.
addAggregationRule
(
rule
);
m_handler
.
register
(
queryAggr
ar
ationRules
());
m_handler
.
register
(
queryAggr
eg
ationRules
());
return
storeConfig
();
}
public
List
<
AggregationRule
>
queryAggr
ar
ationRules
()
{
public
List
<
AggregationRule
>
queryAggr
eg
ationRules
()
{
return
new
ArrayList
<
AggregationRule
>(
m_aggregation
.
getAggregationRules
().
values
());
}
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/problem/aggregation/DefaultAggregationHandler.java
浏览文件 @
f9bfcaa9
...
...
@@ -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
{
...
...
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-codegen.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?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>
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-manifest.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"url-pattern-codegen.xml"
/>
<file
path=
"url-pattern-model.xml"
/>
</manifest>
cat-consumer/src/main/resources/META-INF/dal/model/url-pattern-model.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?xml version="1.0" encoding="UTF-8"?>
<model
model-package=
"com.dianping.cat.consumer.url.pattern"
/>
cat-consumer/src/main/resources/META-INF/wizard/model/wizard.xml
浏览文件 @
f9bfcaa9
...
...
@@ -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>
cat-consumer/src/test/java/com/dianping/cat/consumer/core/aggregation/CompositeFormatTest.java
浏览文件 @
f9bfcaa9
...
...
@@ -8,8 +8,8 @@ import org.junit.Rule;
import
org.junit.Test
;
import
org.junit.rules.ExpectedException
;
import
com.dianping.cat.con
sumer.problem.aggregation
.AggregationMessageFormat
;
import
com.dianping.cat.con
sumer.problem.aggregation
.CompositeFormat
;
import
com.dianping.cat.con
fig
.AggregationMessageFormat
;
import
com.dianping.cat.con
fig
.CompositeFormat
;
public
class
CompositeFormatTest
{
@Rule
...
...
cat-consumer/src/test/java/com/dianping/cat/consumer/core/aggregation/DefaultFormatTest.java
浏览文件 @
f9bfcaa9
...
...
@@ -8,8 +8,8 @@ import org.junit.Rule;
import
org.junit.Test
;
import
org.junit.rules.ExpectedException
;
import
com.dianping.cat.con
sumer.problem.aggregation
.DefaultFormat
;
import
com.dianping.cat.con
sumer.problem.aggregation
.Format
;
import
com.dianping.cat.con
fig
.DefaultFormat
;
import
com.dianping.cat.con
fig
.Format
;
public
class
DefaultFormatTest
{
...
...
cat-consumer/src/test/java/com/dianping/cat/consumer/problem/AggregationConfigManagerTest.java
浏览文件 @
f9bfcaa9
...
...
@@ -46,7 +46,7 @@ public class AggregationConfigManagerTest {
Assert
.
assertEquals
(
3
,
s_storeCount
);
List
<
AggregationRule
>
rules
=
manager
.
queryAggr
ar
ationRules
();
List
<
AggregationRule
>
rules
=
manager
.
queryAggr
eg
ationRules
();
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
.
queryAggr
ar
ationRules
();
List
<
AggregationRule
>
rules
=
manager
.
queryAggr
eg
ationRules
();
Assert
.
assertEquals
(
0
,
rules
.
size
());
}
...
...
cat-core/pom.xml
浏览文件 @
f9bfcaa9
...
...
@@ -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>
...
...
cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
浏览文件 @
f9bfcaa9
...
...
@@ -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
));
...
...
cat-co
nsumer/src/main/java/com/dianping/cat/consumer/problem/aggregation
/AggregationMessageFormat.java
→
cat-co
re/src/main/java/com/dianping/cat/config
/AggregationMessageFormat.java
浏览文件 @
f9bfcaa9
package
com.dianping.cat.con
sumer.problem.aggregation
;
package
com.dianping.cat.con
fig
;
import
java.text.MessageFormat
;
import
java.util.ArrayList
;
...
...
cat-co
nsumer/src/main/java/com/dianping/cat/consumer/problem/aggregation
/CompositeFormat.java
→
cat-co
re/src/main/java/com/dianping/cat/config
/CompositeFormat.java
浏览文件 @
f9bfcaa9
package
com.dianping.cat.con
sumer.problem.aggregation
;
package
com.dianping.cat.con
fig
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
...
...
cat-co
nsumer/src/main/java/com/dianping/cat/consumer/problem/aggregation
/DefaultFormat.java
→
cat-co
re/src/main/java/com/dianping/cat/config
/DefaultFormat.java
浏览文件 @
f9bfcaa9
package
com.dianping.cat.con
sumer.problem.aggregation
;
package
com.dianping.cat.con
fig
;
import
java.text.ParseException
;
...
...
cat-core/src/main/java/com/dianping/cat/config/DefaultUrlPatternHandler.java
0 → 100644
浏览文件 @
f9bfcaa9
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
;
}
}
cat-co
nsumer/src/main/java/com/dianping/cat/consumer/problem/aggregation
/Format.java
→
cat-co
re/src/main/java/com/dianping/cat/config
/Format.java
浏览文件 @
f9bfcaa9
package
com.dianping.cat.con
sumer.problem.aggregation
;
package
com.dianping.cat.con
fig
;
import
java.text.ParseException
;
...
...
cat-co
nsumer/src/main/java/com/dianping/cat/consumer/problem/aggregation
/TrieTreeNode.java
→
cat-co
re/src/main/java/com/dianping/cat/config
/TrieTreeNode.java
浏览文件 @
f9bfcaa9
package
com.dianping.cat.con
sumer.problem.aggregation
;
package
com.dianping.cat.con
fig
;
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
+
"]"
;
}
}
}
cat-core/src/main/java/com/dianping/cat/config/UrlPatternConfigManager.java
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-core/src/main/java/com/dianping/cat/config/UrlPatternHandler.java
0 → 100644
浏览文件 @
f9bfcaa9
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
);
}
cat-core/src/main/resources/META-INF/dal/model/url-pattern-codegen.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?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>
cat-core/src/main/resources/META-INF/dal/model/url-pattern-manifest.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"url-pattern-codegen.xml"
/>
<file
path=
"url-pattern-model.xml"
/>
</manifest>
cat-core/src/main/resources/META-INF/dal/model/url-pattern-model.xml
0 → 100644
浏览文件 @
f9bfcaa9
<?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
cat-core/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
f9bfcaa9
...
...
@@ -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>
...
...
cat-core/src/test/resources/com/dianping/cat/url-pattern.xml
0 → 100644
浏览文件 @
f9bfcaa9
<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
cat-home/src/main/java/com/dianping/cat/report/page/monitor/Action.java
浏览文件 @
f9bfcaa9
...
...
@@ -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
;
...
...
cat-home/src/main/java/com/dianping/cat/system/config/ConfigReloadTask.java
浏览文件 @
f9bfcaa9
...
...
@@ -14,7 +14,7 @@ public class ConfigReloadTask implements Task {
@Inject
private
MetricConfigManager
m_metricConfigManager
;
@Override
public
String
getName
()
{
return
"Config-Reload"
;
...
...
cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java
浏览文件 @
f9bfcaa9
...
...
@@ -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"
),
...
...
cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java
浏览文件 @
f9bfcaa9
...
...
@@ -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
();
...
...
cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/resources/config/default-url-pattern-config.xml
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/system/configTree.jsp
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/system/urlPattern/urlPattern.jsp
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/system/urlPattern/urlPatternUpdate.jsp
0 → 100644
浏览文件 @
f9bfcaa9
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录