Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
润土的好友猹
SkyWalking
提交
44556ae0
S
SkyWalking
项目概览
润土的好友猹
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
9
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,发现更多精彩内容 >>
提交
44556ae0
编写于
9月 05, 2019
作者:
于
于玉桔
提交者:
wu-sheng
9月 05, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gateway & webflux compatible with these scene (#3419)
上级
d6a84619
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
115 addition
and
73 deletion
+115
-73
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/AbstractServerResponseMethodInterceptor.java
...g/webflux/v5/AbstractServerResponseMethodInterceptor.java
+17
-15
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerHandleMethodInterceptor.java
.../webflux/v5/DispatcherHandlerHandleMethodInterceptor.java
+32
-15
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerHandleResultMethodInterceptor.java
...ux/v5/DispatcherHandlerHandleResultMethodInterceptor.java
+7
-5
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerInvokeHandlerMethodInterceptor.java
...x/v5/DispatcherHandlerInvokeHandlerMethodInterceptor.java
+20
-18
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/ServerWebExchangeConstructorInterceptor.java
...g/webflux/v5/ServerWebExchangeConstructorInterceptor.java
+1
-1
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/AbstractServerResponseInstrumentation.java
...flux/v5/define/AbstractServerResponseInstrumentation.java
+4
-3
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/ServerWebExchangeInstrumentation.java
...g/webflux/v5/define/ServerWebExchangeInstrumentation.java
+4
-4
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/resources/skywalking-plugin.def
...bflux-5.x-plugin/src/main/resources/skywalking-plugin.def
+2
-2
apm-sniffer/optional-plugins/optional-spring-plugins/optional-spring-cloud/gateway-2.1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/gateway/v21x/NettyRoutingFilterInterceptor.java
...ing/cloud/gateway/v21x/NettyRoutingFilterInterceptor.java
+28
-10
未找到文件。
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/
BodyInsert
erResponseMethodInterceptor.java
→
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/
AbstractServ
erResponseMethodInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -33,7 +33,7 @@ import org.springframework.web.server.ServerWebExchange;
import
java.lang.reflect.Method
;
public
class
BodyInsert
erResponseMethodInterceptor
implements
InstanceMethodsAroundInterceptor
{
public
class
AbstractServ
erResponseMethodInterceptor
implements
InstanceMethodsAroundInterceptor
{
/**
* The error reason
...
...
@@ -43,22 +43,24 @@ public class BodyInserterResponseMethodInterceptor implements InstanceMethodsAro
@Override
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
EnhancedInstance
instance
=
(
EnhancedInstance
)
allArguments
[
0
];
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
==
null
)
{
return
;
}
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
HttpStatus
status
=
exchange
.
getResponse
().
getStatusCode
();
if
(
status
!=
null
&&
status
.
value
()
>=
400
)
{
span
.
errorOccurred
();
if
(
exchange
.
getAttribute
(
ERROR_ATTRIBUTE
)
!=
null
)
{
span
.
log
((
Throwable
)
exchange
.
getAttribute
(
ERROR_ATTRIBUTE
));
EnhancedInstance
instance
=
DispatcherHandlerHandleMethodInterceptor
.
getInstance
(
allArguments
[
0
]);
if
(
instance
!=
null
)
{
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
==
null
)
{
return
;
}
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
HttpStatus
status
=
exchange
.
getResponse
().
getStatusCode
();
if
(
status
!=
null
&&
status
.
value
()
>=
400
)
{
span
.
errorOccurred
();
if
(
exchange
.
getAttribute
(
ERROR_ATTRIBUTE
)
!=
null
)
{
span
.
log
((
Throwable
)
exchange
.
getAttribute
(
ERROR_ATTRIBUTE
));
}
Tags
.
STATUS_CODE
.
set
(
span
,
Integer
.
toString
(
status
.
value
()));
}
Tags
.
STATUS_CODE
.
set
(
span
,
Integer
.
toString
(
status
.
value
()));
ContextManager
.
stopSpan
(
span
);
((
EnhancedInstance
)
allArguments
[
0
]).
setSkyWalkingDynamicField
(
null
);
}
ContextManager
.
stopSpan
(
span
);
((
EnhancedInstance
)
allArguments
[
0
]).
setSkyWalkingDynamicField
(
null
);
}
@Override
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerHandleMethodInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -34,6 +34,8 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInt
import
org.apache.skywalking.apm.network.trace.component.ComponentsDefine
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.web.server.ServerWebExchange
;
import
org.springframework.web.server.ServerWebExchangeDecorator
;
import
org.springframework.web.server.adapter.DefaultServerWebExchange
;
import
java.lang.reflect.Method
;
import
java.util.List
;
...
...
@@ -45,23 +47,25 @@ public class DispatcherHandlerHandleMethodInterceptor implements InstanceMethods
@Override
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
ContextCarrier
contextCarrier
=
new
ContextCarrier
();
CarrierItem
next
=
contextCarrier
.
items
();
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
EnhancedInstance
instance
=
(
EnhancedInstance
)
allArguments
[
0
];
HttpHeaders
headers
=
exchange
.
getRequest
().
getHeaders
();
while
(
next
.
hasNext
())
{
next
=
next
.
next
();
List
<
String
>
header
=
headers
.
get
(
next
.
getHeadKey
());
if
(
header
!=
null
&&
header
.
size
()
>
0
)
{
next
.
setHeadValue
(
header
.
get
(
0
));
EnhancedInstance
instance
=
DispatcherHandlerHandleMethodInterceptor
.
getInstance
(
allArguments
[
0
]);
if
(
instance
!=
null
)
{
ContextCarrier
contextCarrier
=
new
ContextCarrier
();
CarrierItem
next
=
contextCarrier
.
items
();
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
HttpHeaders
headers
=
exchange
.
getRequest
().
getHeaders
();
while
(
next
.
hasNext
())
{
next
=
next
.
next
();
List
<
String
>
header
=
headers
.
get
(
next
.
getHeadKey
());
if
(
header
!=
null
&&
header
.
size
()
>
0
)
{
next
.
setHeadValue
(
header
.
get
(
0
));
}
}
AbstractSpan
span
=
ContextManager
.
createEntrySpan
(
WIP_OPERATION_NAME
,
contextCarrier
);
span
.
setComponent
(
ComponentsDefine
.
SPRING_WEBFLUX
);
SpanLayer
.
asHttp
(
span
);
Tags
.
URL
.
set
(
span
,
exchange
.
getRequest
().
getURI
().
toString
());
instance
.
setSkyWalkingDynamicField
(
span
);
}
AbstractSpan
span
=
ContextManager
.
createEntrySpan
(
WIP_OPERATION_NAME
,
contextCarrier
);
span
.
setComponent
(
ComponentsDefine
.
SPRING_WEBFLUX
);
SpanLayer
.
asHttp
(
span
);
Tags
.
URL
.
set
(
span
,
exchange
.
getRequest
().
getURI
().
toString
());
instance
.
setSkyWalkingDynamicField
(
span
);
}
@Override
...
...
@@ -74,4 +78,17 @@ public class DispatcherHandlerHandleMethodInterceptor implements InstanceMethods
public
void
handleMethodException
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Throwable
t
)
{
}
public
static
EnhancedInstance
getInstance
(
Object
o
)
{
EnhancedInstance
instance
=
null
;
if
(
o
instanceof
ServerWebExchangeDecorator
)
{
ServerWebExchange
delegate
=
((
ServerWebExchangeDecorator
)
o
).
getDelegate
();
if
(
delegate
instanceof
DefaultServerWebExchange
)
{
instance
=
(
EnhancedInstance
)
delegate
;
}
}
else
if
(
o
instanceof
DefaultServerWebExchange
)
{
instance
=
(
EnhancedInstance
)
o
;
}
return
instance
;
}
}
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerHandleResultMethodInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -40,11 +40,13 @@ public class DispatcherHandlerHandleResultMethodInterceptor implements InstanceM
@Override
public
Object
afterMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Object
ret
)
throws
Throwable
{
EnhancedInstance
instance
=
(
EnhancedInstance
)
allArguments
[
0
];
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
!=
null
)
{
ContextManager
.
stopSpan
(
span
);
instance
.
setSkyWalkingDynamicField
(
null
);
EnhancedInstance
instance
=
DispatcherHandlerHandleMethodInterceptor
.
getInstance
(
allArguments
[
0
]);
if
(
instance
!=
null
)
{
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
!=
null
)
{
ContextManager
.
stopSpan
(
span
);
instance
.
setSkyWalkingDynamicField
(
null
);
}
}
return
ret
;
}
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/DispatcherHandlerInvokeHandlerMethodInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -41,25 +41,27 @@ public class DispatcherHandlerInvokeHandlerMethodInterceptor implements Instance
@Override
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
EnhancedInstance
instance
=
(
EnhancedInstance
)
allArguments
[
0
];
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
==
null
)
{
return
;
}
String
handleClassName
=
allArguments
[
1
].
getClass
().
getSimpleName
();
int
index
=
handleClassName
.
indexOf
(
ROUTER_SEARCH
);
if
(
index
!=
-
1
)
{
String
operationName
=
handleClassName
.
substring
(
0
,
index
);
try
{
Field
field
=
allArguments
[
1
].
getClass
().
getDeclaredField
(
ROUTER_FIELD
);
field
.
setAccessible
(
true
);
operationName
=
operationName
+
DOT
+
field
.
get
(
allArguments
[
1
]).
getClass
().
getName
();
}
catch
(
NoSuchFieldException
ignore
)
{
EnhancedInstance
instance
=
DispatcherHandlerHandleMethodInterceptor
.
getInstance
(
allArguments
[
0
]);
if
(
instance
!=
null
)
{
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
if
(
span
==
null
)
{
return
;
}
String
handleClassName
=
allArguments
[
1
].
getClass
().
getSimpleName
();
int
index
=
handleClassName
.
indexOf
(
ROUTER_SEARCH
);
if
(
index
!=
-
1
)
{
String
operationName
=
handleClassName
.
substring
(
0
,
index
);
try
{
Field
field
=
allArguments
[
1
].
getClass
().
getDeclaredField
(
ROUTER_FIELD
);
field
.
setAccessible
(
true
);
operationName
=
operationName
+
DOT
+
field
.
get
(
allArguments
[
1
]).
getClass
().
getName
();
}
catch
(
NoSuchFieldException
ignore
)
{
}
span
.
setOperationName
(
operationName
);
}
else
if
(
allArguments
[
1
]
instanceof
HandlerMethod
)
{
HandlerMethod
handler
=
(
HandlerMethod
)
allArguments
[
1
];
span
.
setOperationName
(
getHandlerMethodOperationName
(
handler
));
}
span
.
setOperationName
(
operationName
);
}
else
if
(
allArguments
[
1
]
instanceof
HandlerMethod
)
{
HandlerMethod
handler
=
(
HandlerMethod
)
allArguments
[
1
];
span
.
setOperationName
(
getHandlerMethodOperationName
(
handler
));
}
}
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/
Default
ServerWebExchangeConstructorInterceptor.java
→
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/ServerWebExchangeConstructorInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -25,7 +25,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceC
*
* @author zhaoyuguang
*/
public
class
Default
ServerWebExchangeConstructorInterceptor
implements
InstanceConstructorInterceptor
{
public
class
ServerWebExchangeConstructorInterceptor
implements
InstanceConstructorInterceptor
{
@Override
public
void
onConstruct
(
EnhancedInstance
objInst
,
Object
[]
allArguments
)
{
}
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/
BodyInsert
erResponseInstrumentation.java
→
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/
AbstractServ
erResponseInstrumentation.java
浏览文件 @
44556ae0
...
...
@@ -32,12 +32,13 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMa
* @author zhaoyuguang
*/
public
class
BodyInsert
erResponseInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
public
class
AbstractServ
erResponseInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
@Override
protected
ClassMatch
enhanceClass
()
{
return
byMultiClassMatch
(
"org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$BodyInserterResponse"
,
"org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$BodyInserterServerResponse"
);
"org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$BodyInserterServerResponse"
,
"org.springframework.web.reactive.function.server.DefaultEntityResponseBuilder$DefaultEntityResponse"
);
}
@Override
...
...
@@ -54,7 +55,7 @@ public class BodyInserterResponseInstrumentation extends ClassInstanceMethodsEnh
}
@Override
public
String
getMethodsInterceptor
()
{
return
"org.apache.skywalking.apm.plugin.spring.webflux.v5.
BodyInsert
erResponseMethodInterceptor"
;
return
"org.apache.skywalking.apm.plugin.spring.webflux.v5.
AbstractServ
erResponseMethodInterceptor"
;
}
@Override
public
boolean
isOverrideArgs
()
{
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/
Default
ServerWebExchangeInstrumentation.java
→
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/webflux/v5/define/ServerWebExchangeInstrumentation.java
浏览文件 @
44556ae0
...
...
@@ -26,13 +26,13 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInst
import
org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
any
;
import
static
org
.
apache
.
skywalking
.
apm
.
agent
.
core
.
plugin
.
match
.
MultiClassNameMatch
.
byMultiClassMatch
;
import
static
org
.
apache
.
skywalking
.
apm
.
agent
.
core
.
plugin
.
match
.
NameMatch
.
byName
;
/**
* @author zhaoyuguang
*/
public
class
Default
ServerWebExchangeInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
public
class
ServerWebExchangeInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
@Override
public
ConstructorInterceptPoint
[]
getConstructorsInterceptPoints
()
{
return
new
ConstructorInterceptPoint
[]{
...
...
@@ -44,7 +44,7 @@ public class DefaultServerWebExchangeInstrumentation extends ClassInstanceMethod
@Override
public
String
getConstructorInterceptor
()
{
return
"org.apache.skywalking.apm.plugin.spring.webflux.v5.
Default
ServerWebExchangeConstructorInterceptor"
;
return
"org.apache.skywalking.apm.plugin.spring.webflux.v5.ServerWebExchangeConstructorInterceptor"
;
}
}
};
...
...
@@ -57,6 +57,6 @@ public class DefaultServerWebExchangeInstrumentation extends ClassInstanceMethod
@Override
protected
ClassMatch
enhanceClass
()
{
return
by
MultiClassMatch
(
"org.springframework.web.server.adapter.DefaultServerWebExchange"
,
"org.springframework.web.server.ServerWebExchangeDecorator
"
);
return
by
Name
(
"org.springframework.web.server.adapter.DefaultServerWebExchange
"
);
}
}
apm-sniffer/apm-sdk-plugin/spring-plugins/webflux-5.x-plugin/src/main/resources/skywalking-plugin.def
浏览文件 @
44556ae0
...
...
@@ -15,5 +15,5 @@
# limitations under the License.
spring-webflux-5.x=org.apache.skywalking.apm.plugin.spring.webflux.v5.define.DispatcherHandlerInstrumentation
spring-webflux-5.x=org.apache.skywalking.apm.plugin.spring.webflux.v5.define.DefaultServerWebExchangeInstrumentation
spring-webflux-5.x=org.apache.skywalking.apm.plugin.spring.webflux.v5.define.BodyInserterResponseInstrumentation
\ No newline at end of file
spring-webflux-5.x=org.apache.skywalking.apm.plugin.spring.webflux.v5.define.ServerWebExchangeInstrumentation
spring-webflux-5.x=org.apache.skywalking.apm.plugin.spring.webflux.v5.define.AbstractServerResponseInstrumentation
\ No newline at end of file
apm-sniffer/optional-plugins/optional-spring-plugins/optional-spring-cloud/gateway-2.1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/gateway/v21x/NettyRoutingFilterInterceptor.java
浏览文件 @
44556ae0
...
...
@@ -27,6 +27,8 @@ import org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.context.Consta
import
org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.context.SWTransmitter
;
import
org.springframework.cloud.gateway.route.Route
;
import
org.springframework.web.server.ServerWebExchange
;
import
org.springframework.web.server.ServerWebExchangeDecorator
;
import
org.springframework.web.server.adapter.DefaultServerWebExchange
;
import
java.lang.reflect.Method
;
...
...
@@ -43,16 +45,19 @@ public class NettyRoutingFilterInterceptor implements InstanceMethodsAroundInter
@Override
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
AbstractSpan
span
=
(
AbstractSpan
)
((
EnhancedInstance
)
allArguments
[
0
]).
getSkyWalkingDynamicField
();
String
operationName
=
SPRING_CLOUD_GATEWAY_ROUTE_PREFIX
;
if
(
span
!=
null
)
{
Route
route
=
exchange
.
getRequiredAttribute
(
GATEWAY_ROUTE_ATTR
);
operationName
=
operationName
+
route
.
getId
();
span
.
setOperationName
(
operationName
);
SWTransmitter
transmitter
=
new
SWTransmitter
(
span
.
prepareForAsync
(),
ContextManager
.
capture
(),
operationName
);
ContextManager
.
stopSpan
(
span
);
ContextManager
.
getRuntimeContext
().
put
(
Constants
.
SPRING_CLOUD_GATEWAY_TRANSMITTER
,
transmitter
);
EnhancedInstance
instance
=
NettyRoutingFilterInterceptor
.
getInstance
(
allArguments
[
0
]);
if
(
instance
!=
null
)
{
ServerWebExchange
exchange
=
(
ServerWebExchange
)
allArguments
[
0
];
AbstractSpan
span
=
(
AbstractSpan
)
instance
.
getSkyWalkingDynamicField
();
String
operationName
=
SPRING_CLOUD_GATEWAY_ROUTE_PREFIX
;
if
(
span
!=
null
)
{
Route
route
=
exchange
.
getRequiredAttribute
(
GATEWAY_ROUTE_ATTR
);
operationName
=
operationName
+
route
.
getId
();
span
.
setOperationName
(
operationName
);
SWTransmitter
transmitter
=
new
SWTransmitter
(
span
.
prepareForAsync
(),
ContextManager
.
capture
(),
operationName
);
ContextManager
.
stopSpan
(
span
);
ContextManager
.
getRuntimeContext
().
put
(
Constants
.
SPRING_CLOUD_GATEWAY_TRANSMITTER
,
transmitter
);
}
}
}
...
...
@@ -70,4 +75,17 @@ public class NettyRoutingFilterInterceptor implements InstanceMethodsAroundInter
public
void
handleMethodException
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Throwable
t
)
{
}
public
static
EnhancedInstance
getInstance
(
Object
o
)
{
EnhancedInstance
instance
=
null
;
if
(
o
instanceof
ServerWebExchangeDecorator
)
{
ServerWebExchange
delegate
=
((
ServerWebExchangeDecorator
)
o
).
getDelegate
();
if
(
delegate
instanceof
DefaultServerWebExchange
)
{
instance
=
(
EnhancedInstance
)
delegate
;
}
}
else
if
(
o
instanceof
DefaultServerWebExchange
)
{
instance
=
(
EnhancedInstance
)
o
;
}
return
instance
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录