Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
javalover123888
SkyWalking
提交
bc848be5
S
SkyWalking
项目概览
javalover123888
/
SkyWalking
与 Fork 源项目一致
Fork自
山不在高_有仙则灵 / SkyWalking
通知
2
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,发现更多精彩内容 >>
提交
bc848be5
编写于
2月 28, 2017
作者:
A
ascrutae
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add test case and fix some issue
上级
de74af60
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
391 addition
and
8 deletion
+391
-8
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboInterceptor.java
...a/com/a/eye/skywalking/plugin/dubbo/DubboInterceptor.java
+1
-1
skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java
...ng/plugin/httpClient/v4/HttpClientExecuteInterceptor.java
+1
-1
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanProviderInterceptor.java
...eye/skywalking/plugin/motan/MotanProviderInterceptor.java
+9
-5
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanConsumerFetchRequestURLInterceptorTest.java
...in/motan/MotanConsumerFetchRequestURLInterceptorTest.java
+54
-0
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanConsumerInvokeInterceptorTest.java
...king/plugin/motan/MotanConsumerInvokeInterceptorTest.java
+141
-0
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanProviderInterceptorTest.java
...skywalking/plugin/motan/MotanProviderInterceptorTest.java
+184
-0
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatInterceptor.java
.../a/eye/skywalking/plugin/tomcat78x/TomcatInterceptor.java
+1
-1
未找到文件。
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboInterceptor.java
浏览文件 @
bc848be5
...
...
@@ -27,7 +27,7 @@ import com.alibaba.dubbo.rpc.RpcContext;
*/
public
class
DubboInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
static
final
String
ATTACHMENT_NAME_OF_CONTEXT_DATA
=
"
contextData
"
;
public
static
final
String
ATTACHMENT_NAME_OF_CONTEXT_DATA
=
"
SWTraceContext
"
;
public
static
final
String
DUBBO_COMPONENT
=
"Dubbo"
;
/**
...
...
skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java
浏览文件 @
bc848be5
...
...
@@ -23,7 +23,7 @@ import org.apache.http.StatusLine;
* @author zhangxin
*/
public
class
HttpClientExecuteInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
static
final
String
HEADER_NAME_OF_CONTEXT_DATA
=
"S
KYWALKING_CONTEXT_DATA
"
;
public
static
final
String
HEADER_NAME_OF_CONTEXT_DATA
=
"S
WTraceContext
"
;
private
static
final
String
COMPONENT_NAME
=
"Http"
;
@Override
...
...
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanProviderInterceptor.java
浏览文件 @
bc848be5
...
...
@@ -8,6 +8,7 @@ import com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceConstructorIn
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.MethodInterceptResult
;
import
com.a.eye.skywalking.api.util.StringUtil
;
import
com.a.eye.skywalking.trace.Span
;
import
com.a.eye.skywalking.trace.tag.Tags
;
import
com.weibo.api.motan.rpc.Request
;
...
...
@@ -33,7 +34,7 @@ public class MotanProviderInterceptor implements InstanceConstructorInterceptor,
/**
* The {@link Request#getAttachments()} key. It maps to the serialized {@link ContextCarrier}.
*/
private
static
final
String
ATTACHMENT_KEY_OF_CONTEXT_DATA
=
"
contextData
"
;
private
static
final
String
ATTACHMENT_KEY_OF_CONTEXT_DATA
=
"
SWTraceContext
"
;
/**
* Motan component
*/
...
...
@@ -50,7 +51,7 @@ public class MotanProviderInterceptor implements InstanceConstructorInterceptor,
URL
url
=
(
URL
)
context
.
get
(
KEY_NAME_OF_REQUEST_URL
);
if
(
url
!=
null
)
{
com
.
weibo
.
api
.
motan
.
rpc
.
Request
request
=
(
com
.
weibo
.
api
.
motan
.
rpc
.
Request
)
interceptorContext
.
allArguments
()[
0
];
Span
span
=
ContextManager
.
INSTANCE
.
createSpan
(
generateViewPoint
(
url
,
request
));
Span
span
=
ContextManager
.
INSTANCE
.
createSpan
(
generateViewPoint
(
request
));
Tags
.
COMPONENT
.
set
(
span
,
MOTAN_COMPONENT
);
Tags
.
URL
.
set
(
span
,
url
.
getIdentity
());
Tags
.
PEER_PORT
.
set
(
span
,
url
.
getPort
());
...
...
@@ -59,7 +60,9 @@ public class MotanProviderInterceptor implements InstanceConstructorInterceptor,
Tags
.
SPAN_LAYER
.
asRPCFramework
(
span
);
String
serializedContextData
=
request
.
getAttachments
().
get
(
ATTACHMENT_KEY_OF_CONTEXT_DATA
);
ContextManager
.
INSTANCE
.
extract
(
new
ContextCarrier
().
deserialize
(
serializedContextData
));
if
(!
StringUtil
.
isEmpty
(
serializedContextData
))
{
ContextManager
.
INSTANCE
.
extract
(
new
ContextCarrier
().
deserialize
(
serializedContextData
));
}
}
}
...
...
@@ -72,6 +75,7 @@ public class MotanProviderInterceptor implements InstanceConstructorInterceptor,
Tags
.
ERROR
.
set
(
span
,
true
);
span
.
log
(
response
.
getException
());
}
ContextManager
.
INSTANCE
.
stopSpan
();
return
ret
;
}
...
...
@@ -82,8 +86,8 @@ public class MotanProviderInterceptor implements InstanceConstructorInterceptor,
}
private
static
String
generateViewPoint
(
URL
serviceURI
,
Request
request
)
{
StringBuilder
viewPoint
=
new
StringBuilder
(
serviceURI
.
getUri
());
private
static
String
generateViewPoint
(
Request
request
)
{
StringBuilder
viewPoint
=
new
StringBuilder
(
request
.
getInterfaceName
());
viewPoint
.
append
(
"."
+
request
.
getMethodName
());
viewPoint
.
append
(
"("
+
request
.
getParamtersDesc
()
+
")"
);
return
viewPoint
.
toString
();
...
...
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanConsumerFetchRequestURLInterceptorTest.java
0 → 100644
浏览文件 @
bc848be5
package
com.a.eye.skywalking.plugin.motan
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
import
com.weibo.api.motan.rpc.URL
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Matchers
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
MotanConsumerFetchRequestURLInterceptorTest
{
private
MotanConsumerFetchRequestURLInterceptor
requestURLInterceptor
;
@Mock
private
EnhancedClassInstanceContext
instanceContext
;
@Mock
private
InstanceMethodInvokeContext
interceptorContext
;
private
URL
url
;
@Before
public
void
setUp
()
{
requestURLInterceptor
=
new
MotanConsumerFetchRequestURLInterceptor
();
url
=
URL
.
valueOf
(
"motan://127.0.0.0.1:34000/com.a.eye.skywalking.test.TestService"
);
when
(
interceptorContext
.
allArguments
()).
thenReturn
(
new
Object
[]{
url
});
}
@Test
public
void
testFetchRequestURL
()
{
requestURLInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
requestURLInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
null
);
verify
(
instanceContext
,
times
(
1
)).
set
(
Matchers
.
any
(),
Matchers
.
any
());
}
@Test
public
void
testFetchRequestURLWithException
(){
requestURLInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
requestURLInterceptor
.
handleMethodException
(
new
RuntimeException
(),
instanceContext
,
interceptorContext
);
requestURLInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
null
);
verify
(
instanceContext
,
times
(
1
)).
set
(
Matchers
.
any
(),
Matchers
.
any
());
}
}
\ No newline at end of file
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanConsumerInvokeInterceptorTest.java
0 → 100644
浏览文件 @
bc848be5
package
com.a.eye.skywalking.plugin.motan
;
import
com.a.eye.skywalking.api.context.TracerContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
import
com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener
;
import
com.a.eye.skywalking.sniffer.mock.context.SegmentAssert
;
import
com.a.eye.skywalking.trace.LogData
;
import
com.a.eye.skywalking.trace.Span
;
import
com.a.eye.skywalking.trace.TraceSegment
;
import
com.a.eye.skywalking.trace.tag.Tags
;
import
com.weibo.api.motan.rpc.Request
;
import
com.weibo.api.motan.rpc.Response
;
import
com.weibo.api.motan.rpc.URL
;
import
org.hamcrest.CoreMatchers
;
import
org.hamcrest.MatcherAssert
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
MotanConsumerInvokeInterceptorTest
{
private
MockTracerContextListener
contextListener
;
private
MotanConsumerInvokeInterceptor
invokeInterceptor
;
@Mock
private
EnhancedClassInstanceContext
instanceContext
;
@Mock
private
InstanceMethodInvokeContext
interceptorContext
;
@Mock
private
Response
response
;
@Mock
private
Request
request
;
private
URL
url
;
@Before
public
void
setUp
()
{
contextListener
=
new
MockTracerContextListener
();
invokeInterceptor
=
new
MotanConsumerInvokeInterceptor
();
url
=
URL
.
valueOf
(
"motan://127.0.0.1:34000/com.a.eye.skywalking.test.TestService"
);
TracerContext
.
ListenerManager
.
add
(
contextListener
);
when
(
instanceContext
.
get
(
"REQUEST_URL"
)).
thenReturn
(
url
);
when
(
interceptorContext
.
allArguments
()).
thenReturn
(
new
Object
[]{
request
});
when
(
request
.
getMethodName
()).
thenReturn
(
"test"
);
when
(
request
.
getInterfaceName
()).
thenReturn
(
"com.a.eye.skywalking.test.TestService"
);
when
(
request
.
getParamtersDesc
()).
thenReturn
(
"java.lang.String, java.lang.Object"
);
}
@Test
public
void
testInvokeInterceptor
()
{
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
contextListener
.
assertSize
(
1
);
contextListener
.
assertTraceSegment
(
0
,
new
SegmentAssert
()
{
@Override
public
void
call
(
TraceSegment
traceSegment
)
{
assertThat
(
traceSegment
.
getSpans
().
size
(),
is
(
1
));
Span
span
=
traceSegment
.
getSpans
().
get
(
0
);
assertMotanConsumerSpan
(
span
);
verify
(
request
,
times
(
1
)).
setAttachment
(
anyString
(),
anyString
());
}
});
}
@Test
public
void
testResponseWithException
()
{
when
(
response
.
getException
()).
thenReturn
(
new
RuntimeException
());
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
contextListener
.
assertSize
(
1
);
assertTraceSegmentWhenOccurException
();
}
private
void
assertTraceSegmentWhenOccurException
()
{
contextListener
.
assertTraceSegment
(
0
,
new
SegmentAssert
()
{
@Override
public
void
call
(
TraceSegment
traceSegment
)
{
assertThat
(
traceSegment
.
getSpans
().
size
(),
is
(
1
));
Span
span
=
traceSegment
.
getSpans
().
get
(
0
);
assertMotanConsumerSpan
(
span
);
verify
(
request
,
times
(
1
)).
setAttachment
(
anyString
(),
anyString
());
assertThat
(
span
.
getLogs
().
size
(),
is
(
1
));
LogData
logData
=
span
.
getLogs
().
get
(
0
);
assertLogData
(
logData
);
}
});
}
@Test
public
void
testInvokeInterceptorWithException
()
{
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
handleMethodException
(
new
RuntimeException
(),
instanceContext
,
interceptorContext
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
contextListener
.
assertSize
(
1
);
assertTraceSegmentWhenOccurException
();
}
private
void
assertLogData
(
LogData
logData
)
{
assertThat
(
logData
.
getFields
().
size
(),
is
(
4
));
MatcherAssert
.
assertThat
(
logData
.
getFields
().
get
(
"event"
),
CoreMatchers
.<
Object
>
is
(
"error"
));
MatcherAssert
.
assertThat
(
logData
.
getFields
().
get
(
"error.kind"
),
CoreMatchers
.<
Object
>
is
(
RuntimeException
.
class
.
getName
()));
assertNull
(
logData
.
getFields
().
get
(
"message"
));
}
private
void
assertMotanConsumerSpan
(
Span
span
)
{
assertThat
(
span
.
getOperationName
(),
is
(
"com.a.eye.skywalking.test.TestService.test(java.lang.String, java.lang.Object)"
));
assertThat
(
Tags
.
COMPONENT
.
get
(
span
),
is
(
"Motan"
));
assertThat
(
Tags
.
SPAN_KIND
.
get
(
span
),
is
(
Tags
.
SPAN_KIND_CLIENT
));
assertThat
(
Tags
.
PEER_HOST
.
get
(
span
),
is
(
"127.0.0.1"
));
assertThat
(
Tags
.
PEER_PORT
.
get
(
span
),
is
(
34000
));
assertTrue
(
Tags
.
SPAN_LAYER
.
isRPCFramework
(
span
));
assertThat
(
Tags
.
URL
.
get
(
span
),
is
(
"motan://127.0.0.1:34000/default_rpc/com.a.eye.skywalking.test.TestService/1.0/service"
));
}
@After
public
void
tearDown
()
{
TracerContext
.
ListenerManager
.
remove
(
contextListener
);
}
}
\ No newline at end of file
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/test/java/com/a/eye/skywalking/plugin/motan/MotanProviderInterceptorTest.java
0 → 100644
浏览文件 @
bc848be5
package
com.a.eye.skywalking.plugin.motan
;
import
com.a.eye.skywalking.api.context.TracerContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.ConstructorInvokeContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
import
com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener
;
import
com.a.eye.skywalking.sniffer.mock.context.SegmentAssert
;
import
com.a.eye.skywalking.trace.LogData
;
import
com.a.eye.skywalking.trace.Span
;
import
com.a.eye.skywalking.trace.TraceSegment
;
import
com.a.eye.skywalking.trace.TraceSegmentRef
;
import
com.a.eye.skywalking.trace.tag.Tags
;
import
com.weibo.api.motan.rpc.Request
;
import
com.weibo.api.motan.rpc.Response
;
import
com.weibo.api.motan.rpc.URL
;
import
org.hamcrest.CoreMatchers
;
import
org.hamcrest.MatcherAssert
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Matchers
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
java.util.HashMap
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
MotanProviderInterceptorTest
{
private
MockTracerContextListener
contextListener
;
private
MotanProviderInterceptor
invokeInterceptor
;
@Mock
private
EnhancedClassInstanceContext
instanceContext
;
@Mock
private
InstanceMethodInvokeContext
interceptorContext
;
@Mock
private
ConstructorInvokeContext
constructorInvokeContext
;
@Mock
private
Response
response
;
@Mock
private
Request
request
;
private
URL
url
;
@Before
public
void
setUp
()
{
invokeInterceptor
=
new
MotanProviderInterceptor
();
contextListener
=
new
MockTracerContextListener
();
url
=
URL
.
valueOf
(
"motan://127.0.0.1:34000/com.a.eye.skywalking.test.TestService"
);
TracerContext
.
ListenerManager
.
add
(
contextListener
);
when
(
instanceContext
.
get
(
"REQUEST_URL"
)).
thenReturn
(
url
);
when
(
interceptorContext
.
allArguments
()).
thenReturn
(
new
Object
[]{
request
});
when
(
request
.
getMethodName
()).
thenReturn
(
"test"
);
when
(
request
.
getInterfaceName
()).
thenReturn
(
"com.a.eye.skywalking.test.TestService"
);
when
(
request
.
getParamtersDesc
()).
thenReturn
(
"java.lang.String, java.lang.Object"
);
when
(
constructorInvokeContext
.
allArguments
()).
thenReturn
(
new
Object
[]{
url
});
}
@Test
public
void
testFetchRequestURL
()
{
invokeInterceptor
.
onConstruct
(
instanceContext
,
constructorInvokeContext
);
verify
(
instanceContext
,
times
(
1
)).
set
(
Matchers
.
any
(),
Matchers
.
any
());
}
@Test
public
void
testInvokerWithoutRefSegment
()
{
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
contextListener
.
assertSize
(
1
);
contextListener
.
assertTraceSegment
(
0
,
new
SegmentAssert
()
{
@Override
public
void
call
(
TraceSegment
traceSegment
)
{
assertThat
(
traceSegment
.
getSpans
().
size
(),
is
(
1
));
Span
span
=
traceSegment
.
getSpans
().
get
(
0
);
assertMotanProviderSpan
(
span
);
assertTrue
(
traceSegment
.
getPrimaryRef
()
==
null
);
}
});
}
@Test
public
void
testInvokerWithRefSegment
()
{
HashMap
attachments
=
new
HashMap
();
attachments
.
put
(
"SWTraceContext"
,
"302017.1487666919810.624424584.17332.1.1|1|REMOTE_APP|127.0.0.1"
);
when
(
request
.
getAttachments
()).
thenReturn
(
attachments
);
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
contextListener
.
assertSize
(
1
);
contextListener
.
assertTraceSegment
(
0
,
new
SegmentAssert
()
{
@Override
public
void
call
(
TraceSegment
traceSegment
)
{
assertThat
(
traceSegment
.
getSpans
().
size
(),
is
(
1
));
Span
span
=
traceSegment
.
getSpans
().
get
(
0
);
assertMotanProviderSpan
(
span
);
assertRefSegment
(
traceSegment
.
getPrimaryRef
());
}
});
}
@Test
public
void
testResponseWithException
()
{
when
(
response
.
getException
()).
thenReturn
(
new
RuntimeException
());
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
assertTraceSegmentWhenOccurException
();
}
@Test
public
void
testOccurException
()
{
invokeInterceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
null
);
invokeInterceptor
.
handleMethodException
(
new
RuntimeException
(),
instanceContext
,
interceptorContext
);
invokeInterceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
response
);
assertTraceSegmentWhenOccurException
();
}
private
void
assertTraceSegmentWhenOccurException
()
{
contextListener
.
assertSize
(
1
);
contextListener
.
assertTraceSegment
(
0
,
new
SegmentAssert
()
{
@Override
public
void
call
(
TraceSegment
traceSegment
)
{
assertThat
(
traceSegment
.
getSpans
().
size
(),
is
(
1
));
Span
span
=
traceSegment
.
getSpans
().
get
(
0
);
assertMotanProviderSpan
(
span
);
assertThat
(
span
.
getLogs
().
size
(),
is
(
1
));
LogData
logData
=
span
.
getLogs
().
get
(
0
);
assertLogData
(
logData
);
}
});
}
private
void
assertLogData
(
LogData
logData
)
{
assertThat
(
logData
.
getFields
().
size
(),
is
(
4
));
MatcherAssert
.
assertThat
(
logData
.
getFields
().
get
(
"event"
),
CoreMatchers
.<
Object
>
is
(
"error"
));
MatcherAssert
.
assertThat
(
logData
.
getFields
().
get
(
"error.kind"
),
CoreMatchers
.<
Object
>
is
(
RuntimeException
.
class
.
getName
()));
assertNull
(
logData
.
getFields
().
get
(
"message"
));
}
private
void
assertRefSegment
(
TraceSegmentRef
primaryRef
)
{
assertThat
(
primaryRef
.
getTraceSegmentId
(),
is
(
"302017.1487666919810.624424584.17332.1.1"
));
assertThat
(
primaryRef
.
getSpanId
(),
is
(
1
));
assertThat
(
primaryRef
.
getPeerHost
(),
is
(
"127.0.0.1"
));
}
private
void
assertMotanProviderSpan
(
Span
span
)
{
assertThat
(
span
.
getOperationName
(),
is
(
"com.a.eye.skywalking.test.TestService.test(java.lang.String, java.lang.Object)"
));
assertThat
(
Tags
.
COMPONENT
.
get
(
span
),
is
(
"Motan"
));
assertThat
(
Tags
.
SPAN_KIND
.
get
(
span
),
is
(
Tags
.
SPAN_KIND_SERVER
));
assertThat
(
Tags
.
PEER_HOST
.
get
(
span
),
is
(
"127.0.0.1"
));
assertThat
(
Tags
.
PEER_PORT
.
get
(
span
),
is
(
34000
));
assertTrue
(
Tags
.
SPAN_LAYER
.
isRPCFramework
(
span
));
assertThat
(
Tags
.
URL
.
get
(
span
),
is
(
"motan://127.0.0.1:34000/default_rpc/com.a.eye.skywalking.test.TestService/1.0/service"
));
}
@After
public
void
tearDown
()
{
TracerContext
.
ListenerManager
.
remove
(
contextListener
);
}
}
\ No newline at end of file
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatInterceptor.java
浏览文件 @
bc848be5
...
...
@@ -22,7 +22,7 @@ public class TomcatInterceptor implements InstanceMethodsAroundInterceptor {
/**
* Header name that the serialized context data stored in {@link HttpServletRequest#getHeader(String)}.
*/
public
static
final
String
HEADER_NAME_OF_CONTEXT_DATA
=
"S
KYWALKING_CONTEXT_DATA
"
;
public
static
final
String
HEADER_NAME_OF_CONTEXT_DATA
=
"S
WTraceContext
"
;
/**
* Tomcat component.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录