Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
366edaf7
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,发现更多精彩内容 >>
提交
366edaf7
编写于
7月 09, 2014
作者:
Y
youyong205
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #388 from leonindy/master
add send weixin feature for ExceptionALert
上级
b5279be6
f1d0f9fa
变更
23
展开全部
隐藏空白更改
内联
并排
Showing
23 changed file
with
591 addition
and
111 deletion
+591
-111
cat-home/pom.xml
cat-home/pom.xml
+1
-0
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
+11
-6
cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java
...cat/report/task/alert/exception/ExceptionAlertConfig.java
+32
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryDecorator.java
.../cat/report/task/alert/summary/AlertSummaryDecorator.java
+11
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryExecutor.java
...g/cat/report/task/alert/summary/AlertSummaryExecutor.java
+39
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java
.../cat/report/task/alert/summary/AlertSummaryGenerator.java
+147
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryManager.java
...ng/cat/report/task/alert/summary/AlertSummaryManager.java
+30
-0
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummarySender.java
...ing/cat/report/task/alert/summary/AlertSummarySender.java
+11
-0
cat-home/src/main/java/com/dianping/cat/system/tool/DefaultMailImpl.java
...in/java/com/dianping/cat/system/tool/DefaultMailImpl.java
+79
-1
cat-home/src/main/java/com/dianping/cat/system/tool/MailSMS.java
...e/src/main/java/com/dianping/cat/system/tool/MailSMS.java
+2
-0
cat-home/src/main/resources/META-INF/dal/jdbc/report-codegen.xml
...e/src/main/resources/META-INF/dal/jdbc/report-codegen.xml
+42
-3
cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml
cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml
+41
-0
cat-home/src/main/resources/META-INF/dal/model/alertconfig-codegen.xml
...main/resources/META-INF/dal/model/alertconfig-codegen.xml
+1
-0
cat-home/src/main/resources/META-INF/dal/model/alertconfig-model.xml
...c/main/resources/META-INF/dal/model/alertconfig-model.xml
+1
-0
cat-home/src/main/resources/META-INF/dal/model/alertsummary-codegen.xml
...ain/resources/META-INF/dal/model/alertsummary-codegen.xml
+19
-0
cat-home/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml
...in/resources/META-INF/dal/model/alertsummary-manifest.xml
+6
-0
cat-home/src/main/resources/META-INF/dal/model/alertsummary-model.xml
.../main/resources/META-INF/dal/model/alertsummary-model.xml
+4
-0
cat-home/src/main/resources/META-INF/wizard/jdbc/wizard.xml
cat-home/src/main/resources/META-INF/wizard/jdbc/wizard.xml
+1
-0
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
+3
-0
cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml
...ources/config/default-network-metric-rule-config-unit.xml
+91
-91
cat-home/src/main/resources/config/default-system-rule-config.xml
.../src/main/resources/config/default-system-rule-config.xml
+8
-8
script/Cat.sql
script/Cat.sql
+10
-1
未找到文件。
cat-home/pom.xml
浏览文件 @
366edaf7
...
...
@@ -165,6 +165,7 @@
${basedir}/src/main/resources/META-INF/dal/model/alert-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/monitor-rules-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertconfig-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml,
</manifest>
</configuration>
</execution>
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java
浏览文件 @
366edaf7
...
...
@@ -34,7 +34,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
@Override
public
String
getName
()
{
return
"
metric
-alert"
;
return
"
business
-alert"
;
}
@Override
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java
浏览文件 @
366edaf7
...
...
@@ -66,16 +66,16 @@ public class ExceptionAlert implements Task, LogEnabled {
private
Alert
buildAlert
(
String
domainName
,
AlertException
exception
,
String
mailContent
)
{
Alert
alert
=
new
Alert
();
alert
.
setDomain
(
domainName
);
alert
.
setAlertTime
(
new
Date
());
alert
.
setCategory
(
getName
());
alert
.
setType
(
exception
.
getType
());
alert
.
setContent
(
mailContent
);
alert
.
setMetric
(
exception
.
getName
());
return
alert
;
}
return
alert
;
}
private
TopMetric
buildTopMetric
(
Date
date
)
{
TopReport
topReport
=
queryTopReport
(
date
);
...
...
@@ -91,7 +91,6 @@ public class ExceptionAlert implements Task, LogEnabled {
m_logger
=
logger
;
}
@Override
public
String
getName
()
{
return
"exception-alert"
;
}
...
...
@@ -178,12 +177,18 @@ public class ExceptionAlert implements Task, LogEnabled {
Project
project
=
queryProjectByDomain
(
domain
);
List
<
String
>
emails
=
m_alertConfig
.
buildMailReceivers
(
project
);
List
<
String
>
phones
=
m_alertConfig
.
buildSMSReceivers
(
project
);
String
weixins
=
m_alertConfig
.
buildWeiXinReceivers
(
project
);
String
mailTitle
=
m_alertConfig
.
buildMailTitle
(
domain
,
null
);
String
mailContent
=
m_alertBuilder
.
buildMailContent
(
exceptions
.
toString
(),
domain
);
m_mailSms
.
sendEmail
(
mailTitle
,
mailContent
,
emails
);
m_logger
.
info
(
mailTitle
+
" "
+
mailContent
+
" "
+
emails
);
Cat
.
logEvent
(
"ExceptionAlert"
,
domain
,
Event
.
SUCCESS
,
"[邮件告警] "
+
mailTitle
+
" "
+
mailContent
);
m_mailSms
.
sendWeiXin
(
mailTitle
,
mailContent
,
domain
,
weixins
);
m_logger
.
info
(
mailTitle
+
" "
+
mailContent
+
" "
+
domain
+
" "
+
weixins
);
Cat
.
logEvent
(
"ExceptionAlert"
,
domain
,
Event
.
SUCCESS
,
"[微信告警] "
+
mailTitle
+
" "
+
mailContent
+
" "
+
domain
+
" "
+
weixins
);
storeAlerts
(
domain
,
exceptions
,
mailTitle
+
"<br/>"
+
mailContent
);
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java
浏览文件 @
366edaf7
...
...
@@ -25,6 +25,38 @@ public class ExceptionAlertConfig extends BaseAlertConfig {
}
}
public
String
buildWeiXinReceivers
(
Project
project
)
{
StringBuilder
builder
=
new
StringBuilder
();
Receiver
receiver
=
m_manager
.
queryReceiverById
(
getId
());
if
(
receiver
!=
null
&&
!
receiver
.
isEnable
())
{
return
null
;
}
else
{
builder
.
append
(
buildDefaultWeixinReceivers
(
receiver
));
builder
.
append
(
project
.
getEmail
());
String
result
=
builder
.
toString
();
if
(
result
.
endsWith
(
","
))
{
return
result
.
substring
(
0
,
result
.
length
()
-
1
);
}
else
{
return
result
;
}
}
}
private
String
buildDefaultWeixinReceivers
(
Receiver
receiver
)
{
StringBuilder
builder
=
new
StringBuilder
();
if
(
receiver
!=
null
)
{
for
(
String
weixin
:
receiver
.
getWeixins
())
{
builder
.
append
(
weixin
+
","
);
}
}
return
builder
.
toString
();
}
@Override
public
String
buildMailTitle
(
String
domain
,
String
configTitle
)
{
StringBuilder
sb
=
new
StringBuilder
();
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryDecorator.java
0 → 100644
浏览文件 @
366edaf7
package
com.dianping.cat.report.task.alert.summary
;
import
com.dianping.cat.home.alert.summary.entity.AlertSummary
;
public
class
AlertSummaryDecorator
{
public
String
generateHtml
(
AlertSummary
alertSummary
)
{
return
null
;
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryExecutor.java
0 → 100644
浏览文件 @
366edaf7
package
com.dianping.cat.report.task.alert.summary
;
import
java.util.Date
;
import
java.util.List
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.home.alert.summary.entity.AlertSummary
;
public
class
AlertSummaryExecutor
{
@Inject
AlertSummaryGenerator
m_alertSummaryGenerator
;
@Inject
AlertSummaryManager
m_alertSummaryManager
;
@Inject
AlertSummaryDecorator
m_alertSummaryDecorator
;
@Inject
AlertSummarySender
m_alertSummarySender
;
public
String
execute
(
String
domain
,
Date
date
,
List
<
String
>
receivers
)
{
try
{
AlertSummary
alertSummary
=
m_alertSummaryGenerator
.
generateAlertSummary
(
domain
,
date
);
m_alertSummaryManager
.
insert
(
alertSummary
);
String
content
=
m_alertSummaryDecorator
.
generateHtml
(
alertSummary
);
m_alertSummarySender
.
send
(
content
,
receivers
);
return
content
;
}
catch
(
Exception
e
)
{
Cat
.
logError
(
"generate alert summary fail:"
+
domain
+
" "
+
date
,
e
);
return
null
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java
0 → 100644
浏览文件 @
366edaf7
package
com.dianping.cat.report.task.alert.summary
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.home.alert.summary.entity.AlertSummary
;
import
com.dianping.cat.home.alert.summary.entity.Category
;
import
com.dianping.cat.home.dal.report.Alert
;
import
com.dianping.cat.home.dal.report.AlertDao
;
import
com.dianping.cat.home.dal.report.AlertEntity
;
import
com.dianping.cat.home.dependency.graph.entity.TopologyGraph
;
import
com.dianping.cat.report.page.dependency.graph.TopologyGraphManager
;
public
class
AlertSummaryGenerator
{
@Inject
private
AlertDao
m_alertDao
;
@Inject
private
TopologyGraphManager
m_topologyManager
;
// fetch alerts during this period, time unit is ms, default value is 1 hour
private
final
long
DURATION
=
60
*
60
*
1000L
;
private
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
convertToAlert
(
Alert
dbAlert
)
{
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
alert
=
new
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
();
alert
.
setAlertTime
(
dbAlert
.
getAlertTime
());
alert
.
setContext
(
dbAlert
.
getContent
());
alert
.
setMetric
(
dbAlert
.
getMetric
());
alert
.
setType
(
dbAlert
.
getType
());
return
alert
;
}
private
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
convertToDependAlert
(
String
domain
,
Alert
dbAlert
)
{
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
alert
=
new
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
Alert
();
alert
.
setAlertTime
(
dbAlert
.
getAlertTime
());
alert
.
setContext
(
dbAlert
.
getContent
());
alert
.
setMetric
(
domain
+
":"
+
dbAlert
.
getMetric
());
alert
.
setType
(
dbAlert
.
getType
());
return
alert
;
}
public
AlertSummary
generateAlertSummary
(
String
domain
,
Date
date
)
{
AlertSummary
alertSummary
=
new
AlertSummary
();
alertSummary
.
setDomain
(
domain
);
alertSummary
.
setAlertDate
(
date
);
alertSummary
.
addCategory
(
generateCategoryByTimeCategory
(
date
,
"network"
));
alertSummary
.
addCategory
(
generateCategoryByTimeCateDomain
(
date
,
"business"
,
domain
));
alertSummary
.
addCategory
(
generateCategoryByTimeCateDomain
(
date
,
"exception"
,
domain
));
alertSummary
.
addCategory
(
generateCategoryByTimeCateDomain
(
date
,
"system"
,
domain
));
List
<
String
>
dependencyDomains
=
queryDependencyDomains
(
date
,
domain
);
alertSummary
.
addCategory
(
generateDependCategoryByTimeCateDomain
(
date
,
"business"
,
dependencyDomains
));
alertSummary
.
addCategory
(
generateDependCategoryByTimeCateDomain
(
date
,
"exception"
,
dependencyDomains
));
return
alertSummary
;
}
private
Category
generateCategoryByTimeCateDomain
(
Date
date
,
String
cate
,
String
domain
)
{
Category
category
=
new
Category
(
cate
);
String
dbCategoryName
=
cate
+
"-alert"
;
Date
startTime
=
new
Date
(
date
.
getTime
()
-
DURATION
/
2
);
Date
endTime
=
new
Date
(
date
.
getTime
()
+
DURATION
/
2
);
try
{
List
<
Alert
>
dbAlerts
=
m_alertDao
.
queryAlertsByTimeCategoryDomain
(
startTime
,
endTime
,
dbCategoryName
,
domain
,
AlertEntity
.
READSET_FULL
);
setDBAlertsToCategory
(
category
,
dbAlerts
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
"find alerts error for category:"
+
cate
+
" domain:"
+
domain
+
" date:"
+
date
,
e
);
}
return
category
;
}
private
Category
generateCategoryByTimeCategory
(
Date
date
,
String
cate
)
{
Category
category
=
new
Category
(
cate
);
String
dbCategoryName
=
cate
+
"-alert"
;
Date
startTime
=
new
Date
(
date
.
getTime
()
-
DURATION
/
2
);
Date
endTime
=
new
Date
(
date
.
getTime
()
+
DURATION
/
2
);
try
{
List
<
Alert
>
dbAlerts
=
m_alertDao
.
queryAlertsByTimeCategory
(
startTime
,
endTime
,
dbCategoryName
,
AlertEntity
.
READSET_FULL
);
setDBAlertsToCategory
(
category
,
dbAlerts
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
"find alerts error for category:"
+
cate
+
" date:"
+
date
,
e
);
}
return
category
;
}
private
Category
generateDependCategoryByTimeCateDomain
(
Date
date
,
String
cate
,
List
<
String
>
dependencyDomains
)
{
String
categoryName
=
"dependency-"
+
cate
;
String
dbCategoryName
=
cate
+
"-alert"
;
Category
category
=
new
Category
(
categoryName
);
Date
startTime
=
new
Date
(
date
.
getTime
()
-
DURATION
/
2
);
Date
endTime
=
new
Date
(
date
.
getTime
()
+
DURATION
/
2
);
for
(
String
domain
:
dependencyDomains
)
{
try
{
List
<
Alert
>
dbAlerts
=
m_alertDao
.
queryAlertsByTimeCategoryDomain
(
startTime
,
endTime
,
dbCategoryName
,
domain
,
AlertEntity
.
READSET_FULL
);
setDBAlertsToDependCategory
(
category
,
domain
,
dbAlerts
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
"find dependency alerts error for category:"
+
cate
+
" domain:"
+
domain
+
" date:"
+
date
,
e
);
}
}
return
category
;
}
private
List
<
String
>
queryDependencyDomains
(
Date
date
,
String
domain
)
{
List
<
String
>
domains
=
new
ArrayList
<
String
>();
TopologyGraph
topology
=
m_topologyManager
.
buildTopologyGraph
(
domain
,
date
.
getTime
());
for
(
String
dependencyDomain
:
topology
.
getNodes
().
keySet
())
{
domains
.
add
(
dependencyDomain
);
}
return
domains
;
}
private
void
setDBAlertsToCategory
(
Category
category
,
List
<
Alert
>
dbAlerts
)
{
for
(
Alert
dbAlert
:
dbAlerts
)
{
category
.
addAlert
(
convertToAlert
(
dbAlert
));
}
}
private
void
setDBAlertsToDependCategory
(
Category
category
,
String
domain
,
List
<
Alert
>
dbAlerts
)
{
for
(
Alert
dbAlert
:
dbAlerts
)
{
category
.
addAlert
(
convertToDependAlert
(
domain
,
dbAlert
));
}
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryManager.java
0 → 100644
浏览文件 @
366edaf7
package
com.dianping.cat.report.task.alert.summary
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.home.dal.report.AlertSummary
;
import
com.dianping.cat.home.dal.report.AlertSummaryDao
;
public
class
AlertSummaryManager
{
@Inject
private
AlertSummaryDao
m_alertSummaryDao
;
public
void
insert
(
com
.
dianping
.
cat
.
home
.
alert
.
summary
.
entity
.
AlertSummary
alertSummary
)
{
AlertSummary
summary
=
new
AlertSummary
();
String
content
=
alertSummary
.
toString
();
summary
.
setDomain
(
alertSummary
.
getDomain
());
summary
.
setAlertTime
(
alertSummary
.
getAlertDate
());
summary
.
setContent
(
content
);
try
{
m_alertSummaryDao
.
insert
(
summary
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
"insert alert summary error: "
+
content
,
e
);
}
}
}
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummarySender.java
0 → 100644
浏览文件 @
366edaf7
package
com.dianping.cat.report.task.alert.summary
;
import
java.util.List
;
public
class
AlertSummarySender
{
public
void
send
(
String
content
,
List
<
String
>
receivers
)
{
}
}
cat-home/src/main/java/com/dianping/cat/system/tool/DefaultMailImpl.java
浏览文件 @
366edaf7
package
com.dianping.cat.system.tool
;
import
java.io.BufferedReader
;
import
java.io.DataOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.OutputStreamWriter
;
import
java.io.UnsupportedEncodingException
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.net.URLEncoder
;
...
...
@@ -43,6 +48,10 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
private
Logger
m_logger
;
private
static
final
String
WEIXIN_URL
=
"http://dpoa-monitorapp-web01.beta/app/monitor/cat/push"
;
private
static
final
String
SUCCESS_TEXT
=
"{\"success\":\"1\"}"
;
private
HtmlEmail
createHtmlEmail
()
throws
EmailException
{
HtmlEmail
email
=
new
HtmlEmail
();
...
...
@@ -151,7 +160,7 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
@Override
public
boolean
sendSms
(
String
title
,
String
content
,
List
<
String
>
phones
)
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
phone
:
phones
)
{
InputStream
in
=
null
;
try
{
...
...
@@ -179,6 +188,74 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
return
false
;
}
}
@Override
public
boolean
sendWeiXin
(
String
title
,
String
content
,
String
domain
,
String
weixins
)
{
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
;
}
}
public
static
class
Item
{
private
String
m_title
;
...
...
@@ -252,4 +329,5 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
}
}
}
cat-home/src/main/java/com/dianping/cat/system/tool/MailSMS.java
浏览文件 @
366edaf7
...
...
@@ -9,5 +9,7 @@ public interface MailSMS {
public
boolean
sendEmailByGmail
(
String
title
,
String
content
,
List
<
String
>
emails
);
public
boolean
sendSms
(
String
title
,
String
content
,
List
<
String
>
phones
);
public
boolean
sendWeiXin
(
String
title
,
String
content
,
String
domain
,
String
weixins
);
}
cat-home/src/main/resources/META-INF/dal/jdbc/report-codegen.xml
浏览文件 @
366edaf7
<?xml version="1.0" encoding="UTF-8"?>
<entities>
<entity
name=
"alert"
table=
"alert"
alias=
"a"
>
<entity
name=
"alert"
table=
"alert"
alias=
"a"
>
<member
name=
"id"
field=
"id"
value-type=
"int"
length=
"10"
nullable=
"false"
key=
"true"
auto-increment=
"true"
/>
<member
name=
"domain"
field=
"domain"
value-type=
"String"
length=
"128"
nullable=
"false"
/>
<member
name=
"alert-time"
field=
"alert_time"
value-type=
"Date"
nullable=
"false"
/>
...
...
@@ -41,7 +41,46 @@
</query>
</query-defs>
</entity>
<entity
name=
"alteration"
table=
"alteration"
alias=
"a"
>
<entity
name=
"alert-summary"
table=
"alert_summary"
alias=
"as"
>
<member
name=
"id"
field=
"id"
value-type=
"int"
length=
"10"
nullable=
"false"
key=
"true"
auto-increment=
"true"
/>
<member
name=
"domain"
field=
"domain"
value-type=
"String"
length=
"128"
nullable=
"false"
/>
<member
name=
"alert-time"
field=
"alert_time"
value-type=
"Date"
nullable=
"false"
/>
<member
name=
"content"
field=
"content"
value-type=
"String"
length=
"65535"
nullable=
"false"
/>
<member
name=
"creation-date"
field=
"creation_date"
value-type=
"Date"
nullable=
"false"
/>
<var
name=
"key-id"
value-type=
"int"
key-member=
"id"
/>
<primary-key
name=
"PRIMARY"
members=
"id"
/>
<index
name=
"alert_summary_index"
members=
"alert_time ASC, domain ASC"
/>
<readsets>
<readset
name=
"FULL"
all=
"true"
/>
</readsets>
<updatesets>
<updateset
name=
"FULL"
all=
"true"
/>
</updatesets>
<query-defs>
<query
name=
"find-by-PK"
type=
"SELECT"
>
<param
name=
"key-id"
/>
<statement>
<![CDATA[SELECT <FIELDS/>
FROM
<TABLE/>
WHERE
<FIELD
name=
'id'
/>
= ${key-id}]]>
</statement>
</query>
<query
name=
"insert"
type=
"INSERT"
>
<statement>
<![CDATA[INSERT INTO <TABLE/>
(
<FIELDS/>
)
VALUES(
<VALUES/>
)]]>
</statement>
</query>
<query
name=
"update-by-PK"
type=
"UPDATE"
>
<param
name=
"key-id"
/>
<statement>
<![CDATA[UPDATE <TABLE/>
SET
<FIELDS/>
WHERE
<FIELD
name=
'id'
/>
= ${key-id}]]>
</statement>
</query>
<query
name=
"delete-by-PK"
type=
"DELETE"
>
<param
name=
"key-id"
/>
<statement>
<![CDATA[DELETE FROM <TABLE/>
WHERE
<FIELD
name=
'id'
/>
= ${key-id}]]>
</statement>
</query>
</query-defs>
</entity>
<entity
name=
"alteration"
table=
"alteration"
alias=
"a2"
>
<member
name=
"id"
field=
"id"
value-type=
"int"
length=
"10"
nullable=
"false"
key=
"true"
auto-increment=
"true"
/>
<member
name=
"type"
field=
"type"
value-type=
"String"
length=
"64"
nullable=
"false"
/>
<member
name=
"title"
field=
"title"
value-type=
"String"
length=
"128"
nullable=
"false"
/>
...
...
@@ -90,7 +129,7 @@
<entity
name=
"baseline"
table=
"baseline"
alias=
"b"
>
<member
name=
"id"
field=
"id"
value-type=
"int"
length=
"10"
nullable=
"false"
key=
"true"
auto-increment=
"true"
/>
<member
name=
"report-name"
field=
"report_name"
value-type=
"String"
length=
"100"
/>
<member
name=
"index-key"
field=
"index_key"
value-type=
"String"
length=
"256"
nullable=
"false"
/>
<member
name=
"index-key"
field=
"index_key"
value-type=
"String"
length=
"256"
nullable=
"false"
/>
<member
name=
"report-period"
field=
"report_period"
value-type=
"Date"
/>
<member
name=
"data"
field=
"data"
value-type=
"byte[]"
length=
"65535"
/>
<member
name=
"creation-date"
field=
"creation_date"
value-type=
"Date"
/>
...
...
cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml
浏览文件 @
366edaf7
...
...
@@ -2,6 +2,47 @@
<entities
do-package=
"com.dianping.cat.home.dal.report"
gen=
"true"
>
<entity
name=
"alert"
table=
"alert"
alias=
"al"
>
<member
name=
"creation-date"
insert-expr=
"NOW()"
/>
<var
name=
"start-time"
value-type=
"Date"
/>
<var
name=
"end-time"
value-type=
"Date"
/>
<param
name=
"domain"
/>
<query-defs>
<query
name=
"query-alerts-by-time-category-domain"
type=
"SELECT"
multiple=
"true"
>
<param
name=
"start-time"
/>
<param
name=
"end-time"
/>
<param
name=
"category"
/>
<param
name=
"domain"
/>
<statement>
<![CDATA[
SELECT <FIELDS/>
FROM
<TABLE/>
WHERE
<FIELD
name=
'alert_time'
/>
>= ${start-time}
AND
<FIELD
name=
'alert_time'
/>
<
= ${end-time}
<IF
type=
'NOT_NULL'
field=
'category'
>
AND
<FIELD
name=
'category'
/>
= ${category}
</IF>
<IF
type=
'NOT_NULL'
field=
'domain'
>
AND
<FIELD
name=
'domain'
/>
= ${domain}
</IF>
ORDER BY
<FIELD
name=
'alert_time'
/>
asc
]]>
</statement>
</query>
<query
name=
"query-alerts-by-time-category"
type=
"SELECT"
multiple=
"true"
>
<param
name=
"start-time"
/>
<param
name=
"end-time"
/>
<param
name=
"category"
/>
<statement>
<![CDATA[
SELECT <FIELDS/>
FROM
<TABLE/>
WHERE
<FIELD
name=
'alert_time'
/>
>= ${start-time}
AND
<FIELD
name=
'alert_time'
/>
<
= ${end-time}
<IF
type=
'NOT_NULL'
field=
'category'
>
AND
<FIELD
name=
'category'
/>
= ${category}
</IF>
ORDER BY
<FIELD
name=
'alert_time'
/>
asc
]]>
</statement>
</query>
</query-defs>
</entity>
<entity
name=
"alteration"
table=
"alteration"
alias=
"a"
>
<member
name=
"creation-date"
insert-expr=
"NOW()"
/>
...
...
cat-home/src/main/resources/META-INF/dal/model/alertconfig-codegen.xml
浏览文件 @
366edaf7
...
...
@@ -8,6 +8,7 @@
<attribute
name=
"enable"
value-type=
"boolean"
/>
<element
name=
"email"
value-type=
"String"
type=
"list"
names=
"emails"
/>
<element
name=
"phone"
value-type=
"String"
type=
"list"
names=
"phones"
/>
<element
name=
"weixin"
value-type=
"String"
type=
"list"
names=
"weixins"
/>
</entity>
</model>
cat-home/src/main/resources/META-INF/dal/model/alertconfig-model.xml
浏览文件 @
366edaf7
...
...
@@ -10,6 +10,7 @@
<attribute
name=
"enable"
value-type=
"boolean"
/>
<element
name=
"email"
value-type=
"String"
type=
"list"
names=
"emails"
/>
<element
name=
"phone"
value-type=
"String"
type=
"list"
names=
"phones"
/>
<element
name=
"weixin"
value-type=
"String"
type=
"list"
names=
"weixins"
/>
</entity>
</model>
cat-home/src/main/resources/META-INF/dal/model/alertsummary-codegen.xml
0 → 100644
浏览文件 @
366edaf7
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity
name=
"alert-summary"
root=
"true"
>
<attribute
name=
"alert-date"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"domain"
value-type=
"String"
/>
<entity-ref
name=
"category"
type=
"map"
names=
"categories"
method-find-or-create=
'true'
/>
</entity>
<entity
name=
"category"
>
<attribute
name=
"name"
value-type=
"String"
key=
"true"
/>
<entity-ref
name=
"alert"
type=
"list"
names=
"alerts"
/>
</entity>
<entity
name=
"alert"
>
<attribute
name=
"alertTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"type"
value-type=
"String"
/>
<attribute
name=
"metric"
value-type=
"String"
/>
<attribute
name=
"context"
value-type=
"String"
/>
</entity>
</model>
cat-home/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml
0 → 100644
浏览文件 @
366edaf7
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"alertsummary-codegen.xml"
/>
<file
path=
"alertsummary-model.xml"
/>
</manifest>
cat-home/src/main/resources/META-INF/dal/model/alertsummary-model.xml
0 → 100644
浏览文件 @
366edaf7
<?xml version="1.0" encoding="UTF-8"?>
<model
model-package=
"com.dianping.cat.home.alert.summary"
enable-sax-parser=
"true"
enable-xml-parser=
"true"
enable-xml-builder=
"true"
>
</model>
\ No newline at end of file
cat-home/src/main/resources/META-INF/wizard/jdbc/wizard.xml
浏览文件 @
366edaf7
...
...
@@ -17,6 +17,7 @@
<table
name=
"monthly_report_content"
/>
<table
name=
"weekly_report_content"
/>
<table
name=
"alert"
/>
<table
name=
"alert_summary"
/>
</group>
<group
name=
"alarm"
package=
"com.dianping.cat.home.dal.alarm"
>
<table
name=
"mailRecord"
/>
...
...
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
浏览文件 @
366edaf7
...
...
@@ -51,4 +51,7 @@
<model
package=
"com.dianping.cat.home.alertconfig"
name=
"alertconfig"
>
<sample-model>
/Users/leon/Documents/GitRepo/cat/cat-home/src/test/resources/config/alert-config.xml
</sample-model>
</model>
<model
package=
"com.dianping.cat.home.alertsummary"
name=
"alertsummary"
>
<sample-model>
/Users/leon/Desktop/AlertSummary.xml
</sample-model>
</model>
</wizard>
cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml
浏览文件 @
366edaf7
此差异已折叠。
点击以展开。
cat-home/src/main/resources/config/default-system-rule-config.xml
浏览文件 @
366edaf7
<?xml version="1.0" encoding="utf-8"?>
<monitor-rules>
<rule
id=
"CPUIdle"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_cpu)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_cpu)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"warning"
>
<sub-condition
type=
"MaxVal"
text=
"0.8"
/>
...
...
@@ -12,7 +12,7 @@
</config>
</rule>
<rule
id=
"DataUsage"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_/data-usage)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_/data-usage)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MaxVal"
text=
"0.9"
/>
...
...
@@ -20,7 +20,7 @@
</config>
</rule>
<rule
id=
"UsrUsage"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_/usr-usage)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_/usr-usage)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MaxVal"
text=
"0.9"
/>
...
...
@@ -28,7 +28,7 @@
</config>
</rule>
<rule
id=
"VarUsage"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_/var-usage)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_/var-usage)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MaxVal"
text=
"0.9"
/>
...
...
@@ -36,7 +36,7 @@
</config>
</rule>
<rule
id=
"UptimeDown"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_uptime)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_uptime)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"2"
alertType=
"error"
>
<sub-condition
type=
"FluDescPer"
text=
"0"
/>
...
...
@@ -44,7 +44,7 @@
</config>
</rule>
<rule
id=
"MD5Change"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_md5Change)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_md5Change)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MinVal"
text=
"0.9"
/>
...
...
@@ -52,7 +52,7 @@
</config>
</rule>
<rule
id=
"HostNameChange"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_hostNameChange)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_hostNameChange)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MinVal"
text=
"0.9"
/>
...
...
@@ -60,7 +60,7 @@
</config>
</rule>
<rule
id=
"HostIpChange"
>
<metric-item
type=
"regex"
monitorAvg=
"true"
t
ext=
".*(?=system_hostIpChange)"
/>
<metric-item
monitorAvg=
"true"
metricItemT
ext=
".*(?=system_hostIpChange)"
/>
<config
starttime=
"00:00"
endtime=
"24:00"
>
<condition
minute=
"1"
alertType=
"error"
>
<sub-condition
type=
"MinVal"
text=
"0.9"
/>
...
...
script/Cat.sql
浏览文件 @
366edaf7
...
...
@@ -321,4 +321,13 @@ CREATE TABLE `alert` (
`metric`
varchar
(
128
)
NOT
NULL
COMMENT
'告警指标'
,
`creation_date`
datetime
NOT
NULL
COMMENT
'数据插入时间'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COMMENT
=
'存储告警信息'
;
\ No newline at end of file
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COMMENT
=
'存储告警信息'
;
CREATE
TABLE
`alert_summary`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
COMMENT
'自增长ID'
,
`domain`
varchar
(
128
)
NOT
NULL
COMMENT
'告警项目'
,
`alert_time`
datetime
NOT
NULL
COMMENT
'告警时间'
,
`content`
text
NOT
NULL
COMMENT
'统一告警内容'
,
`creation_date`
datetime
NOT
NULL
COMMENT
'数据插入时间'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COMMENT
=
'统一告警信息'
;
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录