Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
ee99dfe9
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,发现更多精彩内容 >>
提交
ee99dfe9
编写于
7月 28, 2014
作者:
L
leon.li
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add new SendManager module, add block queue
上级
4e597b4d
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
384 addition
and
136 deletion
+384
-136
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
...n/java/com/dianping/cat/build/ComponentsConfigurator.java
+17
-17
cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java
...in/java/com/dianping/cat/report/task/alert/BaseAlert.java
+3
-3
cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java
...ianping/cat/report/task/alert/business/BusinessAlert.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java
...nping/cat/report/task/alert/exception/ExceptionAlert.java
+3
-3
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/SendManager.java
...om/dianping/cat/report/task/alert/sender/SendManager.java
+106
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java
.../report/task/alert/sender/decorator/DefaultDecorator.java
+6
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java
...nping/cat/report/task/alert/sender/sender/MailSender.java
+65
-7
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SenderManager.java
...ng/cat/report/task/alert/sender/sender/SenderManager.java
+16
-55
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java
...anping/cat/report/task/alert/sender/sender/SmsSender.java
+48
-7
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java
...ing/cat/report/task/alert/sender/sender/WeixinSender.java
+89
-7
cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java
...ing/cat/report/task/alert/thirdParty/ThirdPartyAlert.java
+3
-3
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+27
-33
未找到文件。
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
浏览文件 @
ee99dfe9
...
...
@@ -66,15 +66,16 @@ import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder;
import
com.dianping.cat.report.task.alert.exception.ExceptionAlert
;
import
com.dianping.cat.report.task.alert.manager.AlertManager
;
import
com.dianping.cat.report.task.alert.network.NetworkAlert
;
import
com.dianping.cat.report.task.alert.sender.SendManager
;
import
com.dianping.cat.report.task.alert.sender.decorator.Decorator
;
import
com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager
;
import
com.dianping.cat.report.task.alert.sender.decorator.MailDecorator
;
import
com.dianping.cat.report.task.alert.sender.decorator.SmsDecorator
;
import
com.dianping.cat.report.task.alert.sender.decorator.WeixinDecorator
;
import
com.dianping.cat.report.task.alert.sender.receiver.Contactor
;
import
com.dianping.cat.report.task.alert.sender.sender.MailSender
;
import
com.dianping.cat.report.task.alert.sender.sender.Sender
;
import
com.dianping.cat.report.task.alert.sender.sender.SenderManager
;
import
com.dianping.cat.report.task.alert.sender.sender.MailSender
;
import
com.dianping.cat.report.task.alert.sender.sender.SmsSender
;
import
com.dianping.cat.report.task.alert.sender.sender.WeixinSender
;
import
com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator
;
...
...
@@ -118,11 +119,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
DataChecker
.
class
,
DefaultDataChecker
.
class
));
all
.
add
(
C
(
RemoteMetricReportService
.
class
).
req
(
ServerConfigManager
.
class
));
all
.
add
(
C
(
Sender
.
class
,
MailSender
.
ID
,
MailSender
.
class
)
.
req
(
MailSMS
.
class
)
);
all
.
add
(
C
(
Sender
.
class
,
MailSender
.
ID
,
MailSender
.
class
));
all
.
add
(
C
(
Sender
.
class
,
SmsSender
.
ID
,
SmsSender
.
class
)
.
req
(
MailSMS
.
class
)
);
all
.
add
(
C
(
Sender
.
class
,
SmsSender
.
ID
,
SmsSender
.
class
));
all
.
add
(
C
(
Sender
.
class
,
WeixinSender
.
ID
,
WeixinSender
.
class
)
.
req
(
MailSMS
.
class
)
);
all
.
add
(
C
(
Sender
.
class
,
WeixinSender
.
ID
,
WeixinSender
.
class
));
all
.
add
(
C
(
Decorator
.
class
,
MailDecorator
.
ID
,
MailDecorator
.
class
).
req
(
ProjectDao
.
class
));
...
...
@@ -138,29 +139,28 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
Contactor
.
class
).
req
(
ProjectDao
.
class
,
ProductLineConfigManager
.
class
,
AlertConfigManager
.
class
));
all
.
add
(
C
(
SenderManager
.
class
)
.
req
(
AlertPolicyManager
.
class
,
DecoratorManager
.
class
,
Contactor
.
class
,
AlertManager
.
class
)
.
req
(
Sender
.
class
,
MailSender
.
ID
,
"mailDispatcher"
)
.
req
(
Sender
.
class
,
WeixinSender
.
ID
,
"weixinDispatcher"
)
.
req
(
Sender
.
class
,
SmsSender
.
ID
,
"smsDispatcher"
));
all
.
add
(
C
(
SenderManager
.
class
)
.
req
(
Sender
.
class
,
MailSender
.
ID
,
"mailSender"
)
.
req
(
Sender
.
class
,
WeixinSender
.
ID
,
"weixinSender"
).
req
(
Sender
.
class
,
SmsSender
.
ID
,
"smsSender"
));
all
.
add
(
C
(
SendManager
.
class
).
req
(
AlertPolicyManager
.
class
,
DecoratorManager
.
class
,
Contactor
.
class
,
AlertManager
.
class
,
SenderManager
.
class
));
all
.
add
(
C
(
BusinessAlert
.
class
).
req
(
MetricConfigManager
.
class
,
ProductLineConfigManager
.
class
,
BaselineService
.
class
,
AlertInfo
.
class
).
req
(
RemoteMetricReportService
.
class
,
BusinessRuleConfigManager
.
class
,
DataChecker
.
class
,
Send
er
Manager
.
class
));
BusinessRuleConfigManager
.
class
,
DataChecker
.
class
,
SendManager
.
class
));
all
.
add
(
C
(
NetworkAlert
.
class
).
req
(
ProductLineConfigManager
.
class
,
BaselineService
.
class
,
AlertInfo
.
class
)
.
req
(
RemoteMetricReportService
.
class
,
NetworkRuleConfigManager
.
class
,
DataChecker
.
class
,
SenderManager
.
class
));
all
.
add
(
C
(
NetworkAlert
.
class
).
req
(
ProductLineConfigManager
.
class
,
BaselineService
.
class
,
AlertInfo
.
class
).
req
(
RemoteMetricReportService
.
class
,
NetworkRuleConfigManager
.
class
,
DataChecker
.
class
,
SendManager
.
class
));
all
.
add
(
C
(
SystemAlert
.
class
).
req
(
ProductLineConfigManager
.
class
,
BaselineService
.
class
,
AlertInfo
.
class
).
req
(
RemoteMetricReportService
.
class
,
SystemRuleConfigManager
.
class
,
DataChecker
.
class
,
Send
er
Manager
.
class
));
RemoteMetricReportService
.
class
,
SystemRuleConfigManager
.
class
,
DataChecker
.
class
,
SendManager
.
class
));
all
.
add
(
C
(
AlertExceptionBuilder
.
class
).
req
(
ExceptionConfigManager
.
class
));
all
.
add
(
C
(
ExceptionAlert
.
class
).
req
(
ExceptionConfigManager
.
class
,
AlertExceptionBuilder
.
class
,
SenderManager
.
class
)
.
req
(
ModelService
.
class
,
TopAnalyzer
.
ID
));
all
.
add
(
C
(
ExceptionAlert
.
class
).
req
(
ExceptionConfigManager
.
class
,
AlertExceptionBuilder
.
class
,
SendManager
.
class
)
.
req
(
ModelService
.
class
,
TopAnalyzer
.
ID
));
all
.
add
(
C
(
ThirdPartyAlert
.
class
).
req
(
Send
er
Manager
.
class
));
all
.
add
(
C
(
ThirdPartyAlert
.
class
).
req
(
SendManager
.
class
));
all
.
add
(
C
(
HttpConnector
.
class
));
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java
浏览文件 @
ee99dfe9
...
...
@@ -26,7 +26,7 @@ import com.dianping.cat.home.rule.entity.Config;
import
com.dianping.cat.report.baseline.BaselineService
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder
;
import
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
;
import
com.dianping.cat.report.task.alert.sender.
Send
Manager
;
import
com.dianping.cat.service.ModelPeriod
;
import
com.dianping.cat.service.ModelRequest
;
import
com.dianping.cat.system.config.BaseRuleConfigManager
;
...
...
@@ -52,7 +52,7 @@ public abstract class BaseAlert {
protected
RemoteMetricReportService
m_service
;
@Inject
protected
Send
erManager
m_dispatcher
Manager
;
protected
Send
Manager
m_send
Manager
;
protected
static
final
int
DATA_AREADY_MINUTE
=
1
;
...
...
@@ -246,7 +246,7 @@ public abstract class BaseAlert {
}
AlertEntity
alertEntity
=
builder
.
getAlertEntity
();
m_
dispatcherManager
.
send
(
alertEntity
);
m_
sendManager
.
addAlert
(
alertEntity
);
}
}
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java
浏览文件 @
ee99dfe9
...
...
@@ -75,7 +75,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
builder
.
buildGroup
(
domain
);
AlertEntity
alertEntity
=
builder
.
getAlertEntity
();
m_
dispatcherManager
.
send
(
alertEntity
);
m_
sendManager
.
addAlert
(
alertEntity
);
}
}
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java
浏览文件 @
ee99dfe9
...
...
@@ -23,7 +23,7 @@ import com.dianping.cat.report.page.top.TopMetric.Item;
import
com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder.AlertException
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder
;
import
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
;
import
com.dianping.cat.report.task.alert.sender.
Send
Manager
;
import
com.dianping.cat.service.ModelRequest
;
import
com.dianping.cat.service.ModelResponse
;
import
com.dianping.cat.system.config.ExceptionConfigManager
;
...
...
@@ -40,7 +40,7 @@ public class ExceptionAlert implements Task {
private
ModelService
<
TopReport
>
m_topService
;
@Inject
protected
Send
erManager
m_dispatcher
Manager
;
protected
Send
Manager
m_send
Manager
;
private
static
final
long
DURATION
=
TimeUtil
.
ONE_MINUTE
;
...
...
@@ -115,7 +115,7 @@ public class ExceptionAlert implements Task {
builder
.
buildMetric
(
metricName
).
buildProductline
(
domain
).
buildType
(
getName
()).
buildGroup
(
domain
);
AlertEntity
alertEntity
=
builder
.
getAlertEntity
();
m_
dispatcherManager
.
send
(
alertEntity
);
m_
sendManager
.
addAlert
(
alertEntity
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/SendManager.java
0 → 100644
浏览文件 @
ee99dfe9
package
com.dianping.cat.report.task.alert.sender
;
import
java.util.List
;
import
java.util.concurrent.BlockingQueue
;
import
java.util.concurrent.LinkedBlockingDeque
;
import
java.util.concurrent.TimeUnit
;
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
org.unidal.tuple.Pair
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.report.task.alert.manager.AlertManager
;
import
com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager
;
import
com.dianping.cat.report.task.alert.sender.receiver.Contactor
;
import
com.dianping.cat.report.task.alert.sender.sender.SenderManager
;
import
com.dianping.cat.system.config.AlertPolicyManager
;
public
class
SendManager
implements
Initializable
{
@Inject
private
AlertPolicyManager
m_policyManager
;
@Inject
private
DecoratorManager
m_decoratorManager
;
@Inject
private
Contactor
m_contactor
;
@Inject
protected
AlertManager
m_alertManager
;
@Inject
protected
SenderManager
m_senderManager
;
private
BlockingQueue
<
AlertEntity
>
m_alerts
=
new
LinkedBlockingDeque
<
AlertEntity
>();
private
boolean
send
(
AlertEntity
alert
)
{
boolean
result
=
true
;
String
type
=
alert
.
getType
();
String
group
=
alert
.
getGroup
();
String
level
=
alert
.
getLevel
();
String
channels
=
m_policyManager
.
queryChannels
(
type
,
group
,
level
);
for
(
AlertChannel
channel
:
AlertChannel
.
values
())
{
String
channelName
=
channel
.
getName
();
if
(
channels
.
contains
(
channelName
))
{
Pair
<
String
,
String
>
pair
=
m_decoratorManager
.
generateTitleAndContent
(
alert
,
channelName
);
List
<
String
>
receivers
=
m_contactor
.
queryReceivers
(
alert
.
getProductline
(),
channel
,
type
);
AlertMessageEntity
message
=
new
AlertMessageEntity
(
group
,
pair
.
getKey
(),
pair
.
getValue
(),
receivers
);
m_alertManager
.
storeAlert
(
alert
,
message
);
if
(!
m_senderManager
.
sendAlert
(
channelName
,
type
,
message
))
{
result
=
false
;
}
}
}
return
result
;
}
public
synchronized
boolean
addAlert
(
AlertEntity
alert
)
{
return
m_alerts
.
offer
(
alert
);
}
private
class
SendExecutor
implements
Task
{
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
try
{
AlertEntity
alert
=
m_alerts
.
poll
(
5
,
TimeUnit
.
MILLISECONDS
);
if
(
alert
!=
null
)
{
send
(
alert
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
break
;
}
}
}
@Override
public
String
getName
()
{
return
"send-executor"
;
}
@Override
public
void
shutdown
()
{
}
}
@Override
public
void
initialize
()
throws
InitializationException
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
SendExecutor
());
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java
浏览文件 @
ee99dfe9
...
...
@@ -22,6 +22,12 @@ public abstract class DefaultDecorator implements Decorator {
protected
String
buildContactInfo
(
String
domainName
)
{
try
{
if
(
domainName
.
startsWith
(
"f5-"
))
{
domainName
=
domainName
.
substring
(
3
);
}
else
if
(
domainName
.
startsWith
(
"switch-"
))
{
domainName
=
domainName
.
substring
(
7
);
}
Project
project
=
m_projectDao
.
findByDomain
(
domainName
,
ProjectEntity
.
READSET_FULL
);
String
owners
=
project
.
getOwner
();
String
phones
=
project
.
getPhone
();
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java
浏览文件 @
ee99dfe9
package
com.dianping.cat.report.task.alert.sender.sender
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStreamWriter
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.util.List
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
import
org.unidal.
lookup.annotation.Inject
;
import
org.unidal.
helper.Files
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.message.Event
;
import
com.dianping.cat.report.task.alert.sender.AlertMessageEntity
;
import
com.dianping.cat.system.tool.MailSMS
;
public
class
MailSender
implements
Sender
,
LogEnabled
{
@Inject
private
MailSMS
m_mailSms
;
public
static
final
String
ID
=
"mail"
;
private
Logger
m_logger
;
...
...
@@ -21,9 +24,14 @@ public class MailSender implements Sender, LogEnabled {
@Override
public
boolean
send
(
AlertMessageEntity
message
,
String
type
)
{
try
{
m_mailSms
.
sendEmail
(
message
.
getTitle
(),
message
.
getContent
(),
message
.
getReceivers
());
String
messageStr
=
message
.
toString
();
if
(!
sendEmail
(
message
))
{
Cat
.
logEvent
(
"AlertMailError"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertMailError "
+
messageStr
);
return
false
;
}
Cat
.
logEvent
(
"AlertMail"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertMail "
+
messageStr
);
return
true
;
...
...
@@ -33,6 +41,56 @@ public class MailSender implements Sender, LogEnabled {
}
}
private
boolean
sendEmail
(
AlertMessageEntity
message
)
{
String
title
=
message
.
getTitle
();
String
content
=
message
.
getContent
();
List
<
String
>
emails
=
message
.
getReceivers
();
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
email
:
emails
)
{
InputStream
in
=
null
;
OutputStreamWriter
writer
=
null
;
try
{
title
=
title
.
replaceAll
(
","
,
" "
);
content
=
content
.
replaceAll
(
","
,
" "
);
String
value
=
title
+
","
+
content
;
URL
url
=
new
URL
(
"http://10.1.1.51/mail.v?type=1500&key=title,body&re=yong.you@dianping.com&to="
+
email
);
URLConnection
conn
=
url
.
openConnection
();
conn
.
setDoOutput
(
true
);
conn
.
setDoInput
(
true
);
writer
=
new
OutputStreamWriter
(
conn
.
getOutputStream
());
writer
.
write
(
"&value="
+
value
);
writer
.
flush
();
in
=
conn
.
getInputStream
();
String
result
=
Files
.
forIO
().
readFrom
(
in
,
"utf-8"
);
sb
.
append
(
result
).
append
(
""
);
}
catch
(
Exception
e
)
{
m_logger
.
error
(
e
.
getMessage
(),
e
);
}
finally
{
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
if
(
writer
!=
null
)
{
writer
.
close
();
}
}
catch
(
IOException
e
)
{
}
}
}
if
(
sb
.
indexOf
(
"200"
)
>
-
1
)
{
return
true
;
}
else
{
return
false
;
}
}
@Override
public
String
getId
()
{
return
ID
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SenderManager.java
浏览文件 @
ee99dfe9
package
com.dianping.cat.report.task.alert.sender.sender
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.lookup.annotation.Inject
;
import
org.unidal.tuple.Pair
;
import
com.dianping.cat.report.task.alert.manager.AlertManager
;
import
com.dianping.cat.report.task.alert.sender.AlertChannel
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity
;
import
com.dianping.cat.report.task.alert.sender.AlertMessageEntity
;
import
com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager
;
import
com.dianping.cat.report.task.alert.sender.receiver.Contactor
;
import
com.dianping.cat.system.config.AlertPolicyManager
;
public
class
SenderManager
implements
Initializable
{
@Inject
private
AlertPolicyManager
m_policyManager
;
@Inject
private
DecoratorManager
m_decoratorManager
;
@Inject
private
Contactor
m_seeker
;
@Inject
protected
AlertManager
m_alertManager
;
@Inject
(
type
=
Sender
.
class
,
value
=
MailSender
.
ID
)
protected
Sender
m_mail
Dispatch
er
;
protected
Sender
m_mail
Send
er
;
@Inject
(
type
=
Sender
.
class
,
value
=
WeixinSender
.
ID
)
protected
Sender
m_weixin
Dispatch
er
;
protected
Sender
m_weixin
Send
er
;
@Inject
(
type
=
Sender
.
class
,
value
=
SmsSender
.
ID
)
protected
Sender
m_sms
Dispatch
er
;
protected
Sender
m_sms
Send
er
;
private
Map
<
String
,
Sender
>
m_
dispatch
ers
=
new
HashMap
<
String
,
Sender
>();
private
Map
<
String
,
Sender
>
m_
send
ers
=
new
HashMap
<
String
,
Sender
>();
@Override
public
void
initialize
()
throws
InitializationException
{
m_
dispatchers
.
put
(
m_mailDispatcher
.
getId
(),
m_mailDispatch
er
);
m_
dispatchers
.
put
(
m_weixinDispatcher
.
getId
(),
m_weixinDispatch
er
);
m_
dispatchers
.
put
(
m_smsDispatcher
.
getId
(),
m_smsDispatch
er
);
m_
senders
.
put
(
m_mailSender
.
getId
(),
m_mailSend
er
);
m_
senders
.
put
(
m_weixinSender
.
getId
(),
m_weixinSend
er
);
m_
senders
.
put
(
m_smsSender
.
getId
(),
m_smsSend
er
);
}
public
boolean
send
(
AlertEntity
alert
)
{
String
type
=
alert
.
getType
();
String
group
=
alert
.
getGroup
();
String
level
=
alert
.
getLevel
();
String
channels
=
m_policyManager
.
queryChannels
(
type
,
group
,
level
);
for
(
AlertChannel
channel
:
AlertChannel
.
values
())
{
String
channelName
=
channel
.
getName
();
if
(
channels
.
contains
(
channelName
))
{
Pair
<
String
,
String
>
pair
=
m_decoratorManager
.
generateTitleAndContent
(
alert
,
channelName
);
List
<
String
>
receivers
=
m_seeker
.
queryReceivers
(
alert
.
getProductline
(),
channel
,
type
);
AlertMessageEntity
message
=
new
AlertMessageEntity
(
group
,
pair
.
getKey
(),
pair
.
getValue
(),
receivers
);
m_alertManager
.
storeAlert
(
alert
,
message
);
Sender
dispatcher
=
m_dispatchers
.
get
(
channelName
);
dispatcher
.
send
(
message
,
type
);
}
}
return
false
;
public
boolean
sendAlert
(
String
channelName
,
String
type
,
AlertMessageEntity
message
)
{
Sender
sender
=
m_senders
.
get
(
channelName
);
return
sender
.
send
(
message
,
type
);
}
public
void
setMail
Dispatcher
(
Sender
dispatch
er
)
{
m_mail
Dispatcher
=
dispatch
er
;
public
void
setMail
Sender
(
Sender
send
er
)
{
m_mail
Sender
=
send
er
;
}
public
void
setSms
Dispatcher
(
Sender
dispatch
er
)
{
m_sms
Dispatcher
=
dispatch
er
;
public
void
setSms
Sender
(
Sender
send
er
)
{
m_sms
Sender
=
send
er
;
}
public
void
setWeixin
Dispatcher
(
Sender
dispatch
er
)
{
m_weixin
Dispatcher
=
dispatch
er
;
public
void
setWeixin
Sender
(
Sender
send
er
)
{
m_weixin
Sender
=
send
er
;
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java
浏览文件 @
ee99dfe9
package
com.dianping.cat.report.task.alert.sender.sender
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.net.URLEncoder
;
import
java.util.List
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
import
org.unidal.
lookup.annotation.Inject
;
import
org.unidal.
helper.Files
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.message.Event
;
import
com.dianping.cat.report.task.alert.sender.AlertMessageEntity
;
import
com.dianping.cat.system.tool.MailSMS
;
public
class
SmsSender
implements
Sender
,
LogEnabled
{
@Inject
private
MailSMS
m_mailSms
;
public
static
final
String
ID
=
"sms"
;
private
Logger
m_logger
;
...
...
@@ -21,9 +24,14 @@ public class SmsSender implements Sender, LogEnabled {
@Override
public
boolean
send
(
AlertMessageEntity
message
,
String
type
)
{
try
{
m_mailSms
.
sendSms
(
message
.
getTitle
()
+
message
.
getContent
(),
null
,
message
.
getReceivers
());
String
messageStr
=
message
.
toString
();
if
(!
sendSms
(
message
))
{
Cat
.
logEvent
(
"AlertSmsError"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertSmsError "
+
messageStr
);
return
false
;
}
Cat
.
logEvent
(
"AlertSms"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertSms "
+
messageStr
);
return
true
;
...
...
@@ -33,6 +41,39 @@ public class SmsSender implements Sender, LogEnabled {
}
}
private
boolean
sendSms
(
AlertMessageEntity
message
)
{
String
title
=
message
.
getTitle
();
List
<
String
>
phones
=
message
.
getReceivers
();
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
phone
:
phones
)
{
InputStream
in
=
null
;
try
{
String
format
=
"http://10.1.1.84/sms/send/json?jsonm={type:808,mobile:\"%s\",pair:{body=\"%s\"}}"
;
String
urlAddress
=
String
.
format
(
format
,
phone
,
URLEncoder
.
encode
(
title
,
"utf-8"
));
URL
url
=
new
URL
(
urlAddress
);
URLConnection
conn
=
url
.
openConnection
();
in
=
conn
.
getInputStream
();
sb
.
append
(
Files
.
forIO
().
readFrom
(
in
,
"utf-8"
)).
append
(
""
);
}
catch
(
Exception
e
)
{
m_logger
.
error
(
e
.
getMessage
(),
e
);
}
finally
{
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
}
catch
(
IOException
e
)
{
}
}
}
if
(
sb
.
indexOf
(
"200"
)
>
-
1
)
{
return
true
;
}
else
{
return
false
;
}
}
@Override
public
String
getId
()
{
return
ID
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java
浏览文件 @
ee99dfe9
package
com.dianping.cat.report.task.alert.sender.sender
;
import
java.io.BufferedReader
;
import
java.io.DataOutputStream
;
import
java.io.InputStreamReader
;
import
java.io.UnsupportedEncodingException
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.net.URLEncoder
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.message.Event
;
import
com.dianping.cat.report.task.alert.sender.AlertMessageEntity
;
import
com.dianping.cat.system.tool.MailSMS
;
public
class
WeixinSender
implements
Sender
,
LogEnabled
{
@Inject
private
MailSMS
m_mailSms
;
private
static
final
String
WEIXIN_URL
=
"http://dpoa.api.dianping.com/app/monitor/cat/push"
;
private
static
final
String
SUCCESS_TEXT
=
"{\"success\":\"1\"}"
;
public
static
final
String
ID
=
"weixin"
;
...
...
@@ -21,10 +28,14 @@ public class WeixinSender implements Sender, LogEnabled {
@Override
public
boolean
send
(
AlertMessageEntity
message
,
String
type
)
{
try
{
m_mailSms
.
sendWeiXin
(
message
.
getTitle
(),
message
.
getContent
(),
message
.
getGroup
(),
message
.
getReceiverString
());
String
messageStr
=
message
.
toString
();
if
(!
sendWeixin
(
message
))
{
Cat
.
logEvent
(
"AlertWeixinError"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertWeixinError "
+
messageStr
);
return
false
;
}
Cat
.
logEvent
(
"AlertWeiixin"
,
type
,
Event
.
SUCCESS
,
messageStr
);
m_logger
.
info
(
"AlertWeiixin "
+
messageStr
);
return
true
;
...
...
@@ -34,6 +45,77 @@ public class WeixinSender implements Sender, LogEnabled {
}
}
private
boolean
sendWeixin
(
AlertMessageEntity
message
)
{
String
domain
=
message
.
getGroup
();
String
title
=
message
.
getTitle
();
String
content
=
message
.
getContent
();
String
weixins
=
message
.
getReceiverString
();
String
urlDomain
=
null
;
String
urlTitle
=
null
;
String
urlContent
=
null
;
String
urlWeixins
=
null
;
try
{
urlDomain
=
URLEncoder
.
encode
(
domain
,
"UTF-8"
);
urlTitle
=
URLEncoder
.
encode
(
title
,
"UTF-8"
);
urlContent
=
URLEncoder
.
encode
(
content
.
replaceAll
(
"<a href.*(?=</a>)</a>"
,
""
),
"UTF-8"
);
urlWeixins
=
URLEncoder
.
encode
(
weixins
,
"UTF-8"
);
}
catch
(
UnsupportedEncodingException
e
)
{
Cat
.
logError
(
"transfer weixin content error:"
+
title
+
" "
+
content
+
" "
+
domain
+
" "
+
weixins
,
e
);
return
false
;
}
String
urlParameters
=
"domain="
+
urlDomain
+
"&email="
+
urlWeixins
+
"&title="
+
urlTitle
+
"&content="
+
urlContent
;
try
{
HttpURLConnection
connection
=
(
HttpURLConnection
)
new
URL
(
WEIXIN_URL
).
openConnection
();
connection
.
setRequestMethod
(
"POST"
);
connection
.
setDoOutput
(
true
);
connection
.
setDoInput
(
true
);
connection
.
setUseCaches
(
false
);
DataOutputStream
wr
=
new
DataOutputStream
(
connection
.
getOutputStream
());
wr
.
writeBytes
(
urlParameters
);
wr
.
flush
();
wr
.
close
();
if
(
connection
.
getResponseCode
()
==
HttpURLConnection
.
HTTP_OK
)
{
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
connection
.
getInputStream
()));
String
inputLine
;
StringBuilder
builder
=
new
StringBuilder
();
while
((
inputLine
=
reader
.
readLine
())
!=
null
)
{
builder
.
append
(
inputLine
);
}
reader
.
close
();
String
responseText
=
builder
.
toString
();
if
(
responseText
.
equals
(
SUCCESS_TEXT
))
{
Cat
.
logEvent
(
"WeiXinSend"
,
"send_success"
,
Event
.
SUCCESS
,
"send success:"
+
domain
+
" "
+
title
+
" "
+
content
+
" "
+
weixins
+
" "
+
responseText
);
return
true
;
}
else
{
Cat
.
logEvent
(
"WeiXinSend"
,
"send_fail"
,
Event
.
SUCCESS
,
"send fail:"
+
domain
+
" "
+
title
+
" "
+
content
+
" "
+
weixins
+
" "
+
responseText
);
return
false
;
}
}
else
{
Cat
.
logEvent
(
"WeiXinSend"
,
"network_fail"
,
Event
.
SUCCESS
,
"network fail:"
+
domain
+
" "
+
title
+
" "
+
content
+
" "
+
weixins
);
return
false
;
}
}
catch
(
Exception
ex
)
{
Cat
.
logEvent
(
"WeiXinSend"
,
"error"
,
Event
.
SUCCESS
,
"error:"
+
domain
+
" "
+
title
+
" "
+
content
+
" "
+
weixins
);
Cat
.
logError
(
"send weixin error:"
+
domain
+
" "
+
title
+
" "
+
content
+
" "
+
weixins
,
ex
);
return
false
;
}
}
@Override
public
String
getId
()
{
return
ID
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java
浏览文件 @
ee99dfe9
...
...
@@ -19,12 +19,12 @@ import com.dianping.cat.helper.TimeUtil;
import
com.dianping.cat.message.Transaction
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity
;
import
com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder
;
import
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
;
import
com.dianping.cat.report.task.alert.sender.
Send
Manager
;
public
class
ThirdPartyAlert
implements
Task
{
@Inject
private
Send
erManager
m_dispatcher
Manager
;
private
Send
Manager
m_send
Manager
;
private
static
final
long
DURATION
=
TimeUtil
.
ONE_MINUTE
;
...
...
@@ -83,7 +83,7 @@ public class ThirdPartyAlert implements Task {
builder
.
buildMetric
(
getName
()).
buildProductline
(
domain
).
buildType
(
getName
()).
buildGroup
(
domain
);
AlertEntity
alertEntity
=
builder
.
getAlertEntity
();
m_
dispatcherManager
.
send
(
alertEntity
);
m_
sendManager
.
addAlert
(
alertEntity
);
}
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
ee99dfe9
...
...
@@ -567,31 +567,16 @@
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
mail
</role-hint>
<implementation>
com.dianping.cat.report.task.alert.sender.sender.MailSender
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.system.tool.MailSMS
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
sms
</role-hint>
<implementation>
com.dianping.cat.report.task.alert.sender.sender.SmsSender
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.system.tool.MailSMS
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
weixin
</role-hint>
<implementation>
com.dianping.cat.report.task.alert.sender.sender.WeixinSender
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.system.tool.MailSMS
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.alert.sender.decorator.Decorator
</role>
...
...
@@ -673,31 +658,40 @@
<implementation>
com.dianping.cat.report.task.alert.sender.sender.SenderManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.system.config.AlertPolicyManager
</role>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
mail
</role-hint>
<field-name>
mailSender
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager
</role>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
weixin
</role-hint>
<field-name>
weixinSender
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.receiver.Contactor
</role>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
sms
</role-hint>
<field-name>
smsSender
</field-name>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.alert.sender.SendManager
</role>
<implementation>
com.dianping.cat.report.task.alert.sender.SendManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.
report.task.alert.manager.Alert
Manager
</role>
<role>
com.dianping.cat.
system.config.AlertPolicy
Manager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
mail
</role-hint>
<field-name>
mailDispatcher
</field-name>
<role>
com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
weixin
</role-hint>
<field-name>
weixinDispatcher
</field-name>
<role>
com.dianping.cat.report.task.alert.sender.receiver.Contactor
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.sender.Sender
</role>
<role-hint>
sms
</role-hint>
<field-name>
smsDispatcher
</field-name>
<role>
com.dianping.cat.report.task.alert.manager.AlertManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.sender.SenderManager
</role>
</requirement>
</requirements>
</component>
...
...
@@ -727,7 +721,7 @@
<role>
com.dianping.cat.report.task.alert.DataChecker
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
</role>
<role>
com.dianping.cat.report.task.alert.sender.
Send
Manager
</role>
</requirement>
</requirements>
</component>
...
...
@@ -754,7 +748,7 @@
<role>
com.dianping.cat.report.task.alert.DataChecker
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
</role>
<role>
com.dianping.cat.report.task.alert.sender.
Send
Manager
</role>
</requirement>
</requirements>
</component>
...
...
@@ -781,7 +775,7 @@
<role>
com.dianping.cat.report.task.alert.DataChecker
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
</role>
<role>
com.dianping.cat.report.task.alert.sender.
Send
Manager
</role>
</requirement>
</requirements>
</component>
...
...
@@ -805,7 +799,7 @@
<role>
com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
</role>
<role>
com.dianping.cat.report.task.alert.sender.
Send
Manager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
...
...
@@ -818,7 +812,7 @@
<implementation>
com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlert
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.task.alert.sender.
sender.Sender
Manager
</role>
<role>
com.dianping.cat.report.task.alert.sender.
Send
Manager
</role>
</requirement>
</requirements>
</component>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录