Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
911746f5
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,发现更多精彩内容 >>
提交
911746f5
编写于
7月 29, 2014
作者:
Y
youyong205
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add the router config function
上级
52f28464
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
229 addition
and
236 deletion
+229
-236
.gitignore
.gitignore
+2
-0
cat-client/src/main/java/com/dianping/cat/CatClientModule.java
...lient/src/main/java/com/dianping/cat/CatClientModule.java
+0
-5
cat-client/src/main/java/com/dianping/cat/configuration/ClientConfigManager.java
...a/com/dianping/cat/configuration/ClientConfigManager.java
+6
-2
cat-client/src/main/java/com/dianping/cat/configuration/ClientConfigReloader.java
.../com/dianping/cat/configuration/ClientConfigReloader.java
+0
-120
cat-client/src/main/java/com/dianping/cat/message/io/ChannelManager.java
...main/java/com/dianping/cat/message/io/ChannelManager.java
+47
-26
cat-client/src/main/java/com/dianping/cat/message/io/TcpSocketSender.java
...ain/java/com/dianping/cat/message/io/TcpSocketSender.java
+3
-0
cat-home/src/main/java/com/dianping/cat/build/ReportServiceComponentConfigurator.java
...ianping/cat/build/ReportServiceComponentConfigurator.java
+4
-0
cat-home/src/main/java/com/dianping/cat/report/service/impl/RouterConfigService.java
...dianping/cat/report/service/impl/RouterConfigService.java
+3
-4
cat-home/src/main/java/com/dianping/cat/report/task/router/RouterConfigBuilder.java
.../dianping/cat/report/task/router/RouterConfigBuilder.java
+42
-31
cat-home/src/main/java/com/dianping/cat/system/config/RouterConfigManager.java
...a/com/dianping/cat/system/config/RouterConfigManager.java
+27
-17
cat-home/src/main/java/com/dianping/cat/system/page/router/Handler.java
...ain/java/com/dianping/cat/system/page/router/Handler.java
+2
-11
cat-home/src/main/java/com/dianping/cat/system/page/router/Payload.java
...ain/java/com/dianping/cat/system/page/router/Payload.java
+1
-2
cat-home/src/main/resources/META-INF/dal/model/router-codegen.xml
.../src/main/resources/META-INF/dal/model/router-codegen.xml
+1
-0
cat-home/src/main/resources/META-INF/dal/model/router-model.xml
...me/src/main/resources/META-INF/dal/model/router-model.xml
+2
-1
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+31
-0
cat-home/src/main/resources/config/default-router-config.xml
cat-home/src/main/resources/config/default-router-config.xml
+16
-11
cat-home/src/test/java/com/dianping/cat/report/analyzer/RouterBuilderTest.java
...a/com/dianping/cat/report/analyzer/RouterBuilderTest.java
+36
-0
cat-maven-plugin/src/main/resources/com/dianping/cat/plugin/Cat.sql
...plugin/src/main/resources/com/dianping/cat/plugin/Cat.sql
+6
-6
未找到文件。
.gitignore
浏览文件 @
911746f5
...
...
@@ -11,3 +11,5 @@
cat-client/src/main/resources/com/dianping/cat/configuration/client/config.xsd
cat-client/src/main/resources/com/dianping/cat/status/model/status.xsd
cat-client/src/test/java/com/dianping/cat/message/io/ChannelManagerTest.java
cat-client/src/main/java/com/dianping/cat/CatClientModule.java
浏览文件 @
911746f5
...
...
@@ -14,7 +14,6 @@ import org.unidal.initialization.Module;
import
org.unidal.initialization.ModuleContext
;
import
com.dianping.cat.configuration.ClientConfigManager
;
import
com.dianping.cat.configuration.ClientConfigReloader
;
import
com.dianping.cat.configuration.client.entity.ClientConfig
;
import
com.dianping.cat.message.internal.MilliSecondTimer
;
import
com.dianping.cat.message.io.TransportManager
;
...
...
@@ -56,10 +55,6 @@ public class CatClientModule extends AbstractModule {
ClientConfig
config
=
clientConfigManager
.
getClientConfig
();
if
(
config
!=
null
)
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
ClientConfigReloader
(
clientConfigFile
.
getAbsolutePath
(),
config
));
}
// MmapConsumerTask mmapReaderTask = ctx.lookup(MmapConsumerTask.class);
// Threads.forGroup("Cat").start(mmapReaderTask);
}
...
...
cat-client/src/main/java/com/dianping/cat/configuration/ClientConfigManager.java
浏览文件 @
911746f5
...
...
@@ -157,8 +157,12 @@ public class ClientConfigManager implements LogEnabled {
List
<
Server
>
servers
=
m_config
.
getServers
();
for
(
Server
server
:
servers
)
{
return
String
.
format
(
"http://%s:%d/cat/s/router?domain=%s"
,
server
.
getIp
(),
server
.
getPort
(),
getDomain
()
.
getId
());
Integer
httpPort
=
server
.
getHttpPort
();
if
(
httpPort
==
null
)
{
httpPort
=
8080
;
}
return
String
.
format
(
"http://%s:%d/cat/s/router?domain=%s"
,
server
.
getIp
(),
httpPort
,
getDomain
().
getId
());
}
}
return
null
;
...
...
cat-client/src/main/java/com/dianping/cat/configuration/ClientConfigReloader.java
已删除
100644 → 0
浏览文件 @
52f28464
package
com.dianping.cat.configuration
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.Map
;
import
org.unidal.helper.Files
;
import
org.unidal.helper.Threads.Task
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.client.entity.ClientConfig
;
import
com.dianping.cat.configuration.client.entity.Domain
;
import
com.dianping.cat.configuration.client.transform.DefaultSaxParser
;
import
com.dianping.cat.message.Message
;
public
class
ClientConfigReloader
implements
Task
{
private
static
final
String
CAT_CLIENT_XML
=
"/META-INF/cat/client.xml"
;
private
ClientConfig
m_config
;
private
File
m_file
;
private
long
m_lastModifyTime
;
private
volatile
boolean
m_active
=
true
;
public
ClientConfigReloader
(
String
fileName
,
ClientConfig
config
)
{
m_config
=
config
;
m_file
=
new
File
(
fileName
);
m_lastModifyTime
=
m_file
.
lastModified
();
}
public
ClientConfig
getClientConfig
()
throws
IOException
,
SAXException
{
ClientConfig
clientConfig
=
null
;
InputStream
in
=
Thread
.
currentThread
().
getContextClassLoader
().
getResourceAsStream
(
CAT_CLIENT_XML
);
if
(
in
==
null
)
{
in
=
Cat
.
class
.
getResourceAsStream
(
CAT_CLIENT_XML
);
}
if
(
in
!=
null
)
{
String
xml
=
Files
.
forIO
().
readFrom
(
in
,
"utf-8"
);
clientConfig
=
DefaultSaxParser
.
parse
(
xml
);
}
String
content
=
Files
.
forIO
().
readFrom
(
m_file
,
"utf-8"
);
ClientConfig
globalConfig
=
DefaultSaxParser
.
parse
(
content
);
if
(
globalConfig
!=
null
&&
clientConfig
!=
null
)
{
globalConfig
.
accept
(
new
ClientConfigMerger
(
clientConfig
));
}
return
clientConfig
;
}
@Override
public
String
getName
()
{
return
"ClientConfigReloader"
;
}
private
boolean
isActive
()
{
synchronized
(
this
)
{
return
m_active
;
}
}
@Override
public
void
run
()
{
while
(
isActive
())
{
try
{
try
{
long
now
=
m_file
.
lastModified
();
if
(
now
>
m_lastModifyTime
)
{
ClientConfig
newConfig
=
getClientConfig
();
Map
<
String
,
Domain
>
domains
=
newConfig
.
getDomains
();
Domain
firstDomain
=
domains
.
isEmpty
()
?
null
:
domains
.
values
().
iterator
().
next
();
boolean
catEnable
=
false
;
boolean
oldEnabled
=
m_config
.
isEnabled
();
if
(
firstDomain
!=
null
)
{
if
(
firstDomain
.
getEnabled
()
!=
null
&&
firstDomain
.
getEnabled
()
==
true
)
{
catEnable
=
true
;
}
}
if
(
oldEnabled
!=
catEnable
)
{
if
(
oldEnabled
)
{
Cat
.
getProducer
().
logEvent
(
"System"
,
"Reload:"
+
catEnable
,
Message
.
SUCCESS
,
String
.
format
(
"Change from %s to %s"
,
oldEnabled
,
catEnable
));
}
synchronized
(
m_config
)
{
m_config
.
setEnabled
(
catEnable
);
}
if
(
catEnable
)
{
Cat
.
getProducer
().
logEvent
(
"System"
,
"Reload:"
+
catEnable
,
Message
.
SUCCESS
,
String
.
format
(
"Change from %s to %s"
,
oldEnabled
,
catEnable
));
}
}
}
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
Thread
.
sleep
(
2000L
);
}
catch
(
InterruptedException
e
)
{
m_active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
m_active
=
false
;
}
}
\ No newline at end of file
cat-client/src/main/java/com/dianping/cat/message/io/ChannelManager.java
浏览文件 @
911746f5
...
...
@@ -62,27 +62,33 @@ public class ChannelManager implements Task {
private
String
m_lastServers
;
private
List
<
InetSocketAddress
>
parse
(
String
content
)
{
List
<
String
>
strs
=
Splitters
.
by
(
";"
).
noEmptyItem
().
split
(
content
);
List
<
InetSocketAddress
>
address
=
new
ArrayList
<
InetSocketAddress
>();
try
{
List
<
String
>
strs
=
Splitters
.
by
(
";"
).
noEmptyItem
().
split
(
content
);
List
<
InetSocketAddress
>
address
=
new
ArrayList
<
InetSocketAddress
>();
for
(
String
str
:
strs
)
{
List
<
String
>
items
=
Splitters
.
by
(
":"
).
noEmptyItem
().
split
(
str
);
for
(
String
str
:
strs
)
{
List
<
String
>
items
=
Splitters
.
by
(
":"
).
noEmptyItem
().
split
(
str
);
address
.
add
(
new
InetSocketAddress
(
items
.
get
(
0
),
Integer
.
parseInt
(
items
.
get
(
1
))));
address
.
add
(
new
InetSocketAddress
(
items
.
get
(
0
),
Integer
.
parseInt
(
items
.
get
(
1
))));
}
return
address
;
}
catch
(
Exception
e
)
{
m_logger
.
error
(
e
.
getMessage
(),
e
);
}
return
address
;
return
new
ArrayList
<
InetSocketAddress
>()
;
}
private
String
getServerConfig
()
{
try
{
InputStream
currentServer
=
Urls
.
forIO
().
readTimeout
(
3000
).
connectTimeout
(
1000
)
.
openStream
(
m_configManager
.
getServerConfigUrl
()
);
String
url
=
m_configManager
.
getServerConfigUrl
();
InputStream
currentServer
=
Urls
.
forIO
().
readTimeout
(
3000
).
connectTimeout
(
1000
).
openStream
(
url
);
String
content
=
Files
.
forIO
().
readFrom
(
currentServer
,
"utf-8"
);
return
content
.
trim
();
}
catch
(
Exception
e
)
{
return
null
;
}
return
null
;
}
private
Pair
<
Boolean
,
String
>
serverConfigChanged
()
{
...
...
@@ -109,18 +115,30 @@ public class ChannelManager implements Task {
}
}
private
void
initChannel
(
List
<
InetSocketAddress
>
serverAddresses
)
{
m_serverAddresses
=
serverAddresses
;
int
len
=
serverAddresses
.
size
();
private
void
initChannel
(
List
<
InetSocketAddress
>
addresses
)
{
try
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
InetSocketAddress
address
:
addresses
)
{
sb
.
append
(
address
.
getAddress
().
getHostAddress
()).
append
(
":"
).
append
(
address
.
getPort
()).
append
(
','
);
}
m_logger
.
info
(
"init CAT server:"
+
sb
.
toString
());
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
ChannelFuture
future
=
createChannel
(
serverAddresses
.
get
(
i
)
);
m_serverAddresses
=
addresses
;
int
len
=
addresses
.
size
(
);
if
(
future
!=
null
)
{
m_activeFuture
=
future
;
m_activeIndex
=
i
;
break
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
ChannelFuture
future
=
createChannel
(
addresses
.
get
(
i
));
if
(
future
!=
null
)
{
m_activeFuture
=
future
;
m_activeIndex
=
i
;
break
;
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
// ignore
}
}
...
...
@@ -146,7 +164,7 @@ public class ChannelManager implements Task {
bootstrap
.
setOption
(
"keepAlive"
,
true
);
m_bootstrap
=
bootstrap
;
String
serverConfig
=
getServerConfig
();
if
(
serverConfig
!=
null
)
{
...
...
@@ -218,13 +236,16 @@ public class ChannelManager implements Task {
}
private
boolean
shouldCheckServerConfig
(
int
count
)
{
int
duration
=
3600
;
if
(
count
%
(
duration
)
==
0
)
{
return
true
;
}
else
{
return
false
;
}
return
true
;
int
duration
=
3600
;
if
(
count
%
(
duration
)
==
0
)
{
return
true
;
}
else
{
return
false
;
}
}
@Override
...
...
cat-client/src/main/java/com/dianping/cat/message/io/TcpSocketSender.java
浏览文件 @
911746f5
...
...
@@ -95,6 +95,8 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
MessageTree
tree
=
m_queue
.
poll
();
if
(
tree
!=
null
)
{
System
.
out
.
println
(
"write to===="
+
future
.
getChannel
().
getRemoteAddress
());
sendInternal
(
tree
);
tree
.
setMessage
(
null
);
}
...
...
@@ -102,6 +104,7 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
m_logger
.
error
(
"Error when sending message over TCP socket!"
,
t
);
}
}
else
{
System
.
out
.
println
(
"channel can't write"
);
try
{
Thread
.
sleep
(
5
);
}
catch
(
Exception
e
)
{
...
...
cat-home/src/main/java/com/dianping/cat/build/ReportServiceComponentConfigurator.java
浏览文件 @
911746f5
...
...
@@ -40,6 +40,7 @@ import com.dianping.cat.report.service.impl.MatrixReportService;
import
com.dianping.cat.report.service.impl.MetricReportService
;
import
com.dianping.cat.report.service.impl.NetTopologyReportService
;
import
com.dianping.cat.report.service.impl.ProblemReportService
;
import
com.dianping.cat.report.service.impl.RouterConfigService
;
import
com.dianping.cat.report.service.impl.ServiceReportService
;
import
com.dianping.cat.report.service.impl.StateReportService
;
import
com.dianping.cat.report.service.impl.TopReportService
;
...
...
@@ -90,6 +91,9 @@ public class ReportServiceComponentConfigurator extends AbstractResourceConfigur
all
.
add
(
C
(
ReportService
.
class
,
Constants
.
REPORT_ALERT
,
AlertReportService
.
class
).
req
(
HourlyReportDao
.
class
,
DailyReportDao
.
class
,
WeeklyReportDao
.
class
,
MonthlyReportDao
.
class
,
HourlyReportContentDao
.
class
,
DailyReportContentDao
.
class
,
WeeklyReportContentDao
.
class
,
MonthlyReportContentDao
.
class
));
all
.
add
(
C
(
ReportService
.
class
,
Constants
.
REPORT_ROUTER
,
RouterConfigService
.
class
).
req
(
HourlyReportDao
.
class
,
DailyReportDao
.
class
,
WeeklyReportDao
.
class
,
MonthlyReportDao
.
class
,
HourlyReportContentDao
.
class
,
DailyReportContentDao
.
class
,
WeeklyReportContentDao
.
class
,
MonthlyReportContentDao
.
class
));
all
.
add
(
C
(
ReportService
.
class
,
TopAnalyzer
.
ID
,
TopReportService
.
class
).
req
(
HourlyReportDao
.
class
,
HourlyReportContentDao
.
class
));
...
...
cat-home/src/main/java/com/dianping/cat/report/service/impl/RouterConfigService.java
浏览文件 @
911746f5
...
...
@@ -28,17 +28,16 @@ public class RouterConfigService extends AbstractReportService<RouterConfig> {
@Override
public
RouterConfig
queryDailyReport
(
String
domain
,
Date
start
,
Date
end
)
{
long
startTime
=
start
.
getTime
();
String
name
=
Constants
.
REPORT_ROUTER
;
try
{
DailyReport
report
=
m_dailyReportDao
.
findByDomainNamePeriod
(
domain
,
name
,
new
Date
(
startTime
)
,
DailyReport
report
=
m_dailyReportDao
.
findByDomainNamePeriod
(
domain
,
name
,
start
,
DailyReportEntity
.
READSET_FULL
);
RouterConfig
config
=
queryFromDailyBinary
(
report
.
getId
(),
domain
);
return
config
;
}
catch
(
DalNotFoundException
e
)
{
//ignore
//
ignore
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
...
...
@@ -51,7 +50,7 @@ public class RouterConfigService extends AbstractReportService<RouterConfig> {
if
(
content
!=
null
)
{
return
DefaultNativeParser
.
parse
(
content
.
getContent
());
}
else
{
return
n
ew
RouterConfig
(
domain
)
;
return
n
ull
;
}
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/router/RouterConfigBuilder.java
浏览文件 @
911746f5
package
com.dianping.cat.report.task.router
;
import
java.util.Collection
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
...
...
@@ -57,7 +58,7 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
}
};
numbers
=
MapUtils
.
sortMap
(
numbers
,
compator
);
Map
<
S
tring
,
Long
>
servers
=
findAvaliableServers
();
Map
<
S
erver
,
Long
>
servers
=
findAvaliableServers
();
processMainServer
(
servers
,
routerConfig
,
numbers
);
processBackServer
(
servers
,
routerConfig
,
numbers
);
...
...
@@ -73,7 +74,6 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
dailyReport
.
setType
(
1
);
byte
[]
binaryContent
=
DefaultNativeBuilder
.
build
(
routerConfig
);
System
.
out
.
println
(
routerConfig
);
m_reportService
.
insertDailyReport
(
dailyReport
,
binaryContent
);
return
true
;
}
...
...
@@ -93,21 +93,21 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
throw
new
RuntimeException
(
"router builder don't support weekly task"
);
}
private
Map
<
S
tring
,
Long
>
findAvaliableServers
()
{
List
<
S
tring
>
servers
=
m_configManager
.
queryEnableServers
();
Map
<
S
tring
,
Long
>
result
=
new
HashMap
<
String
,
Long
>();
private
Map
<
S
erver
,
Long
>
findAvaliableServers
()
{
List
<
S
erver
>
servers
=
m_configManager
.
queryEnableServers
();
Map
<
S
erver
,
Long
>
result
=
new
HashMap
<
Server
,
Long
>();
for
(
S
tring
server
:
servers
)
{
for
(
S
erver
server
:
servers
)
{
result
.
put
(
server
,
0L
);
}
return
result
;
}
private
S
tring
findMinProcessServer
(
Map
<
String
,
Long
>
maps
)
{
private
S
erver
findMinProcessServer
(
Map
<
Server
,
Long
>
maps
)
{
long
min
=
Long
.
MAX_VALUE
;
S
tring
result
=
null
;
S
erver
result
=
null
;
for
(
Entry
<
S
tring
,
Long
>
entry
:
maps
.
entrySet
())
{
for
(
Entry
<
S
erver
,
Long
>
entry
:
maps
.
entrySet
())
{
Long
value
=
entry
.
getValue
();
if
(
value
<
min
)
{
...
...
@@ -118,60 +118,71 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
return
result
;
}
private
void
processBackServer
(
Map
<
String
,
Long
>
servers
,
RouterConfig
routerConfig
,
Map
<
String
,
Long
>
numbers
)
{
Map
<
String
,
Map
<
String
,
Long
>>
backServers
=
new
LinkedHashMap
<
String
,
Map
<
String
,
Long
>>();
String
backUpServer
=
m_configManager
.
queryBackUpServer
();
int
port
=
m_configManager
.
queryPort
();
private
void
addServerList
(
List
<
Server
>
servers
,
Server
server
)
{
for
(
Server
s
:
servers
)
{
if
(
s
.
getId
().
equals
(
server
.
getId
()))
{
return
;
}
}
servers
.
add
(
server
);
}
for
(
Domain
domain
:
routerConfig
.
getDomains
().
values
())
{
private
void
processBackServer
(
Map
<
Server
,
Long
>
servers
,
RouterConfig
routerConfig
,
Map
<
String
,
Long
>
numbers
)
{
Map
<
Server
,
Map
<
Server
,
Long
>>
backServers
=
new
LinkedHashMap
<
Server
,
Map
<
Server
,
Long
>>();
Server
backUpServer
=
m_configManager
.
queryBackUpServer
();
Collection
<
Domain
>
values
=
routerConfig
.
getDomains
().
values
();
for
(
Domain
domain
:
values
)
{
List
<
Server
>
domainServers
=
domain
.
getServers
();
String
domainName
=
domain
.
getId
();
Domain
defaultDomainConfig
=
m_configManager
.
getRouterConfig
().
getDomains
().
get
(
domainName
);
if
(
defaultDomainConfig
==
null
)
{
String
server
=
domain
.
getServers
().
get
(
0
).
getId
();
Map
<
String
,
Long
>
serverProcess
=
backServers
.
get
(
server
);
Server
server
=
domain
.
getServers
().
get
(
0
);
Map
<
Server
,
Long
>
serverProcess
=
backServers
.
get
(
server
);
if
(
serverProcess
==
null
)
{
serverProcess
=
new
LinkedHashMap
<
S
tring
,
Long
>();
serverProcess
=
new
LinkedHashMap
<
S
erver
,
Long
>();
for
(
Entry
<
S
tring
,
Long
>
entry
:
servers
.
entrySet
())
{
for
(
Entry
<
S
erver
,
Long
>
entry
:
servers
.
entrySet
())
{
if
(!
entry
.
getKey
().
equals
(
server
))
{
serverProcess
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
backServers
.
put
(
server
,
serverProcess
);
}
String
nextServer
=
findMinProcessServer
(
serverProcess
);
Long
oldValue
=
serverProcess
.
get
(
nextServer
);
Server
nextServer
=
findMinProcessServer
(
serverProcess
);
serverProcess
.
put
(
nextServer
,
oldValue
+
numbers
.
get
(
domain
.
getId
()));
domain
.
addServer
(
new
Server
().
setId
(
nextServer
).
setPort
(
port
));
domain
.
addServer
(
new
Server
().
setId
(
backUpServer
).
setPort
(
port
));
if
(
nextServer
!=
null
)
{
Long
oldValue
=
serverProcess
.
get
(
nextServer
);
serverProcess
.
put
(
nextServer
,
oldValue
+
numbers
.
get
(
domain
.
getId
()));
addServerList
(
domainServers
,
nextServer
);
}
addServerList
(
domainServers
,
backUpServer
);
}
}
}
private
void
processMainServer
(
Map
<
String
,
Long
>
servers
,
RouterConfig
routerConfig
,
Map
<
String
,
Long
>
numbers
)
{
int
port
=
m_configManager
.
queryPort
();
private
void
processMainServer
(
Map
<
Server
,
Long
>
servers
,
RouterConfig
routerConfig
,
Map
<
String
,
Long
>
numbers
)
{
for
(
Entry
<
String
,
Long
>
entry
:
numbers
.
entrySet
())
{
String
domainName
=
entry
.
getKey
();
Domain
defaultDomainConfig
=
m_configManager
.
getRouterConfig
().
getDomains
().
get
(
domainName
);
Long
value
=
entry
.
getValue
();
if
(
defaultDomainConfig
==
null
)
{
S
tring
server
=
findMinProcessServer
(
servers
);
S
erver
server
=
findMinProcessServer
(
servers
);
Long
oldValue
=
servers
.
get
(
server
);
Domain
domainConfig
=
new
Domain
(
domainName
);
servers
.
put
(
server
,
oldValue
+
value
);
domainConfig
.
addServer
(
new
Server
().
setId
(
server
).
setPort
(
port
)
);
domainConfig
.
addServer
(
server
);
routerConfig
.
addDomain
(
domainConfig
);
}
else
{
routerConfig
.
addDomain
(
defaultDomainConfig
);
S
tring
server
=
defaultDomainConfig
.
getServers
().
get
(
0
).
getId
(
);
S
erver
server
=
defaultDomainConfig
.
getServers
().
get
(
0
);
Long
oldValue
=
servers
.
get
(
server
);
if
(
oldValue
!=
null
)
{
...
...
cat-home/src/main/java/com/dianping/cat/system/config/RouterConfigManager.java
浏览文件 @
911746f5
package
com.dianping.cat.system.config
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
...
...
@@ -16,7 +18,9 @@ import com.dianping.cat.core.config.Config;
import
com.dianping.cat.core.config.ConfigDao
;
import
com.dianping.cat.core.config.ConfigEntity
;
import
com.dianping.cat.home.router.entity.DefaultServer
;
import
com.dianping.cat.home.router.entity.Domain
;
import
com.dianping.cat.home.router.entity.RouterConfig
;
import
com.dianping.cat.home.router.entity.Server
;
import
com.dianping.cat.home.router.transform.DefaultSaxParser
;
public
class
RouterConfigManager
implements
Initializable
,
LogEnabled
{
...
...
@@ -41,35 +45,41 @@ public class RouterConfigManager implements Initializable, LogEnabled {
return
m_routerConfig
;
}
public
S
tring
queryBackUpServer
()
{
return
m_routerConfig
.
getBackupServer
(
);
public
S
erver
queryBackUpServer
()
{
return
new
Server
().
setId
(
m_routerConfig
.
getBackupServer
()).
setPort
(
m_routerConfig
.
getBackupServerPort
()
);
}
public
int
queryPort
()
{
return
m_routerConfig
.
getPort
();
}
public
List
<
Server
>
queryServersByDomain
(
String
domain
)
{
Domain
domainConfig
=
m_routerConfig
.
findDomain
(
domain
);
List
<
Server
>
result
=
new
ArrayList
<
Server
>();
if
(
domainConfig
==
null
)
{
Map
<
Server
,
Integer
>
map
=
new
HashMap
<
Server
,
Integer
>();
List
<
Server
>
servers
=
queryEnableServers
();
int
length
=
servers
.
size
();
int
index
=
(
int
)
(
Math
.
random
()
*
length
);
public
List
<
String
>
queryRandomServers
()
{
List
<
String
>
servers
=
queryEnableServers
();
int
length
=
servers
.
size
();
int
index
=
(
int
)
(
Math
.
random
()
*
length
);
List
<
String
>
result
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
2
;
i
++)
{
map
.
put
(
servers
.
get
((
index
+
1
)
%
length
),
0
);
}
map
.
put
(
queryBackUpServer
(),
0
);
for
(
int
i
=
0
;
i
<
2
;
i
++)
{
servers
.
add
(
servers
.
get
((
index
+
1
)
%
index
));
result
=
new
ArrayList
<
Server
>(
map
.
keySet
());
}
else
{
for
(
Server
server
:
domainConfig
.
getServers
())
{
result
.
add
(
server
);
}
}
servers
.
add
(
queryBackUpServer
());
return
result
;
}
public
List
<
S
tring
>
queryEnableServers
()
{
public
List
<
S
erver
>
queryEnableServers
()
{
List
<
DefaultServer
>
servers
=
m_routerConfig
.
getDefaultServers
();
List
<
S
tring
>
result
=
new
ArrayList
<
String
>();
List
<
S
erver
>
result
=
new
ArrayList
<
Server
>();
for
(
DefaultServer
server
:
servers
)
{
if
(
server
.
isEnable
())
{
result
.
add
(
server
.
getId
(
));
result
.
add
(
new
Server
().
setId
(
server
.
getId
()).
setPort
(
server
.
getPort
()
));
}
}
...
...
cat-home/src/main/java/com/dianping/cat/system/page/router/Handler.java
浏览文件 @
911746f5
...
...
@@ -57,9 +57,9 @@ public class Handler implements PageHandler<Context> {
if
(
domain
==
null
)
{
m_configManager
.
getRouterConfig
().
getDefaultServers
();
List
<
S
tring
>
servers
=
m_configManager
.
queryRandomServers
(
);
List
<
S
erver
>
servers
=
m_configManager
.
queryServersByDomain
(
payload
.
getDomain
()
);
str
=
buildServerStr
(
servers
,
m_configManager
.
queryPort
()
);
str
=
buildServerStr
(
servers
);
}
else
{
List
<
Server
>
servers
=
domain
.
getServers
();
...
...
@@ -84,15 +84,6 @@ public class Handler implements PageHandler<Context> {
}
}
private
String
buildServerStr
(
List
<
String
>
servers
,
int
port
)
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
server
:
servers
)
{
sb
.
append
(
server
).
append
(
":"
).
append
(
port
).
append
(
";"
);
}
return
sb
.
toString
();
}
private
String
buildServerStr
(
List
<
Server
>
servers
)
{
StringBuilder
sb
=
new
StringBuilder
();
...
...
cat-home/src/main/java/com/dianping/cat/system/page/router/Payload.java
浏览文件 @
911746f5
package
com.dianping.cat.system.page.router
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
...
...
@@ -36,7 +35,7 @@ public class Payload implements ActionPayload<SystemPage, Action> {
public
Date
getDate
()
{
try
{
return
m_sdf
.
parse
(
m_date
);
}
catch
(
Parse
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
TimeUtil
.
getCurrentDay
(-
1
);
}
}
...
...
cat-home/src/main/resources/META-INF/dal/model/router-codegen.xml
浏览文件 @
911746f5
...
...
@@ -6,6 +6,7 @@
</entity>
<entity
name=
"default-server"
>
<attribute
name=
"id"
value-type=
"String"
/>
<attribute
name=
"port"
value-type=
"int"
/>
<attribute
name=
"enable"
value-type=
"boolean"
/>
</entity>
<entity
name=
"domain"
>
...
...
cat-home/src/main/resources/META-INF/dal/model/router-model.xml
浏览文件 @
911746f5
...
...
@@ -6,7 +6,7 @@
<attribute
name=
"startTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"domain"
value-type=
"String"
key=
"true"
/>
<attribute
name=
"backup-server"
value-type=
"String"
/>
<attribute
name=
"
port"
value-type=
"int"
/>
<attribute
name=
"
backup-server-port"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"endTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<entity-ref
name=
"domain"
type=
"map"
names=
"domains"
method-find-or-create=
'true'
/>
</entity>
...
...
@@ -16,5 +16,6 @@
</entity>
<entity
name=
"server"
>
<attribute
name=
"id"
value-type=
"String"
/>
<attribute
name=
"port"
value-type=
"int"
primitive=
"true"
/>
</entity>
</model>
\ No newline at end of file
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
911746f5
...
...
@@ -1219,6 +1219,37 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.service.ReportService
</role>
<role-hint>
router
</role-hint>
<implementation>
com.dianping.cat.report.service.impl.RouterConfigService
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.core.dal.HourlyReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.core.dal.DailyReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.core.dal.WeeklyReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.core.dal.MonthlyReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.core.dal.HourlyReportContentDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.home.dal.report.DailyReportContentDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.home.dal.report.WeeklyReportContentDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.home.dal.report.MonthlyReportContentDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.service.ReportService
</role>
<role-hint>
top
</role-hint>
...
...
cat-home/src/main/resources/config/default-router-config.xml
浏览文件 @
911746f5
<router-config>
<default-server
id=
"10.1.6.101"
weight=
"1"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.101"
weight=
"1"
port=
"2280"
enable=
"false"
/>
<default-server
id=
"10.1.6.101"
weight=
"1"
port=
"2280"
enable=
"true"
/>
<domain
id=
"Cat"
>
<server
id=
"10.1.6.101"
port=
"2280"
></server>
<server
id=
"10.1.6.102"
port=
"2280"
></server>
<server
id=
"10.1.6.103"
port=
"2280"
></server>
</domain>
<domain></domain>
</router-config>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<router-config
backup-server=
"10.1.6.128"
backup-server-port=
"2280"
>
<default-server
id=
"10.1.101.84"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.110.21"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.110.23"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.110.57"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.37"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.102"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.108"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.126"
port=
"2280"
enable=
"true"
/>
<default-server
id=
"10.1.6.145"
port=
"2280"
enable=
"true"
/>
<domain
id=
"Cat"
>
<server
id=
"10.1.6.37"
port=
"2280"
/>
<server
id=
"10.1.6.128"
port=
"2280"
/>
</domain>
</router-config>
cat-home/src/test/java/com/dianping/cat/report/analyzer/RouterBuilderTest.java
0 → 100644
浏览文件 @
911746f5
package
com.dianping.cat.report.analyzer
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
org.junit.Test
;
import
org.unidal.lookup.ComponentTestCase
;
import
com.dianping.cat.Constants
;
import
com.dianping.cat.core.dal.Task
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.router.entity.RouterConfig
;
import
com.dianping.cat.report.service.ReportServiceManager
;
import
com.dianping.cat.report.task.spi.ReportFacade
;
public
class
RouterBuilderTest
extends
ComponentTestCase
{
@Test
public
void
test
()
throws
Exception
{
ReportFacade
reportFacade
=
(
ReportFacade
)
lookup
(
ReportFacade
.
class
);
Task
task
=
new
Task
();
Date
reportPeriod
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
parse
(
"2014-07-28"
);
task
.
setReportName
(
Constants
.
REPORT_ROUTER
);
task
.
setReportPeriod
(
reportPeriod
);
task
.
setReportDomain
(
Constants
.
CAT
);
task
.
setTaskType
(
1
);
reportFacade
.
builderReport
(
task
);
ReportServiceManager
manager
=
(
ReportServiceManager
)
lookup
(
ReportServiceManager
.
class
);
RouterConfig
report
=
manager
.
queryRouterConfigReport
(
Constants
.
CAT
,
reportPeriod
,
new
Date
(
reportPeriod
.
getTime
()+
TimeUtil
.
ONE_DAY
));
System
.
err
.
println
(
report
);
}
}
cat-maven-plugin/src/main/resources/com/dianping/cat/plugin/Cat.sql
浏览文件 @
911746f5
...
...
@@ -70,8 +70,8 @@ CREATE TABLE `graph` (
CREATE
TABLE
`hostinfo`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`ip`
varchar
(
50
)
NOT
NULL
COMMENT
'部署机器IP'
,
`domain`
varchar
(
2
56
)
NOT
NULL
COMMENT
'部署机器对应的项目名'
,
`hostname`
varchar
(
2
56
)
DEFAULT
NULL
COMMENT
'机器域名'
,
`domain`
varchar
(
2
00
)
NOT
NULL
COMMENT
'部署机器对应的项目名'
,
`hostname`
varchar
(
2
00
)
DEFAULT
NULL
COMMENT
'机器域名'
,
`creation_date`
datetime
NOT
NULL
,
`last_modified_date`
datetime
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
...
...
@@ -232,13 +232,13 @@ CREATE TABLE `scheduledReportSubscription` (
CREATE
TABLE
`project`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`domain`
varchar
(
256
)
NOT
NULL
COMMENT
'项目名称'
,
`cmdb_domain`
varchar
(
2
56
)
DEFAULT
NULL
COMMENT
'cmdb项目名称'
,
`domain`
varchar
(
128
)
NOT
NULL
COMMENT
'项目名称'
,
`cmdb_domain`
varchar
(
2
00
)
DEFAULT
NULL
COMMENT
'cmdb项目名称'
,
`project_line`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'关联产品线名称'
,
`department`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'关联项目组名称'
,
`owner`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'项目负责人'
,
`email`
varchar
(
2
56
)
DEFAULT
NULL
COMMENT
'项目组邮件'
,
`phone`
varchar
(
2
56
)
DEFAULT
NULL
COMMENT
'联系电话'
,
`email`
varchar
(
2
00
)
DEFAULT
NULL
COMMENT
'项目组邮件'
,
`phone`
varchar
(
2
00
)
DEFAULT
NULL
COMMENT
'联系电话'
,
`creation_date`
datetime
DEFAULT
NULL
COMMENT
'创建时间'
,
`modify_date`
datetime
DEFAULT
NULL
COMMENT
'修改时间'
,
PRIMARY
KEY
(
`id`
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录