Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
月轩居士
SkyWalking
提交
dccd5d65
S
SkyWalking
项目概览
月轩居士
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dccd5d65
编写于
12月 08, 2016
作者:
A
ascrutae
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成告警功能
上级
4450b0eb
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
269 addition
and
0 deletion
+269
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/SpanAlarmHandler.java
.../com/a/eye/skywalking/storage/alarm/SpanAlarmHandler.java
+36
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/CheckResult.java
...m/a/eye/skywalking/storage/alarm/checker/CheckResult.java
+32
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExceptionChecker.java
...ye/skywalking/storage/alarm/checker/ExceptionChecker.java
+22
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimeChecker.java
.../skywalking/storage/alarm/checker/ExecuteTimeChecker.java
+29
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimePossibleErrorChecker.java
...torage/alarm/checker/ExecuteTimePossibleErrorChecker.java
+17
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimePossibleWarningChecker.java
...rage/alarm/checker/ExecuteTimePossibleWarningChecker.java
+17
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/FatalReason.java
...m/a/eye/skywalking/storage/alarm/checker/FatalReason.java
+8
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ISpanChecker.java
.../a/eye/skywalking/storage/alarm/checker/ISpanChecker.java
+10
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/sender/AlarmMessageSender.java
...e/skywalking/storage/alarm/sender/AlarmMessageSender.java
+13
-0
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/sender/AlarmMessageSenderFactory.java
...lking/storage/alarm/sender/AlarmMessageSenderFactory.java
+13
-0
skywalking-storage-center/skywalking-storage/src/test/java/com/a/eye/skywalking/storage/alarm/SpanAlarmHandlerTest.java
.../a/eye/skywalking/storage/alarm/SpanAlarmHandlerTest.java
+72
-0
未找到文件。
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/SpanAlarmHandler.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.a.eye.skywalking.storage.alarm.checker.*
;
import
com.a.eye.skywalking.storage.alarm.sender.AlarmMessageSenderFactory
;
import
com.lmax.disruptor.EventHandler
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by xin on 2016/12/8.
*/
public
class
SpanAlarmHandler
implements
EventHandler
<
AckSpan
>
{
private
List
<
ISpanChecker
>
spanCheckers
=
new
ArrayList
<
ISpanChecker
>();
public
SpanAlarmHandler
()
{
spanCheckers
.
add
(
new
ExceptionChecker
());
spanCheckers
.
add
(
new
ExecuteTimePossibleWarningChecker
());
spanCheckers
.
add
(
new
ExecuteTimePossibleErrorChecker
());
}
@Override
public
void
onEvent
(
AckSpan
span
,
long
sequence
,
boolean
endOfBatch
)
throws
Exception
{
for
(
ISpanChecker
spanChecker
:
spanCheckers
)
{
CheckResult
result
=
spanChecker
.
check
(
span
);
if
(!
result
.
isPassed
())
{
AlarmMessageSenderFactory
.
getSender
().
send
(
generateAlarmMessageKey
(
span
,
result
.
getFatalReason
()),
result
.
getMessage
());
}
}
}
private
String
generateAlarmMessageKey
(
AckSpan
span
,
FatalReason
reason
)
{
return
span
.
getUsername
()
+
"-"
+
span
.
getApplicationCode
()
+
"-"
+
(
System
.
currentTimeMillis
()
/
(
10000
*
6
))
+
"-"
+
reason
;
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/CheckResult.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
/**
* Created by xin on 2016/12/8.
*/
public
class
CheckResult
{
private
boolean
passed
;
private
FatalReason
fatalReason
;
private
String
message
;
public
CheckResult
()
{
this
.
passed
=
true
;
}
public
CheckResult
(
FatalReason
level
,
String
alarmMessage
)
{
this
.
passed
=
false
;
this
.
fatalReason
=
level
;
this
.
message
=
alarmMessage
;
}
public
boolean
isPassed
()
{
return
passed
;
}
public
FatalReason
getFatalReason
()
{
return
fatalReason
;
}
public
String
getMessage
()
{
return
message
;
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExceptionChecker.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.a.eye.skywalking.storage.config.Config
;
public
class
ExceptionChecker
implements
ISpanChecker
{
@Override
public
CheckResult
check
(
AckSpan
span
)
{
if
(
span
.
getStatusCode
()
!=
1
)
return
new
CheckResult
();
String
exceptionStack
=
span
.
getExceptionStack
();
if
(
exceptionStack
==
null
)
{
exceptionStack
=
""
;
}
else
if
(
exceptionStack
.
length
()
>
Config
.
Alarm
.
ALARM_EXCEPTION_STACK_LENGTH
)
{
exceptionStack
=
exceptionStack
.
substring
(
0
,
Config
.
Alarm
.
ALARM_EXCEPTION_STACK_LENGTH
);
}
return
new
CheckResult
(
FatalReason
.
EXCEPTION_ERROR
,
exceptionStack
);
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimeChecker.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
/**
* Created by xin on 2016/12/8.
*/
public
abstract
class
ExecuteTimeChecker
implements
ISpanChecker
{
@Override
public
CheckResult
check
(
AckSpan
span
)
{
long
cost
=
span
.
getCost
();
if
(
isOverThreshold
(
cost
))
{
return
new
CheckResult
(
getFatalLevel
(),
generateAlarmMessage
(
span
));
}
return
new
CheckResult
();
}
protected
abstract
boolean
isOverThreshold
(
long
cost
);
protected
abstract
FatalReason
getFatalLevel
();
protected
String
generateAlarmMessage
(
AckSpan
span
)
{
return
span
.
getViewpointId
()
+
" cost "
+
span
.
getCost
()
+
" ms."
;
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimePossibleErrorChecker.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
/**
* Created by xin on 2016/12/8.
*/
public
class
ExecuteTimePossibleErrorChecker
extends
ExecuteTimeChecker
{
@Override
protected
boolean
isOverThreshold
(
long
cost
)
{
return
cost
>=
3000
;
}
@Override
protected
FatalReason
getFatalLevel
()
{
return
FatalReason
.
EXECUTE_TIME_ERROR
;
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ExecuteTimePossibleWarningChecker.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
/**
* Created by xin on 2016/12/8.
*/
public
class
ExecuteTimePossibleWarningChecker
extends
ExecuteTimeChecker
{
@Override
protected
boolean
isOverThreshold
(
long
cost
)
{
return
cost
>
500
&&
cost
<
3000
;
}
@Override
protected
FatalReason
getFatalLevel
()
{
return
FatalReason
.
EXECUTE_TIME_WARNING
;
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/FatalReason.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
/**
* Created by xin on 2016/12/8.
*/
public
enum
FatalReason
{
EXCEPTION_ERROR
,
EXECUTE_TIME_ERROR
,
EXECUTE_TIME_WARNING
;
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/checker/ISpanChecker.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.checker
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
/**
* Created by xin on 2016/12/8.
*/
public
interface
ISpanChecker
{
CheckResult
check
(
AckSpan
span
);
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/sender/AlarmMessageSender.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.sender
;
/**
* Created by xin on 2016/12/8.
*/
public
class
AlarmMessageSender
{
public
void
send
(
String
alarmKey
,
String
message
)
{
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/alarm/sender/AlarmMessageSenderFactory.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm.sender
;
/**
* Created by xin on 2016/12/8.
*/
public
class
AlarmMessageSenderFactory
{
private
static
AlarmMessageSender
sender
=
new
AlarmMessageSender
();
public
static
AlarmMessageSender
getSender
()
{
return
sender
;
}
}
skywalking-storage-center/skywalking-storage/src/test/java/com/a/eye/skywalking/storage/alarm/SpanAlarmHandlerTest.java
0 → 100644
浏览文件 @
dccd5d65
package
com.a.eye.skywalking.storage.alarm
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.a.eye.skywalking.network.grpc.TraceId
;
import
com.a.eye.skywalking.storage.alarm.sender.AlarmMessageSender
;
import
com.a.eye.skywalking.storage.alarm.sender.AlarmMessageSenderFactory
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.powermock.api.mockito.PowerMockito
;
import
org.powermock.core.classloader.annotations.PrepareForTest
;
import
org.powermock.modules.junit4.PowerMockRunner
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.*;
@RunWith
(
PowerMockRunner
.
class
)
@PrepareForTest
(
AlarmMessageSenderFactory
.
class
)
public
class
SpanAlarmHandlerTest
{
@Mock
private
AlarmMessageSender
messageHandler
;
@InjectMocks
private
SpanAlarmHandler
handler
;
private
AckSpan
normalAckSpan
;
private
AckSpan
costMuchSpan
;
private
AckSpan
costTooMuchSpan
;
private
AckSpan
exceptionSpan
;
@Before
public
void
setUp
()
{
PowerMockito
.
mockStatic
(
AlarmMessageSenderFactory
.
class
);
when
(
AlarmMessageSenderFactory
.
getSender
()).
thenReturn
(
messageHandler
);
long
startTime
=
System
.
currentTimeMillis
();
AckSpan
.
Builder
builder
=
AckSpan
.
newBuilder
().
setApplicationCode
(
"test"
).
setUsername
(
"test"
).
setCost
(
20
)
.
setStatusCode
(
0
).
setLevelId
(
0
).
setParentLevel
(
"0.0"
).
setTraceId
(
TraceId
.
newBuilder
()
.
addSegments
(
2016
).
addSegments
(
startTime
).
addSegments
(
2
).
addSegments
(
100
).
addSegments
(
30
)
.
addSegments
(
1
).
build
());
normalAckSpan
=
builder
.
build
();
costMuchSpan
=
builder
.
setCost
(
600
).
build
();
costTooMuchSpan
=
builder
.
setCost
(
4000
).
build
();
exceptionSpan
=
builder
.
setCost
(
20
).
setStatusCode
(
1
).
setExceptionStack
(
"occur exception"
).
build
();
}
@Test
public
void
testNormalSpan
()
throws
Exception
{
handler
.
onEvent
(
normalAckSpan
,
1
,
false
);
verify
(
messageHandler
,
never
()).
send
(
any
(),
anyString
());
}
@Test
public
void
testCostMuchSpan
()
throws
Exception
{
handler
.
onEvent
(
costMuchSpan
,
1
,
false
);
verify
(
messageHandler
,
times
(
1
)).
send
(
any
(),
anyString
());
}
@Test
public
void
testExceptionSpan
()
throws
Exception
{
handler
.
onEvent
(
exceptionSpan
,
1
,
false
);
verify
(
messageHandler
,
times
(
1
)).
send
(
any
(),
anyString
());
}
@Test
public
void
testCostTooMuchSpan
()
throws
Exception
{
handler
.
onEvent
(
costTooMuchSpan
,
1
,
false
);
verify
(
messageHandler
,
times
(
1
)).
send
(
any
(),
anyString
());
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录