Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
0544edab
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
0544edab
编写于
4月 26, 2017
作者:
Z
zhangxin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix issue that skywalking extract binary data failed and refectory code
上级
fd02bbe7
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
87 addition
and
106 deletion
+87
-106
skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java
.../eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java
+42
-25
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/SkyWalkingSpanActivation.java
...activation/opentracing/span/SkyWalkingSpanActivation.java
+1
-2
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetTagInterceptor.java
...n/opentracing/span/interceptor/SpanSetTagInterceptor.java
+35
-1
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/SkyWalkingTracerActivation.java
...vation/opentracing/tracer/SkyWalkingTracerActivation.java
+4
-19
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessContextInterceptor.java
...erceptor/TracerExtractCrossProcessContextInterceptor.java
+3
-8
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessTextMapContextInterceptor.java
...r/TracerExtractCrossProcessTextMapContextInterceptor.java
+0
-49
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerInjectFormatCrossProcessContextInterceptor.java
...tor/TracerInjectFormatCrossProcessContextInterceptor.java
+2
-2
未找到文件。
skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java
浏览文件 @
0544edab
...
...
@@ -6,6 +6,9 @@ import io.opentracing.propagation.Format;
import
io.opentracing.propagation.TextMap
;
import
java.nio.ByteBuffer
;
import
java.nio.charset.Charset
;
import
java.util.Iterator
;
import
java.util.Map
;
/**
* All source code in SkyWalkingTracer acts like an NoopTracer.
...
...
@@ -15,10 +18,11 @@ import java.nio.ByteBuffer;
* Created by wusheng on 2016/12/20.
*/
public
class
SkyWalkingTracer
implements
Tracer
{
private
static
String
TRACE_HEAD_NAME
=
"
SW-TRACING-NAME
"
;
private
static
String
TRACE_HEAD_NAME
=
"
sw3
"
;
public
static
Tracer
INSTANCE
=
new
SkyWalkingTracer
();
@Override
public
SpanBuilder
buildSpan
(
String
operationName
)
{
return
new
SkyWalkingSpanBuilder
(
operationName
);
...
...
@@ -27,15 +31,13 @@ public class SkyWalkingTracer implements Tracer {
@Override
public
<
C
>
void
inject
(
SpanContext
spanContext
,
Format
<
C
>
format
,
C
carrier
)
{
if
(
Format
.
Builtin
.
TEXT_MAP
.
equals
(
format
)
||
Format
.
Builtin
.
HTTP_HEADERS
.
equals
(
format
))
{
((
TextMap
)
carrier
).
put
(
TRACE_HEAD_NAME
,
forma
tCrossProcessPropagationContextData
());
((
TextMap
)
carrier
).
put
(
TRACE_HEAD_NAME
,
formatInjec
tCrossProcessPropagationContextData
());
}
else
if
(
Format
.
Builtin
.
BINARY
.
equals
(
format
))
{
byte
[]
key
=
TRACE_HEAD_NAME
.
getBytes
(
ByteBufferContext
.
CHARSET
);
byte
[]
value
=
formatCrossProcessPropagationContextData
().
getBytes
(
ByteBufferContext
.
CHARSET
);
((
ByteBuffer
)
carrier
).
put
(
ByteBufferContext
.
ENTRY
);
((
ByteBuffer
)
carrier
).
putInt
(
key
.
length
);
((
ByteBuffer
)
carrier
).
putInt
(
value
.
length
);
((
ByteBuffer
)
carrier
).
put
(
key
);
((
ByteBuffer
)
carrier
).
put
(
value
);
byte
[]
value
=
formatInjectCrossProcessPropagationContextData
().
getBytes
(
ByteBufferContext
.
CHARSET
);
((
ByteBuffer
)
carrier
).
put
(
key
);
((
ByteBuffer
)
carrier
).
putInt
(
value
.
length
);
((
ByteBuffer
)
carrier
).
put
(
value
);
}
else
{
throw
new
IllegalArgumentException
(
"Unsupported format: "
+
format
);
}
...
...
@@ -44,13 +46,13 @@ public class SkyWalkingTracer implements Tracer {
@Override
public
<
C
>
SpanContext
extract
(
Format
<
C
>
format
,
C
carrier
)
{
if
(
Format
.
Builtin
.
TEXT_MAP
.
equals
(
format
)
||
Format
.
Builtin
.
HTTP_HEADERS
.
equals
(
format
))
{
TextMap
textMapCarrier
=
(
TextMap
)
carrier
;
extractCrossProcessPropagationContextData
(
textMapCarrier
);
TextMap
textMapCarrier
=
(
TextMap
)
carrier
;
formatExtractCrossProcessPropagationContextData
(
fetchContextData
(
textMapCarrier
)
);
return
new
TextMapContext
(
textMapCarrier
);
}
else
if
(
Format
.
Builtin
.
BINARY
.
equals
(
format
))
{
ByteBuffer
byteBufferCarrier
=
(
ByteBuffer
)
carrier
;
extractCrossProcessPropagationContextData
(
byteBufferCarrier
);
return
new
ByteBufferContext
((
ByteBuffer
)
carrier
);
ByteBuffer
byteBufferCarrier
=
(
ByteBuffer
)
carrier
;
formatExtractCrossProcessPropagationContextData
(
fetchContextData
(
byteBufferCarrier
)
);
return
new
ByteBufferContext
((
ByteBuffer
)
carrier
);
}
else
{
throw
new
IllegalArgumentException
(
"Unsupported format: "
+
format
);
}
...
...
@@ -58,28 +60,43 @@ public class SkyWalkingTracer implements Tracer {
/**
* set context data in toolkit-opentracing-activation
*
* @return
*/
private
String
formatCrossProcessPropagationContextData
()
{
private
String
format
Inject
CrossProcessPropagationContextData
()
{
return
""
;
}
/**
* read context data in toolkit-opentracing-activation
*
* @param textMapCarrier
*/
private
void
extractCrossProcessPropagationContextData
(
TextMap
textMapCarrier
)
{
private
void
formatExtractCrossProcessPropagationContextData
(
String
contextData
)
{
}
private
String
fetchContextData
(
TextMap
textMap
)
{
Iterator
<
Map
.
Entry
<
String
,
String
>>
iterator
=
textMap
.
iterator
();
while
(
iterator
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
entry
=
iterator
.
next
();
if
(
TRACE_HEAD_NAME
.
equals
(
entry
.
getKey
()))
{
return
entry
.
getValue
();
}
}
return
null
;
}
/**
* read context data in toolkit-opentracing-activation
*
* @param byteBufferCarrier
*/
private
void
extractCrossProcessPropagationContextData
(
ByteBuffer
byteBufferCarrier
)
{
private
String
fetchContextData
(
ByteBuffer
byteBuffer
)
{
String
contextDataStr
=
new
String
(
byteBuffer
.
array
(),
Charset
.
forName
(
"UTF-8"
));
int
index
=
contextDataStr
.
indexOf
(
TRACE_HEAD_NAME
);
if
(
index
==
-
1
)
{
return
null
;
}
try
{
byteBuffer
.
position
(
index
+
TRACE_HEAD_NAME
.
getBytes
().
length
);
byte
[]
contextDataBytes
=
new
byte
[
byteBuffer
.
getInt
()];
byteBuffer
.
get
(
contextDataBytes
);
return
new
String
(
contextDataBytes
,
Charset
.
forName
(
"UTF-8"
));
}
catch
(
Exception
e
)
{
return
null
;
}
}
}
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/SkyWalkingSpanActivation.java
浏览文件 @
0544edab
...
...
@@ -2,11 +2,10 @@ package com.a.eye.skywalking.toolkit.activation.opentracing.span;
import
com.a.eye.skywalking.api.plugin.interceptor.ConstructorInterceptPoint
;
import
com.a.eye.skywalking.api.plugin.interceptor.InstanceMethodsInterceptPoint
;
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine
;
import
java.util.Map
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
java.util.Map
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
named
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
takesArguments
;
...
...
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetTagInterceptor.java
浏览文件 @
0544edab
...
...
@@ -7,6 +7,9 @@ import com.a.eye.skywalking.api.plugin.interceptor.enhance.InstanceMethodsAround
import
com.a.eye.skywalking.api.plugin.interceptor.enhance.MethodInterceptResult
;
import
com.a.eye.skywalking.toolkit.opentracing.SkyWalkingSpan
;
import
io.opentracing.Span
;
import
io.opentracing.tag.Tags
;
/**
* Intercept these following methods:
* {@link SkyWalkingSpan#setTag(String, boolean)}
...
...
@@ -15,10 +18,15 @@ import com.a.eye.skywalking.toolkit.opentracing.SkyWalkingSpan;
*/
public
class
SpanSetTagInterceptor
implements
InstanceMethodsAroundInterceptor
{
/**
* key of {@link com.a.eye.skywalking.trace.tag.Tags#PEER_HOST}
*/
private
static
final
String
KEY_OF_PEER_HOST_TAG
=
"peer.host"
;
@Override
public
void
beforeMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
String
key
=
(
String
)
interceptorContext
.
allArguments
()[
0
]
;
String
key
=
fetchTagKeyFromArguments
(
interceptorContext
.
allArguments
())
;
Object
value
=
interceptorContext
.
allArguments
()[
1
];
if
(
value
instanceof
String
)
ContextManager
.
activeSpan
().
setTag
(
key
,
(
String
)
value
);
...
...
@@ -30,6 +38,32 @@ public class SpanSetTagInterceptor implements InstanceMethodsAroundInterceptor {
ContextManager
.
activeSpan
().
setTag
(
key
,
value
.
toString
());
}
/**
* Fetch tag key of {@link Span#setTag}.
*
* @return tag key
*/
private
String
fetchTagKeyFromArguments
(
Object
[]
arguments
)
{
String
key
=
(
String
)
arguments
[
0
];
if
(
isPeerHostPrefix
(
key
))
{
key
=
KEY_OF_PEER_HOST_TAG
;
}
return
key
;
}
/**
* Skywalking put the tag value of {@link Tags#PEER_HOSTNAME}, {@link Tags#PEER_HOST_IPV4} and
* {@link Tags#PEER_HOST_IPV6} into {@link com.a.eye.skywalking.trace.tag.Tags#PEER_HOST} which
* facilitate analysis.
*
* @param key tag key
*/
private
boolean
isPeerHostPrefix
(
String
key
)
{
return
Tags
.
PEER_HOST_IPV4
.
equals
(
key
)
||
Tags
.
PEER_HOST_IPV6
.
equals
(
key
)
||
Tags
.
PEER_HOSTNAME
.
equals
(
key
);
}
@Override
public
Object
afterMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
Object
ret
)
{
...
...
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/SkyWalkingTracerActivation.java
浏览文件 @
0544edab
...
...
@@ -6,11 +6,7 @@ import com.a.eye.skywalking.api.plugin.interceptor.enhance.ClassInstanceMethodsE
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
java.nio.ByteBuffer
;
import
static
com
.
a
.
eye
.
skywalking
.
api
.
plugin
.
bytebuddy
.
ArgumentTypeNameMatch
.
takesArgumentWithType
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
named
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
takesArgument
;
/**
* @author wusheng
...
...
@@ -32,34 +28,23 @@ public class SkyWalkingTracerActivation extends ClassInstanceMethodsEnhancePlugi
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
"formatCrossProcessPropagationContextData"
);
}
@Override
public
String
getMethodsInterceptor
()
{
return
"com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerFormatCrossProcessContextInterceptor"
;
}
},
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
"extractCrossProcessPropagationContextData"
).
and
(
takesArgumentWithType
(
0
,
"io.opentracing.propagation.TextMap"
));
return
named
(
"formatInjectCrossProcessPropagationContextData"
);
}
@Override
public
String
getMethodsInterceptor
()
{
return
"com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.Tracer
ExtractCrossProcessTextMap
ContextInterceptor"
;
return
"com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.Tracer
InjectFormatCrossProcess
ContextInterceptor"
;
}
},
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
"
extractCrossProcessPropagationContextData"
).
and
(
takesArgument
(
0
,
ByteBuffer
.
class
)
);
return
named
(
"
formatExtractCrossProcessPropagationContextData"
);
}
@Override
public
String
getMethodsInterceptor
()
{
return
"com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerExtractCrossProcess
ByteBuffer
ContextInterceptor"
;
return
"com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerExtractCrossProcessContextInterceptor"
;
}
}
};
...
...
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcess
ByteBuffer
ContextInterceptor.java
→
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessContextInterceptor.java
浏览文件 @
0544edab
...
...
@@ -6,16 +6,12 @@ import com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext;
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.toolkit.opentracing.SkyWalkingTracer
;
import
io.opentracing.propagation.TextMap
;
import
java.nio.ByteBuffer
;
import
java.nio.charset.Charset
;
/**
* Intercept {@link SkyWalkingTracer#
extractCrossProcessPropagationContextData(TextMap
)}
* Intercept {@link SkyWalkingTracer#
formatExtractCrossProcessPropagationContextData(String
)}
*/
public
class
TracerExtractCrossProcess
ByteBuffer
ContextInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
class
TracerExtractCrossProcessContextInterceptor
implements
InstanceMethodsAroundInterceptor
{
@Override
public
void
beforeMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
...
...
@@ -25,8 +21,7 @@ public class TracerExtractCrossProcessByteBufferContextInterceptor implements In
@Override
public
Object
afterMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
Object
ret
)
{
ByteBuffer
byteBuffer
=
(
ByteBuffer
)
interceptorContext
.
allArguments
()[
0
];
String
contextDataStr
=
new
String
(
byteBuffer
.
array
(),
Charset
.
forName
(
"UTF-8"
));
String
contextDataStr
=
(
String
)
interceptorContext
.
allArguments
()[
0
];
ContextCarrier
carrier
=
new
ContextCarrier
();
carrier
.
deserialize
(
contextDataStr
);
...
...
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessTextMapContextInterceptor.java
已删除
100644 → 0
浏览文件 @
fd02bbe7
package
com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor
;
import
com.a.eye.skywalking.api.context.ContextCarrier
;
import
com.a.eye.skywalking.api.context.ContextManager
;
import
com.a.eye.skywalking.api.plugin.interceptor.EnhancedClassInstanceContext
;
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.toolkit.opentracing.SkyWalkingTracer
;
import
io.opentracing.propagation.TextMap
;
import
java.util.Iterator
;
import
java.util.Map
;
/**
* Intercept {@link SkyWalkingTracer#extractCrossProcessPropagationContextData(TextMap)}
*/
public
class
TracerExtractCrossProcessTextMapContextInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
static
final
String
SKY_WALKING_TRACING_NAME
=
"SW-TRACING-NAME"
;
@Override
public
void
beforeMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
// Do nothing
}
@Override
public
Object
afterMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
Object
ret
)
{
TextMap
textMap
=
(
TextMap
)
interceptorContext
.
allArguments
()[
0
];
Iterator
<
Map
.
Entry
<
String
,
String
>>
iterator
=
textMap
.
iterator
();
while
(
iterator
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
entry
=
iterator
.
next
();
if
(
SKY_WALKING_TRACING_NAME
.
equals
(
entry
.
getKey
()))
{
ContextCarrier
carrier
=
new
ContextCarrier
();
carrier
.
deserialize
(
entry
.
getValue
());
ContextManager
.
extract
(
carrier
);
}
}
return
ret
;
}
@Override
public
void
handleMethodException
(
Throwable
t
,
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
)
{
}
}
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerFormatCrossProcessContextInterceptor.java
→
skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/Tracer
Inject
FormatCrossProcessContextInterceptor.java
浏览文件 @
0544edab
...
...
@@ -9,9 +9,9 @@ import com.a.eye.skywalking.api.plugin.interceptor.enhance.MethodInterceptResult
import
com.a.eye.skywalking.toolkit.opentracing.SkyWalkingTracer
;
/**
* Intercept {@link SkyWalkingTracer#formatCrossProcessPropagationContextData()}
* Intercept {@link SkyWalkingTracer#format
Inject
CrossProcessPropagationContextData()}
*/
public
class
TracerFormatCrossProcessContextInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
class
Tracer
Inject
FormatCrossProcessContextInterceptor
implements
InstanceMethodsAroundInterceptor
{
@Override
public
void
beforeMethod
(
EnhancedClassInstanceContext
context
,
InstanceMethodInvokeContext
interceptorContext
,
MethodInterceptResult
result
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录