Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
月轩居士
SkyWalking
提交
30b79503
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,体验更适合开发者的 AI 搜索 >>
提交
30b79503
编写于
4月 27, 2017
作者:
wu-sheng
提交者:
GitHub
4月 27, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #178 from ascrutae/zhangxin/fix/150
Redis plugin cannot work on tomcat
上级
d8c90352
73401d10
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
74 addition
and
55 deletion
+74
-55
skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPostTestCase.java
...ing/collector/worker/httpserver/AbstractPostTestCase.java
+2
-2
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/plugin/interceptor/assist/NoConcurrencyAccessObject.java
.../plugin/interceptor/assist/NoConcurrencyAccessObject.java
+15
-8
skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/api/plugin/assist/NoConcurrencyAccessObjectTest.java
...king/api/plugin/assist/NoConcurrencyAccessObjectTest.java
+29
-17
skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java
...ye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java
+28
-28
未找到文件。
skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPostTestCase.java
浏览文件 @
30b79503
...
@@ -26,8 +26,8 @@ public class AbstractPostTestCase {
...
@@ -26,8 +26,8 @@ public class AbstractPostTestCase {
@Before
@Before
public
void
init
()
{
public
void
init
()
{
ClusterWorkerContext
clusterWorkerContext
=
mock
(
ClusterWorkerContext
.
class
);
ClusterWorkerContext
clusterWorkerContext
=
PowerMockito
.
mock
(
ClusterWorkerContext
.
class
);
LocalWorkerContext
localWorkerContext
=
mock
(
LocalWorkerContext
.
class
);
LocalWorkerContext
localWorkerContext
=
PowerMockito
.
mock
(
LocalWorkerContext
.
class
);
post
=
spy
(
new
TestAbstractPost
(
TestAbstractPost
.
WorkerRole
.
INSTANCE
,
clusterWorkerContext
,
localWorkerContext
));
post
=
spy
(
new
TestAbstractPost
(
TestAbstractPost
.
WorkerRole
.
INSTANCE
,
clusterWorkerContext
,
localWorkerContext
));
}
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/plugin/interceptor/assist/NoConcurrencyAccessObject.java
浏览文件 @
30b79503
...
@@ -2,32 +2,35 @@ package com.a.eye.skywalking.api.plugin.interceptor.assist;
...
@@ -2,32 +2,35 @@ package com.a.eye.skywalking.api.plugin.interceptor.assist;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.InterceptorException
;
import
com.a.eye.skywalking.api.plugin.interceptor.InterceptorException
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
/**
/**
* {@link NoConcurrencyAccessObject} is method invocation counter,
* {@link NoConcurrencyAccessObject} is method invocation counter,
* when {@link #whenEnter(EnhancedClassInstanceContext,
Runnable)}
, counter + 1;
* when {@link #whenEnter(EnhancedClassInstanceContext,
InstanceMethodInvokeContext)}
, counter + 1;
* and when {@link #whenExist(EnhancedClassInstanceContext
, Runnable)}
, counter -1;
* and when {@link #whenExist(EnhancedClassInstanceContext
)}
, counter -1;
*
*
* When, and only when, the first enter and last exist, also meaning first access, the Runnable is called.
* When, and only when, the first enter and last exist, also meaning first access,
* the {@link #enter(EnhancedClassInstanceContext, InstanceMethodInvokeContext)}
* and {@link #exit()} are called.
*
*
* @author wusheng
* @author wusheng
*/
*/
public
class
NoConcurrencyAccessObject
{
public
abstract
class
NoConcurrencyAccessObject
{
private
static
final
String
INVOKE_COUNTER_KEY
=
"__$invokeCounterKey"
;
private
static
final
String
INVOKE_COUNTER_KEY
=
"__$invokeCounterKey"
;
public
void
whenEnter
(
EnhancedClassInstanceContext
context
,
Runnable
runnable
)
{
public
void
whenEnter
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
)
{
if
(!
context
.
isContain
(
INVOKE_COUNTER_KEY
))
{
if
(!
context
.
isContain
(
INVOKE_COUNTER_KEY
))
{
context
.
set
(
INVOKE_COUNTER_KEY
,
0
);
context
.
set
(
INVOKE_COUNTER_KEY
,
0
);
}
}
int
counter
=
context
.
get
(
INVOKE_COUNTER_KEY
,
int
counter
=
context
.
get
(
INVOKE_COUNTER_KEY
,
Integer
.
class
);
Integer
.
class
);
if
(++
counter
==
1
)
{
if
(++
counter
==
1
)
{
runnable
.
run
(
);
enter
(
context
,
interceptorContext
);
}
}
context
.
set
(
INVOKE_COUNTER_KEY
,
counter
);
context
.
set
(
INVOKE_COUNTER_KEY
,
counter
);
}
}
public
void
whenExist
(
EnhancedClassInstanceContext
context
,
Runnable
runnable
)
{
public
void
whenExist
(
EnhancedClassInstanceContext
context
)
{
if
(!
context
.
isContain
(
INVOKE_COUNTER_KEY
))
{
if
(!
context
.
isContain
(
INVOKE_COUNTER_KEY
))
{
throw
new
InterceptorException
(
throw
new
InterceptorException
(
"key=INVOKE_COUNTER_KEY not found is context. unexpected situation."
);
"key=INVOKE_COUNTER_KEY not found is context. unexpected situation."
);
...
@@ -35,8 +38,12 @@ public class NoConcurrencyAccessObject {
...
@@ -35,8 +38,12 @@ public class NoConcurrencyAccessObject {
int
counter
=
context
.
get
(
INVOKE_COUNTER_KEY
,
int
counter
=
context
.
get
(
INVOKE_COUNTER_KEY
,
Integer
.
class
);
Integer
.
class
);
if
(--
counter
==
0
)
{
if
(--
counter
==
0
)
{
runnable
.
run
();
exit
();
}
}
context
.
set
(
INVOKE_COUNTER_KEY
,
counter
);
context
.
set
(
INVOKE_COUNTER_KEY
,
counter
);
}
}
protected
abstract
void
enter
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
);
protected
abstract
void
exit
();
}
}
skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/api/plugin/assist/NoConcurrencyAccessObjectTest.java
浏览文件 @
30b79503
...
@@ -2,41 +2,53 @@ package com.a.eye.skywalking.api.plugin.assist;
...
@@ -2,41 +2,53 @@ package com.a.eye.skywalking.api.plugin.assist;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.api.plugin.interceptor.assist.NoConcurrencyAccessObject
;
import
com.a.eye.skywalking.api.plugin.interceptor.assist.NoConcurrencyAccessObject
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodInvokeContext
;
import
org.junit.Assert
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
/**
/**
* @author wusheng
* @author wusheng
*/
*/
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
NoConcurrencyAccessObjectTest
{
public
class
NoConcurrencyAccessObjectTest
{
@Mock
private
InstanceMethodInvokeContext
invokeContext
;
@Test
@Test
public
void
testEntraExitCounter
()
{
public
void
testEntraExitCounter
()
{
NoConcurrencyAccessObject
object
=
new
NoConcurrencyAccessObject
();
final
EnhancedClassInstanceContext
context
=
new
EnhancedClassInstanceContext
();
final
EnhancedClassInstanceContext
context
=
new
EnhancedClassInstanceContext
();
object
.
whenEnter
(
context
,
new
Runnable
()
{
NoConcurrencyAccessObject
first
=
new
NoConcurrencyAccessObject
(){
@Override
@Override
p
ublic
void
run
(
)
{
p
rotected
void
enter
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
)
{
context
.
set
(
"firstEntrance"
,
true
);
context
.
set
(
"firstEntrance"
,
true
);
}
}
});
object
.
whenEnter
(
context
,
new
Runnable
()
{
@Override
protected
void
exit
()
{
@Override
public
void
run
()
{
context
.
set
(
"secondEntrance"
,
true
);
}
});
object
.
whenExist
(
context
,
new
Runnable
()
{
@Override
public
void
run
()
{
context
.
set
(
"firstExit"
,
true
);
context
.
set
(
"firstExit"
,
true
);
}
}
});
};
object
.
whenExist
(
context
,
new
Runnable
()
{
NoConcurrencyAccessObject
second
=
new
NoConcurrencyAccessObject
(){
@Override
@Override
public
void
run
()
{
protected
void
enter
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
)
{
context
.
set
(
"secondEntrance"
,
true
);
}
@Override
protected
void
exit
()
{
context
.
set
(
"lastEntrance"
,
true
);
context
.
set
(
"lastEntrance"
,
true
);
}
}
});
};
first
.
whenEnter
(
context
,
invokeContext
);
second
.
whenEnter
(
context
,
invokeContext
);
first
.
whenExist
(
context
);
second
.
whenExist
(
context
);
Assert
.
assertTrue
(!
context
.
isContain
(
"secondEntrance"
));
Assert
.
assertTrue
(!
context
.
isContain
(
"secondEntrance"
));
Assert
.
assertTrue
(!
context
.
isContain
(
"firstExit"
));
Assert
.
assertTrue
(!
context
.
isContain
(
"firstExit"
));
...
...
skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java
浏览文件 @
30b79503
...
@@ -44,28 +44,7 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
...
@@ -44,28 +44,7 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
@Override
@Override
public
void
beforeMethod
(
final
EnhancedClassInstanceContext
context
,
public
void
beforeMethod
(
final
EnhancedClassInstanceContext
context
,
final
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
final
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
this
.
whenEnter
(
context
,
new
Runnable
()
{
this
.
whenEnter
(
context
,
interceptorContext
);
@Override
public
void
run
()
{
Span
span
=
ContextManager
.
createSpan
(
"Jedis/"
+
interceptorContext
.
methodName
());
Tags
.
COMPONENT
.
set
(
span
,
REDIS_COMPONENT
);
Tags
.
DB_TYPE
.
set
(
span
,
REDIS_COMPONENT
);
Tags
.
SPAN_KIND
.
set
(
span
,
Tags
.
SPAN_KIND_CLIENT
);
tagPeer
(
span
,
context
);
Tags
.
SPAN_LAYER
.
asDB
(
span
);
if
(
StringUtil
.
isEmpty
(
context
.
get
(
KEY_OF_REDIS_HOST
,
String
.
class
)))
{
Tags
.
PEERS
.
set
(
span
,
String
.
valueOf
(
context
.
get
(
KEY_OF_REDIS_HOSTS
)));
}
else
{
Tags
.
PEER_HOST
.
set
(
span
,
context
.
get
(
KEY_OF_REDIS_HOST
,
String
.
class
));
Tags
.
PEER_PORT
.
set
(
span
,
(
Integer
)
context
.
get
(
KEY_OF_REDIS_PORT
));
}
if
(
interceptorContext
.
allArguments
().
length
>
0
&&
interceptorContext
.
allArguments
()[
0
]
instanceof
String
)
{
Tags
.
DB_STATEMENT
.
set
(
span
,
interceptorContext
.
methodName
()
+
" "
+
interceptorContext
.
allArguments
()[
0
]);
}
}
});
}
}
/**
/**
...
@@ -84,12 +63,7 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
...
@@ -84,12 +63,7 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
@Override
@Override
public
Object
afterMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
public
Object
afterMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
Object
ret
)
{
Object
ret
)
{
this
.
whenExist
(
context
,
new
Runnable
()
{
this
.
whenExist
(
context
);
@Override
public
void
run
()
{
ContextManager
.
stopSpan
();
}
});
return
ret
;
return
ret
;
}
}
...
@@ -98,4 +72,30 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
...
@@ -98,4 +72,30 @@ public class JedisMethodInterceptor extends NoConcurrencyAccessObject implements
InstanceMethodInvokeContext
interceptorContext
)
{
InstanceMethodInvokeContext
interceptorContext
)
{
ContextManager
.
activeSpan
().
log
(
t
);
ContextManager
.
activeSpan
().
log
(
t
);
}
}
@Override
protected
void
enter
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
)
{
Span
span
=
ContextManager
.
createSpan
(
"Jedis/"
+
interceptorContext
.
methodName
());
Tags
.
COMPONENT
.
set
(
span
,
REDIS_COMPONENT
);
Tags
.
DB_TYPE
.
set
(
span
,
REDIS_COMPONENT
);
Tags
.
SPAN_KIND
.
set
(
span
,
Tags
.
SPAN_KIND_CLIENT
);
tagPeer
(
span
,
context
);
Tags
.
SPAN_LAYER
.
asDB
(
span
);
if
(
StringUtil
.
isEmpty
(
context
.
get
(
KEY_OF_REDIS_HOST
,
String
.
class
)))
{
Tags
.
PEERS
.
set
(
span
,
String
.
valueOf
(
context
.
get
(
KEY_OF_REDIS_HOSTS
)));
}
else
{
Tags
.
PEER_HOST
.
set
(
span
,
context
.
get
(
KEY_OF_REDIS_HOST
,
String
.
class
));
Tags
.
PEER_PORT
.
set
(
span
,
(
Integer
)
context
.
get
(
KEY_OF_REDIS_PORT
));
}
if
(
interceptorContext
.
allArguments
().
length
>
0
&&
interceptorContext
.
allArguments
()[
0
]
instanceof
String
)
{
Tags
.
DB_STATEMENT
.
set
(
span
,
interceptorContext
.
methodName
()
+
" "
+
interceptorContext
.
allArguments
()[
0
]);
}
}
@Override
protected
void
exit
()
{
ContextManager
.
stopSpan
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录