Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿信在这里
SkyWalking
提交
de32fce1
S
SkyWalking
项目概览
阿信在这里
/
SkyWalking
与 Fork 源项目一致
Fork自
山不在高_有仙则灵 / SkyWalking
通知
1
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,发现更多精彩内容 >>
提交
de32fce1
编写于
11月 26, 2016
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix all compile issues of sniffer on using new network protocol.
上级
c98b41b0
变更
47
隐藏空白更改
内联
并排
Showing
47 changed file
with
560 addition
and
541 deletion
+560
-541
skywalking-network/src/main/proto/Spans.proto
skywalking-network/src/main/proto/Spans.proto
+1
-1
skywalking-sniffer/skywalking-agent/src/main/java/com/a/eye/skywalking/agent/SkyWalkingAgent.java
...main/java/com/a/eye/skywalking/agent/SkyWalkingAgent.java
+32
-41
skywalking-sniffer/skywalking-api/pom.xml
skywalking-sniffer/skywalking-api/pom.xml
+1
-1
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java
...in/java/com/a/eye/skywalking/api/BusinessKeyAppender.java
+0
-3
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java
...g-api/src/main/java/com/a/eye/skywalking/api/Tracing.java
+11
-11
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/AuthDesc.java
...api/src/main/java/com/a/eye/skywalking/conf/AuthDesc.java
+0
-40
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java
...g-api/src/main/java/com/a/eye/skywalking/conf/Config.java
+2
-76
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/ConfigInitializer.java
...ain/java/com/a/eye/skywalking/conf/ConfigInitializer.java
+35
-18
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/ConfigValidator.java
.../main/java/com/a/eye/skywalking/conf/ConfigValidator.java
+0
-26
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/AckSpanDisruptor.java
...java/com/a/eye/skywalking/disruptor/AckSpanDisruptor.java
+53
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/RequestSpanDisruptor.java
.../com/a/eye/skywalking/disruptor/RequestSpanDisruptor.java
+48
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/AckSpanFactory.java
...va/com/a/eye/skywalking/disruptor/ack/AckSpanFactory.java
+13
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/AckSpanHolder.java
...ava/com/a/eye/skywalking/disruptor/ack/AckSpanHolder.java
+18
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/SendAckSpanEventHandler.java
...eye/skywalking/disruptor/ack/SendAckSpanEventHandler.java
+37
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/RequestSpanFactory.java
.../eye/skywalking/disruptor/request/RequestSpanFactory.java
+13
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/RequestSpanHolder.java
...a/eye/skywalking/disruptor/request/RequestSpanHolder.java
+18
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/SendRequestSpanEventHandler.java
...alking/disruptor/request/SendRequestSpanEventHandler.java
+38
-0
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java
...om/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java
+26
-12
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java
...e/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java
+1
-5
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/RPCClientInvokeMonitor.java
...eye/skywalking/invoke/monitor/RPCClientInvokeMonitor.java
+1
-16
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/RPCServerInvokeMonitor.java
...eye/skywalking/invoke/monitor/RPCServerInvokeMonitor.java
+1
-5
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/logging/EasyLogResolver.java
...in/java/com/a/eye/skywalking/logging/EasyLogResolver.java
+1
-2
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/logging/EasyLogger.java
...rc/main/java/com/a/eye/skywalking/logging/EasyLogger.java
+1
-1
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/ContextData.java
...src/main/java/com/a/eye/skywalking/model/ContextData.java
+3
-5
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginBootstrap.java
...ain/java/com/a/eye/skywalking/plugin/PluginBootstrap.java
+7
-7
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginResourcesResolver.java
.../com/a/eye/skywalking/plugin/PluginResourcesResolver.java
+6
-6
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
...in/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
+6
-11
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassConstructorInterceptor.java
...ugin/interceptor/enhance/ClassConstructorInterceptor.java
+4
-4
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
.../plugin/interceptor/enhance/ClassEnhancePluginDefine.java
+139
-161
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassInstanceMethodsInterceptor.java
.../interceptor/enhance/ClassInstanceMethodsInterceptor.java
+6
-6
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassStaticMethodsInterceptor.java
...in/interceptor/enhance/ClassStaticMethodsInterceptor.java
+6
-6
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/MethodInputAndOutParameterInterceptor.java
...ceptor/enhance/MethodInputAndOutParameterInterceptor.java
+0
-1
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java
.../plugin/interceptor/loader/InterceptorInstanceLoader.java
+6
-6
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/protocol/util/ContextGenerator.java
.../com/a/eye/skywalking/protocol/util/ContextGenerator.java
+1
-1
skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/consumerworker/ConsumerWorkerTest.java
...a/test/a/eye/cloud/consumerworker/ConsumerWorkerTest.java
+0
-40
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java
...m/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java
...eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java
+1
-1
skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java
...e/skywalking/plugin/httpClient/v4/WebBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java
...ye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java
.../eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java
...m/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java
...a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java
+0
-1
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/define/TomcatPluginDefine.java
...kywalking/plugin/tomcat78x/define/TomcatPluginDefine.java
+1
-5
skywalking-sniffer/skywalking-test-api/pom.xml
skywalking-sniffer/skywalking-test-api/pom.xml
+1
-1
skywalking-sniffer/skywalking-test-api/src/main/java/com/a/eye/skywalking/testframework/api/ContextPoolOperator.java
...eye/skywalking/testframework/api/ContextPoolOperator.java
+7
-9
skywalking-sniffer/skywalking-test-api/src/main/java/com/a/eye/skywalking/testframework/api/RequestSpanAssert.java
...a/eye/skywalking/testframework/api/RequestSpanAssert.java
+14
-6
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java
...eye/skywalking/storage/data/spandata/RequestSpanData.java
+1
-1
未找到文件。
skywalking-network/src/main/proto/Spans.proto
浏览文件 @
de32fce1
...
...
@@ -26,7 +26,7 @@ message RequestSpan {
uint32
spanType
=
8
;
string
applicationId
=
9
;
string
userId
=
10
;
string
bus
s
inessKey
=
11
;
string
businessKey
=
11
;
int32
processNo
=
13
;
string
address
=
14
;
}
...
...
skywalking-sniffer/skywalking-agent/src/main/java/com/a/eye/skywalking/agent/SkyWalkingAgent.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.agent
;
import
com.a.eye.skywalking.agent.junction.SkyWalkingEnhanceMatcher
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.conf.ConfigInitializer
;
import
com.a.eye.skywalking.logging.EasyLogResolver
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
...
...
@@ -25,7 +25,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
not
;
public
class
SkyWalkingAgent
{
static
{
static
{
LogManager
.
setLogResolver
(
new
EasyLogResolver
());
}
...
...
@@ -35,45 +35,36 @@ public class SkyWalkingAgent {
easyLogger
=
LogManager
.
getLogger
(
SkyWalkingAgent
.
class
);
initConfig
();
if
(
AuthDesc
.
isAuth
())
{
final
PluginDefineCategory
pluginDefineCategory
=
PluginDefineCategory
.
category
(
new
PluginBootstrap
().
loadPlugins
());
new
AgentBuilder
.
Default
().
type
(
enhanceClassMatcher
(
pluginDefineCategory
).
and
(
not
(
isInterface
())))
.
transform
(
new
AgentBuilder
.
Transformer
()
{
public
DynamicType
.
Builder
<?>
transform
(
DynamicType
.
Builder
<?>
builder
,
TypeDescription
typeDescription
,
ClassLoader
classLoader
)
{
AbstractClassEnhancePluginDefine
pluginDefine
=
pluginDefineCategory
.
findPluginDefine
(
typeDescription
.
getTypeName
());
return
pluginDefine
.
define
(
typeDescription
.
getTypeName
(),
builder
);
}
}).
with
(
new
AgentBuilder
.
Listener
()
{
@Override
public
void
onTransformation
(
TypeDescription
typeDescription
,
ClassLoader
classLoader
,
JavaModule
module
,
DynamicType
dynamicType
)
{
}
@Override
public
void
onIgnored
(
TypeDescription
typeDescription
,
ClassLoader
classLoader
,
JavaModule
module
)
{
}
@Override
public
void
onError
(
String
typeName
,
ClassLoader
classLoader
,
JavaModule
module
,
Throwable
throwable
)
{
easyLogger
.
error
(
"Failed to enhance class "
+
typeName
,
throwable
);
}
@Override
public
void
onComplete
(
String
typeName
,
ClassLoader
classLoader
,
JavaModule
module
)
{
}
}).
installOn
(
instrumentation
);
}
final
PluginDefineCategory
pluginDefineCategory
=
PluginDefineCategory
.
category
(
new
PluginBootstrap
().
loadPlugins
());
new
AgentBuilder
.
Default
().
type
(
enhanceClassMatcher
(
pluginDefineCategory
).
and
(
not
(
isInterface
()))).
transform
(
new
AgentBuilder
.
Transformer
()
{
public
DynamicType
.
Builder
<?>
transform
(
DynamicType
.
Builder
<?>
builder
,
TypeDescription
typeDescription
,
ClassLoader
classLoader
)
{
AbstractClassEnhancePluginDefine
pluginDefine
=
pluginDefineCategory
.
findPluginDefine
(
typeDescription
.
getTypeName
());
return
pluginDefine
.
define
(
typeDescription
.
getTypeName
(),
builder
);
}
}).
with
(
new
AgentBuilder
.
Listener
()
{
@Override
public
void
onTransformation
(
TypeDescription
typeDescription
,
ClassLoader
classLoader
,
JavaModule
module
,
DynamicType
dynamicType
)
{
}
@Override
public
void
onIgnored
(
TypeDescription
typeDescription
,
ClassLoader
classLoader
,
JavaModule
module
)
{
}
@Override
public
void
onError
(
String
typeName
,
ClassLoader
classLoader
,
JavaModule
module
,
Throwable
throwable
)
{
easyLogger
.
error
(
"Failed to enhance class "
+
typeName
,
throwable
);
}
@Override
public
void
onComplete
(
String
typeName
,
ClassLoader
classLoader
,
JavaModule
module
)
{
}
}).
installOn
(
instrumentation
);
}
private
static
<
T
extends
NamedElement
>
ElementMatcher
.
Junction
<
T
>
enhanceClassMatcher
(
PluginDefineCategory
pluginDefineCategory
)
{
private
static
<
T
extends
NamedElement
>
ElementMatcher
.
Junction
<
T
>
enhanceClassMatcher
(
PluginDefineCategory
pluginDefineCategory
)
{
return
new
SkyWalkingEnhanceMatcher
<
T
>(
pluginDefineCategory
);
}
...
...
@@ -85,13 +76,13 @@ public class SkyWalkingAgent {
private
static
void
initConfig
()
{
Config
.
SkyWalking
.
IS_PREMAIN_MODE
=
true
;
Config
.
SkyWalking
.
AGENT_BASE_PATH
=
initAgentBasePath
();
ConfigInitializer
.
initialize
();
}
private
static
String
initAgentBasePath
()
{
try
{
String
urlString
=
SkyWalkingAgent
.
class
.
getClassLoader
().
getSystemClassLoader
().
getResource
(
generateLocationPath
())
.
toString
();
String
urlString
=
SkyWalkingAgent
.
class
.
getClassLoader
().
getSystemClassLoader
().
getResource
(
generateLocationPath
()).
toString
();
urlString
=
urlString
.
substring
(
urlString
.
indexOf
(
"file:"
),
urlString
.
indexOf
(
'!'
));
return
new
File
(
new
URL
(
urlString
).
getFile
()).
getParentFile
().
getAbsolutePath
();
}
catch
(
Exception
e
)
{
...
...
skywalking-sniffer/skywalking-api/pom.xml
浏览文件 @
de32fce1
...
...
@@ -49,7 +49,7 @@
</dependency>
<dependency>
<groupId>
com.a.eye
</groupId>
<artifactId>
skywalking-logging
</artifactId>
<artifactId>
skywalking-logging
-api
</artifactId>
<version>
${project.parent.version}
</version>
</dependency>
<dependency>
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.api
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.context.CurrentThreadSpanStack
;
import
com.a.eye.skywalking.model.Span
;
...
...
@@ -17,8 +16,6 @@ public final class BusinessKeyAppender {
* @param businessKey
*/
public
static
void
setBusinessKey2Trace
(
String
businessKey
)
{
if
(!
AuthDesc
.
isAuth
())
return
;
Span
spanData
=
CurrentThreadSpanStack
.
peek
();
if
(
spanData
==
null
)
{
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.api
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.context.CurrentThreadSpanStack
;
import
com.a.eye.skywalking.model.ContextData
;
import
com.a.eye.skywalking.model.Span
;
import
com.a.eye.skywalking.network.grpc.TraceId
;
public
class
Tracing
{
/**
...
...
@@ -12,21 +12,24 @@ public class Tracing {
* @return
*/
public
static
String
getTraceId
()
{
if
(!
AuthDesc
.
isAuth
())
return
""
;
Span
spanData
=
CurrentThreadSpanStack
.
peek
();
if
(
spanData
==
null
)
{
return
""
;
}
return
spanData
.
getTraceId
(
);
return
formatTraceId
(
spanData
.
getTraceId
()
);
}
public
static
String
getTracelevelId
()
{
if
(!
AuthDesc
.
isAuth
())
return
""
;
public
static
String
formatTraceId
(
TraceId
traceId
){
StringBuilder
traceIdBuilder
=
new
StringBuilder
();
for
(
Long
segment
:
traceId
.
getSegmentsList
())
{
traceIdBuilder
.
append
(
segment
).
append
(
"."
);
}
return
traceIdBuilder
.
substring
(
0
,
traceIdBuilder
.
length
()
-
1
).
toString
();
}
public
static
String
getTracelevelId
()
{
Span
spanData
=
CurrentThreadSpanStack
.
peek
();
if
(
spanData
==
null
)
{
return
""
;
...
...
@@ -38,9 +41,6 @@ public class Tracing {
}
public
static
String
generateNextContextData
()
{
if
(!
AuthDesc
.
isAuth
())
return
null
;
Span
spanData
=
CurrentThreadSpanStack
.
peek
();
if
(
spanData
==
null
)
{
return
null
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/AuthDesc.java
已删除
100644 → 0
浏览文件 @
c98b41b0
package
com.a.eye.skywalking.conf
;
import
com.a.eye.skywalking.logging.LogManager
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.selfexamination.SDKHealthCollector
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.InputStream
;
public
class
AuthDesc
{
private
static
EasyLogger
easyLogger
=
LogManager
.
getLogger
(
AuthDesc
.
class
);
static
boolean
isAuth
=
false
;
static
{
InputStream
authFileInputStream
;
if
(
Config
.
SkyWalking
.
IS_PREMAIN_MODE
)
{
authFileInputStream
=
fetchAuthFileInputStream
();
}
else
{
authFileInputStream
=
AuthDesc
.
class
.
getResourceAsStream
(
"/sky-walking.auth"
);
}
ConfigInitializer
.
initialize
(
authFileInputStream
);
ConfigValidator
.
validate
();
SDKHealthCollector
.
init
();
}
private
static
InputStream
fetchAuthFileInputStream
()
{
try
{
return
new
FileInputStream
(
Config
.
SkyWalking
.
AGENT_BASE_PATH
+
File
.
separator
+
"/sky-walking.auth"
);
}
catch
(
Exception
e
)
{
easyLogger
.
error
(
"Error to fetch auth file input stream."
,
e
);
return
null
;
}
}
public
static
boolean
isAuth
()
{
return
isAuth
;
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java
浏览文件 @
de32fce1
...
...
@@ -7,32 +7,14 @@ public class Config {
public
static
String
APPLICATION_CODE
=
""
;
public
static
String
AUTH_SYSTEM_ENV_NAME
=
"SKYWALKING_RUN"
;
public
static
boolean
AUTH_OVERRIDE
=
false
;
public
static
String
CHARSET
=
"UTF-8"
;
public
static
boolean
ALL_METHOD_MONITOR
=
false
;
public
static
boolean
IS_PREMAIN_MODE
=
false
;
public
static
String
AGENT_BASE_PATH
=
""
;
}
public
static
class
Plugin
{
public
static
class
CustomLocalMethodInterceptorPlugin
{
public
static
boolean
IS_ENABLE
=
false
;
public
static
String
PACKAGE_PREFIX
=
""
;
public
static
boolean
RECORD_PARAM_ENABLE
=
false
;
}
public
static
class
Disruptor
{
public
static
int
BUFFER_SIZE
=
1024
*
4
;
}
public
static
class
BuriedPoint
{
...
...
@@ -49,62 +31,6 @@ public class Config {
}
public
static
class
Consumer
{
// 最大消费线程数
public
static
int
MAX_CONSUMER
=
2
;
// 消费者最大等待时间
public
static
long
MAX_WAIT_TIME
=
5L
;
//
public
static
long
CONSUMER_FAIL_RETRY_WAIT_INTERVAL
=
50L
;
}
public
static
class
Buffer
{
// 每个Buffer的最大个数
public
static
int
BUFFER_MAX_SIZE
=
20000
;
// Buffer池的最大长度
public
static
int
POOL_SIZE
=
5
;
}
public
static
class
Sender
{
// 最大发送数据个数
public
static
final
int
MAX_SEND_DATA_SIZE
=
10
;
// 最大发送者的连接数阀比例
public
static
int
CONNECT_PERCENT
=
50
;
// 发送服务端配置
public
static
String
SERVERS_ADDR
=
"127.0.0.1:34000"
;
// 最大发送副本数量
public
static
int
MAX_COPY_NUM
=
2
;
// 发送的最大长度
public
static
int
MAX_SEND_LENGTH
=
18500
;
public
static
long
RETRY_GET_SENDER_WAIT_INTERVAL
=
2000L
;
// 切换Sender的周期
public
static
long
SWITCH_SENDER_INTERVAL
=
10
*
60
*
1000
;
// 切换Sender之后,关闭Sender的倒计时
public
static
long
CLOSE_SENDER_COUNTDOWN
=
10
*
1000
;
// Checker线程处理完成等待周期
public
static
long
CHECKER_THREAD_WAIT_INTERVAL
=
1000
;
public
static
long
RETRY_FIND_CONNECTION_SENDER
=
1000
;
}
public
static
class
HealthCollector
{
// 默认健康检查上报时间
public
static
long
REPORT_INTERVAL
=
5
*
60
*
1000L
;
}
public
static
class
Logging
{
// log文件名
public
static
String
LOG_FILE_NAME
=
"skywalking-api.log"
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/ConfigInitializer.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.conf
;
import
com.a.eye.skywalking.logging.LogManager
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.protocol.util.StringUtil
;
import
java.io.IOException
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.InputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Modifier
;
...
...
@@ -11,28 +13,34 @@ import java.util.LinkedList;
import
java.util.Properties
;
public
class
ConfigInitializer
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
ConfigInitializer
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
ConfigInitializer
.
class
);
static
void
initialize
(
InputStream
inputStream
)
{
if
(
inputStream
==
null
)
{
easyLogger
.
info
(
"Not provide sky-walking certification documents, sky-walking api auto shutdown."
);
public
static
void
initialize
()
{
InputStream
configFileStream
;
if
(
Config
.
SkyWalking
.
IS_PREMAIN_MODE
)
{
configFileStream
=
fetchAuthFileInputStream
();
}
else
{
configFileStream
=
ConfigInitializer
.
class
.
getResourceAsStream
(
"/sky-walking.auth"
);
}
Config
.
SkyWalking
.
USER_ID
=
System
.
getProperty
(
"userId"
);
Config
.
SkyWalking
.
APPLICATION_CODE
=
System
.
getProperty
(
"applicationCode"
);
if
(
configFileStream
==
null
)
{
logger
.
info
(
"Not provide sky-walking certification documents, sky-walking api run in default config."
);
}
else
{
try
{
Properties
properties
=
new
Properties
();
properties
.
load
(
input
Stream
);
properties
.
load
(
configFile
Stream
);
initNextLevel
(
properties
,
Config
.
class
,
new
ConfigDesc
());
AuthDesc
.
isAuth
=
Boolean
.
valueOf
(
System
.
getenv
(
Config
.
SkyWalking
.
AUTH_SYSTEM_ENV_NAME
));
easyLogger
.
info
(
"sky-walking system-env auth : "
+
AuthDesc
.
isAuth
);
if
(!
AuthDesc
.
isAuth
&&
Config
.
SkyWalking
.
AUTH_OVERRIDE
){
AuthDesc
.
isAuth
=
Config
.
SkyWalking
.
AUTH_OVERRIDE
;
easyLogger
.
info
(
"sky-walking auth override: "
+
AuthDesc
.
isAuth
);
}
}
catch
(
IllegalAccessException
e
)
{
easyLogger
.
error
(
"Parsing certification file failed, sky-walking api auto shutdown."
,
e
);
}
catch
(
IOException
e
)
{
easyLogger
.
error
(
"Failed to read the certification file, sky-walking api auto shutdown."
,
e
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"Failed to read the config file, sky-walking api run in default config."
,
e
);
}
}
if
(
StringUtil
.
isEmpty
(
Config
.
SkyWalking
.
USER_ID
)){
}
}
private
static
void
initNextLevel
(
Properties
properties
,
Class
<?>
recentConfigType
,
ConfigDesc
parentDesc
)
throws
NumberFormatException
,
IllegalArgumentException
,
IllegalAccessException
{
...
...
@@ -59,6 +67,15 @@ public class ConfigInitializer {
parentDesc
.
removeLastDesc
();
}
}
private
static
InputStream
fetchAuthFileInputStream
()
{
try
{
return
new
FileInputStream
(
Config
.
SkyWalking
.
AGENT_BASE_PATH
+
File
.
separator
+
"/sky-walking.auth"
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"Error to fetch auth file input stream."
,
e
);
return
null
;
}
}
}
class
ConfigDesc
{
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/ConfigValidator.java
已删除
100644 → 0
浏览文件 @
c98b41b0
package
com.a.eye.skywalking.conf
;
public
class
ConfigValidator
{
private
ConfigValidator
()
{
// Non
}
public
static
boolean
validate
()
{
if
(!
validateSendMaxLength
())
{
throw
new
IllegalArgumentException
(
"Max send length must great than the sum of the maximum "
+
"length of sending exception stack and the maximum length of sending business key."
);
}
return
true
;
}
private
static
boolean
validateSendMaxLength
()
{
if
(
Config
.
Sender
.
MAX_SEND_LENGTH
<
(
Config
.
BuriedPoint
.
MAX_EXCEPTION_STACK_LENGTH
+
Config
.
BuriedPoint
.
BUSINESSKEY_MAX_LENGTH
))
{
return
false
;
}
return
true
;
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/AckSpanDisruptor.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.disruptor.ack.AckSpanFactory
;
import
com.a.eye.skywalking.disruptor.ack.AckSpanHolder
;
import
com.a.eye.skywalking.disruptor.ack.SendAckSpanEventHandler
;
import
com.a.eye.skywalking.disruptor.request.RequestSpanFactory
;
import
com.a.eye.skywalking.disruptor.request.RequestSpanHolder
;
import
com.a.eye.skywalking.disruptor.request.SendRequestSpanEventHandler
;
import
com.a.eye.skywalking.health.report.HealthCollector
;
import
com.a.eye.skywalking.health.report.HeathReading
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
import
com.lmax.disruptor.RingBuffer
;
import
com.lmax.disruptor.dsl.Disruptor
;
import
com.lmax.disruptor.util.DaemonThreadFactory
;
/**
* Created by wusheng on 2016/11/26.
*/
public
class
AckSpanDisruptor
{
private
ILog
logger
=
LogManager
.
getLogger
(
AckSpanDisruptor
.
class
);
private
Disruptor
<
AckSpanHolder
>
ackSpanDisruptor
;
private
RingBuffer
<
AckSpanHolder
>
ackSpanRingBuffer
;
public
static
final
AckSpanDisruptor
INSTANCE
=
new
AckSpanDisruptor
();
private
AckSpanDisruptor
(){
ackSpanDisruptor
=
new
Disruptor
<
AckSpanHolder
>(
new
AckSpanFactory
(),
Config
.
Disruptor
.
BUFFER_SIZE
,
DaemonThreadFactory
.
INSTANCE
);
ackSpanDisruptor
.
handleEventsWith
(
new
SendAckSpanEventHandler
());
ackSpanDisruptor
.
start
();
ackSpanRingBuffer
=
ackSpanDisruptor
.
getRingBuffer
();
}
public
void
ready2Send
(
AckSpan
ackSpan
)
{
long
sequence
=
ackSpanRingBuffer
.
next
();
// Grab the next sequence
try
{
AckSpanHolder
data
=
ackSpanRingBuffer
.
get
(
sequence
);
data
.
setData
(
ackSpan
);
HealthCollector
.
getCurrentHeathReading
(
"AckSpanDisruptor"
).
updateData
(
HeathReading
.
INFO
,
"ready2Send stored."
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"AckSpan trace-id[{}] ready2Send failure."
,
ackSpan
.
getTraceId
(),
e
);
HealthCollector
.
getCurrentHeathReading
(
"AckSpanDisruptor"
).
updateData
(
HeathReading
.
ERROR
,
"AckSpan ready2Send failure."
);
}
finally
{
ackSpanRingBuffer
.
publish
(
sequence
);
}
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/RequestSpanDisruptor.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.disruptor.request.RequestSpanFactory
;
import
com.a.eye.skywalking.disruptor.request.RequestSpanHolder
;
import
com.a.eye.skywalking.disruptor.request.SendRequestSpanEventHandler
;
import
com.a.eye.skywalking.health.report.HealthCollector
;
import
com.a.eye.skywalking.health.report.HeathReading
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
import
com.lmax.disruptor.RingBuffer
;
import
com.lmax.disruptor.dsl.Disruptor
;
import
com.lmax.disruptor.util.DaemonThreadFactory
;
/**
* Created by wusheng on 2016/11/26.
*/
public
class
RequestSpanDisruptor
{
private
ILog
logger
=
LogManager
.
getLogger
(
RequestSpanDisruptor
.
class
);
private
Disruptor
<
RequestSpanHolder
>
requestSpanDisruptor
;
private
RingBuffer
<
RequestSpanHolder
>
requestSpanRingBuffer
;
public
static
final
RequestSpanDisruptor
INSTANCE
=
new
RequestSpanDisruptor
();
private
RequestSpanDisruptor
(){
requestSpanDisruptor
=
new
Disruptor
<
RequestSpanHolder
>(
new
RequestSpanFactory
(),
Config
.
Disruptor
.
BUFFER_SIZE
,
DaemonThreadFactory
.
INSTANCE
);
requestSpanDisruptor
.
handleEventsWith
(
new
SendRequestSpanEventHandler
());
requestSpanDisruptor
.
start
();
requestSpanRingBuffer
=
requestSpanDisruptor
.
getRingBuffer
();
}
public
void
ready2Send
(
RequestSpan
requestSpan
)
{
long
sequence
=
requestSpanRingBuffer
.
next
();
// Grab the next sequence
try
{
RequestSpanHolder
data
=
requestSpanRingBuffer
.
get
(
sequence
);
data
.
setData
(
requestSpan
);
HealthCollector
.
getCurrentHeathReading
(
"RequestSpanDisruptor"
).
updateData
(
HeathReading
.
INFO
,
"ready2Send stored."
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"RequestSpan trace-id[{}] ready2Send failure."
,
requestSpan
.
getTraceId
(),
e
);
HealthCollector
.
getCurrentHeathReading
(
"RequestSpanDisruptor"
).
updateData
(
HeathReading
.
ERROR
,
"RequestSpan ready2Send failure."
);
}
finally
{
requestSpanRingBuffer
.
publish
(
sequence
);
}
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/AckSpanFactory.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.ack
;
import
com.lmax.disruptor.EventFactory
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
AckSpanFactory
implements
EventFactory
<
AckSpanHolder
>
{
@Override
public
AckSpanHolder
newInstance
()
{
return
new
AckSpanHolder
();
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/AckSpanHolder.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.ack
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
/**
* Created by wusheng on 2016/11/26.
*/
public
class
AckSpanHolder
{
private
AckSpan
data
;
public
AckSpan
getData
()
{
return
data
;
}
public
void
setData
(
AckSpan
data
)
{
this
.
data
=
data
;
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/ack/SendAckSpanEventHandler.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.ack
;
import
com.a.eye.skywalking.health.report.HealthCollector
;
import
com.a.eye.skywalking.health.report.HeathReading
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.lmax.disruptor.EventHandler
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
SendAckSpanEventHandler
implements
EventHandler
<
AckSpanHolder
>
{
private
static
ILog
logger
=
LogManager
.
getLogger
(
SendAckSpanEventHandler
.
class
);
private
int
bufferSize
=
100
;
private
List
<
AckSpan
>
buffer
=
new
ArrayList
<>(
bufferSize
);
public
SendAckSpanEventHandler
()
{
}
@Override
public
void
onEvent
(
AckSpanHolder
event
,
long
sequence
,
boolean
endOfBatch
)
throws
Exception
{
buffer
.
add
(
event
.
getData
());
if
(
endOfBatch
||
buffer
.
size
()
==
bufferSize
)
{
try
{
HealthCollector
.
getCurrentHeathReading
(
"SendAckSpanEventHandler"
).
updateData
(
HeathReading
.
INFO
,
"%s messages were successful consumed ."
,
buffer
.
size
());
}
finally
{
buffer
.
clear
();
}
}
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/RequestSpanFactory.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.request
;
import
com.lmax.disruptor.EventFactory
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
RequestSpanFactory
implements
EventFactory
<
RequestSpanHolder
>
{
@Override
public
RequestSpanHolder
newInstance
()
{
return
new
RequestSpanHolder
();
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/RequestSpanHolder.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.request
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
/**
* Created by wusheng on 2016/11/26.
*/
public
class
RequestSpanHolder
{
private
RequestSpan
data
;
public
RequestSpan
getData
()
{
return
data
;
}
public
void
setData
(
RequestSpan
data
)
{
this
.
data
=
data
;
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/disruptor/request/SendRequestSpanEventHandler.java
0 → 100644
浏览文件 @
de32fce1
package
com.a.eye.skywalking.disruptor.request
;
import
com.a.eye.skywalking.health.report.HealthCollector
;
import
com.a.eye.skywalking.health.report.HeathReading
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
import
com.lmax.disruptor.EventHandler
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by wusheng on 2016/11/24.
*/
public
class
SendRequestSpanEventHandler
implements
EventHandler
<
RequestSpanHolder
>
{
private
static
ILog
logger
=
LogManager
.
getLogger
(
SendRequestSpanEventHandler
.
class
);
private
static
final
int
bufferSize
=
100
;
private
List
<
RequestSpan
>
buffer
=
new
ArrayList
<>(
bufferSize
);
public
SendRequestSpanEventHandler
()
{
}
@Override
public
void
onEvent
(
RequestSpanHolder
event
,
long
sequence
,
boolean
endOfBatch
)
throws
Exception
{
buffer
.
add
(
event
.
getData
());
if
(
endOfBatch
||
buffer
.
size
()
==
bufferSize
)
{
try
{
HealthCollector
.
getCurrentHeathReading
(
"SendRequestSpanEventHandler"
).
updateData
(
HeathReading
.
INFO
,
"%s messages were successful consumed ."
,
buffer
.
size
());
}
finally
{
buffer
.
clear
();
}
}
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.invoke.monitor
;
import
com.a.eye.skywalking.buffer.ContextBuffer
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.context.CurrentThreadSpanStack
;
import
com.a.eye.skywalking.disruptor.AckSpanDisruptor
;
import
com.a.eye.skywalking.disruptor.RequestSpanDisruptor
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.model.ContextData
;
import
com.a.eye.skywalking.model.Identification
;
import
com.a.eye.skywalking.model.Span
;
import
com.a.eye.skywalking.network.grpc.AckSpan
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
import
com.a.eye.skywalking.protocol.util.BuriedPointMachineUtil
;
import
java.util.HashSet
;
...
...
@@ -34,19 +34,35 @@ public abstract class BaseInvokeMonitor {
CurrentThreadSpanStack
.
push
(
spanData
);
// 根据SpanData生成RequestSpan,并保存
ContextBuffer
.
save
(
RequestSpan
.
RequestSpanBuilder
.
newBuilder
(
CurrentThreadSpanStack
.
peek
()).
callType
(
id
.
getCallType
()).
viewPoint
(
id
.
getViewPoint
())
.
spanTypeDesc
(
id
.
getSpanTypeDesc
()).
processNo
(
BuriedPointMachineUtil
.
getProcessNo
())
.
address
(
BuriedPointMachineUtil
.
getHostDesc
()).
build
()
);
CurrentThreadSpanStack
.
push
(
spanData
);
sendRequestSpan
(
spanData
,
id
);
// 并将当前的Context返回回去
return
new
ContextData
(
spanData
);
}
protected
void
sendRequestSpan
(
Span
span
,
Identification
id
){
RequestSpan
.
Builder
requestSpanBuilder
=
span
.
buildRequestSpan
(
RequestSpan
.
newBuilder
());
RequestSpan
requestSpan
=
requestSpanBuilder
.
setViewPointId
(
id
.
getViewPoint
())
.
setSpanTypeDesc
(
id
.
getSpanTypeDesc
())
.
setBusinessKey
(
id
.
getBusinessKey
())
.
setCallType
(
id
.
getCallType
()).
setProcessNo
(
BuriedPointMachineUtil
.
getProcessNo
())
.
setAddress
(
BuriedPointMachineUtil
.
getHostDesc
()).
build
();
RequestSpanDisruptor
.
INSTANCE
.
ready2Send
(
requestSpan
);
}
protected
void
sendAckSpan
(
Span
span
){
AckSpan
ackSpan
=
span
.
buildAckSpan
(
AckSpan
.
newBuilder
()).
build
();
AckSpanDisruptor
.
INSTANCE
.
ready2Send
(
ackSpan
);
}
protected
void
afterInvoke
()
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
;
// 弹出上下文的栈顶中的元素
Span
spanData
=
CurrentThreadSpanStack
.
pop
();
...
...
@@ -55,10 +71,8 @@ public abstract class BaseInvokeMonitor {
easyLogger
.
debug
(
"TraceId-ACK:"
+
spanData
.
getTraceId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
()
+
"\tbusinessKey:"
+
spanData
.
getBusinessKey
());
}
// 生成并保存到缓存
AckSpan
.
Builder
ackSpanBuilder
=
spanData
.
buildAckSpan
(
AckSpan
.
newBuilder
());
ContextBuffer
.
save
(
new
AckSpan
(
spanData
)
);
sendAckSpan
(
spanData
);
}
catch
(
Throwable
t
)
{
easyLogger
.
error
(
t
.
getMessage
(),
t
);
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/LocalMethodInvokeMonitor.java
浏览文件 @
de32fce1
...
...
@@ -5,9 +5,8 @@ import com.a.eye.skywalking.logging.api.LogManager;
import
com.a.eye.skywalking.model.ContextData
;
import
com.a.eye.skywalking.model.EmptyContextData
;
import
com.a.eye.skywalking.model.Identification
;
import
com.a.eye.skywalking.protocol.util.ContextGenerator
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.model.Span
;
import
com.a.eye.skywalking.protocol.util.ContextGenerator
;
public
class
LocalMethodInvokeMonitor
extends
BaseInvokeMonitor
{
...
...
@@ -16,9 +15,6 @@ public class LocalMethodInvokeMonitor extends BaseInvokeMonitor {
public
ContextData
beforeInvoke
(
Identification
id
)
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
new
EmptyContextData
();
Span
spanData
=
ContextGenerator
.
generateSpanFromThreadLocal
(
id
);
return
super
.
beforeInvoke
(
spanData
,
id
);
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/RPCClientInvokeMonitor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.invoke.monitor
;
import
com.a.eye.skywalking.buffer.ContextBuffer
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.conf.Config
;
import
com.a.eye.skywalking.context.CurrentThreadSpanStack
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.model.*
;
import
com.a.eye.skywalking.network.grpc.RequestSpan
;
import
com.a.eye.skywalking.protocol.util.BuriedPointMachineUtil
;
import
com.a.eye.skywalking.protocol.util.ContextGenerator
;
public
class
RPCClientInvokeMonitor
extends
BaseInvokeMonitor
{
...
...
@@ -18,9 +15,6 @@ public class RPCClientInvokeMonitor extends BaseInvokeMonitor {
public
ContextData
beforeInvoke
(
Identification
id
)
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
new
EmptyContextData
();
Span
spanData
=
ContextGenerator
.
generateSpanFromThreadLocal
(
id
);
//设置SpanType的类型
spanData
.
setSpanType
(
SpanType
.
RPC_CLIENT
);
...
...
@@ -32,16 +26,7 @@ public class RPCClientInvokeMonitor extends BaseInvokeMonitor {
CurrentThreadSpanStack
.
push
(
spanData
);
Span
span
=
CurrentThreadSpanStack
.
peek
();
RequestSpan
.
Builder
requestSpanBuilder
=
span
.
buildRequestSpan
(
RequestSpan
.
newBuilder
());
RequestSpan
requestSpan
=
requestSpanBuilder
.
setViewPointId
(
id
.
getViewPoint
())
.
setSpanTypeDesc
(
id
.
getSpanTypeDesc
())
.
setBussinessKey
(
id
.
getBusinessKey
())
.
setCallType
(
id
.
getCallType
()).
setProcessNo
(
BuriedPointMachineUtil
.
getProcessNo
())
.
setAddress
(
BuriedPointMachineUtil
.
getHostDesc
()).
build
();
ContextBuffer
.
save
(
requestSpan
);
sendRequestSpan
(
spanData
,
id
);
return
new
ContextData
(
spanData
.
getTraceId
(),
generateSubParentLevelId
(
spanData
));
}
catch
(
Throwable
t
)
{
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/RPCServerInvokeMonitor.java
浏览文件 @
de32fce1
...
...
@@ -4,10 +4,9 @@ import com.a.eye.skywalking.logging.api.ILog;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.model.ContextData
;
import
com.a.eye.skywalking.model.Identification
;
import
com.a.eye.skywalking.model.Span
;
import
com.a.eye.skywalking.model.SpanType
;
import
com.a.eye.skywalking.protocol.util.ContextGenerator
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.model.Span
;
public
class
RPCServerInvokeMonitor
extends
BaseInvokeMonitor
{
...
...
@@ -16,9 +15,6 @@ public class RPCServerInvokeMonitor extends BaseInvokeMonitor {
public
void
beforeInvoke
(
ContextData
context
,
Identification
id
)
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
;
Span
spanData
=
ContextGenerator
.
generateSpanFromContextData
(
context
,
id
);
// 设置是否为接收端
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/logging/EasyLogResolver.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.logging
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogResolver
;
/**
...
...
@@ -8,7 +7,7 @@ import com.a.eye.skywalking.logging.api.LogResolver;
*/
public
class
EasyLogResolver
implements
LogResolver
{
@Override
public
ILog
getLogger
(
Class
<?>
clazz
)
{
public
com
.
a
.
eye
.
skywalking
.
logging
.
api
.
ILog
getLogger
(
Class
<?>
clazz
)
{
return
new
EasyLogger
(
clazz
);
}
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/logging/EasyLogger.java
浏览文件 @
de32fce1
...
...
@@ -11,7 +11,7 @@ import java.util.Date;
/**
* Created by xin on 16-6-23.
*/
public
class
EasyLogger
implements
ILog
{
public
class
EasyLogger
implements
com
.
a
.
eye
.
skywalking
.
logging
.
api
.
ILog
{
private
Class
toBeLoggerClass
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/ContextData.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.model
;
import
com.a.eye.skywalking.api.Tracing
;
import
com.a.eye.skywalking.network.grpc.TraceId
;
public
class
ContextData
{
...
...
@@ -64,11 +65,8 @@ public class ContextData {
@Override
public
String
toString
()
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
StringBuilder
traceIdBuilder
=
new
StringBuilder
();
for
(
Long
segment
:
traceId
.
getSegmentsList
())
{
traceIdBuilder
.
append
(
segment
).
append
(
"."
);
}
stringBuilder
.
append
(
traceIdBuilder
.
substring
(
0
,
traceIdBuilder
.
length
()
-
1
));
stringBuilder
.
append
(
Tracing
.
formatTraceId
(
traceId
));
stringBuilder
.
append
(
"-"
);
if
(
parentLevel
==
null
||
parentLevel
.
length
()
==
0
)
{
stringBuilder
.
append
(
" "
);
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginBootstrap.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
net.bytebuddy.pool.TypePool
;
import
java.net.URL
;
...
...
@@ -9,7 +9,7 @@ import java.util.ArrayList;
import
java.util.List
;
public
class
PluginBootstrap
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
PluginBootstrap
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
PluginBootstrap
.
class
);
public
static
TypePool
CLASS_TYPE_POOL
=
null
;
...
...
@@ -20,7 +20,7 @@ public class PluginBootstrap {
List
<
URL
>
resources
=
resolver
.
getResources
();
if
(
resources
==
null
||
resources
.
size
()
==
0
)
{
easyL
ogger
.
info
(
"no plugin files (skywalking-plugin.properties) found, continue to start application."
);
l
ogger
.
info
(
"no plugin files (skywalking-plugin.properties) found, continue to start application."
);
return
new
ArrayList
<
AbstractClassEnhancePluginDefine
>();
}
...
...
@@ -28,7 +28,7 @@ public class PluginBootstrap {
try
{
PluginCfg
.
CFG
.
load
(
pluginUrl
.
openStream
());
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"plugin [{}] init failure."
,
new
Object
[]
{
pluginUrl
},
t
);
l
ogger
.
error
(
"plugin [{}] init failure."
,
new
Object
[]
{
pluginUrl
},
t
);
}
}
...
...
@@ -37,12 +37,12 @@ public class PluginBootstrap {
List
<
AbstractClassEnhancePluginDefine
>
plugins
=
new
ArrayList
<
AbstractClassEnhancePluginDefine
>();
for
(
String
pluginClassName
:
pluginClassList
)
{
try
{
easyL
ogger
.
debug
(
"loading plugin class {}."
,
pluginClassName
);
l
ogger
.
debug
(
"loading plugin class {}."
,
pluginClassName
);
AbstractClassEnhancePluginDefine
plugin
=
(
AbstractClassEnhancePluginDefine
)
Class
.
forName
(
pluginClassName
).
newInstance
();
plugins
.
add
(
plugin
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"loade plugin [{}] failure."
,
new
Object
[]
{
pluginClassName
},
t
);
l
ogger
.
error
(
"loade plugin [{}] failure."
,
new
Object
[]
{
pluginClassName
},
t
);
}
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginResourcesResolver.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
java.io.IOException
;
import
java.net.URL
;
...
...
@@ -10,7 +10,7 @@ import java.util.Enumeration;
import
java.util.List
;
public
class
PluginResourcesResolver
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
PluginResourcesResolver
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
PluginResourcesResolver
.
class
);
public
List
<
URL
>
getResources
(){
List
<
URL
>
cfgUrlPaths
=
new
ArrayList
<
URL
>();
...
...
@@ -19,18 +19,18 @@ public class PluginResourcesResolver {
urls
=
getDefaultClassLoader
().
getResources
(
"skywalking-plugin.def"
);
if
(!
urls
.
hasMoreElements
()){
easyL
ogger
.
info
(
"no plugin files (skywalking-plugin.properties) found"
);
l
ogger
.
info
(
"no plugin files (skywalking-plugin.properties) found"
);
}
while
(
urls
.
hasMoreElements
()){
URL
pluginUrl
=
urls
.
nextElement
();
cfgUrlPaths
.
add
(
pluginUrl
);
easyL
ogger
.
info
(
"find skywalking plugin define in {}"
,
pluginUrl
);
l
ogger
.
info
(
"find skywalking plugin define in {}"
,
pluginUrl
);
}
return
cfgUrlPaths
;
}
catch
(
IOException
e
)
{
easyL
ogger
.
error
(
"read resources failure."
,
e
);
l
ogger
.
error
(
"read resources failure."
,
e
);
}
return
null
;
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin
;
import
com.a.eye.skywalking.conf.AuthDesc
;
import
com.a.eye.skywalking.logging.LogManager
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
net.bytebuddy.ByteBuddy
;
import
net.bytebuddy.dynamic.ClassFileLocator
;
import
net.bytebuddy.dynamic.DynamicType
;
...
...
@@ -21,7 +20,7 @@ import java.util.List;
* @author wusheng
*/
public
class
TracingBootstrap
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
TracingBootstrap
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
TracingBootstrap
.
class
);
private
TracingBootstrap
()
{
}
...
...
@@ -33,30 +32,26 @@ public class TracingBootstrap {
throw
new
RuntimeException
(
"bootstrap failure. need args[0] to be main class."
);
}
if
(!
AuthDesc
.
isAuth
()){
return
;
}
List
<
AbstractClassEnhancePluginDefine
>
plugins
=
null
;
try
{
PluginBootstrap
bootstrap
=
new
PluginBootstrap
();
plugins
=
bootstrap
.
loadPlugins
();
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"PluginBootstrap start failure."
,
t
);
l
ogger
.
error
(
"PluginBootstrap start failure."
,
t
);
}
for
(
AbstractClassEnhancePluginDefine
plugin
:
plugins
)
{
String
enhanceClassName
=
plugin
.
enhanceClassName
();
TypePool
.
Resolution
resolution
=
TypePool
.
Default
.
ofClassPath
().
describe
(
enhanceClassName
);
if
(!
resolution
.
isResolved
())
{
easyLogger
.
error
(
"Failed to resolve the class "
+
enhanceClassName
);
logger
.
error
(
"Failed to resolve the class "
+
enhanceClassName
,
null
);
continue
;
}
DynamicType
.
Builder
<?>
newClassBuilder
=
new
ByteBuddy
().
rebase
(
resolution
.
resolve
(),
ClassFileLocator
.
ForClassLoader
.
ofClassPath
());
newClassBuilder
=
((
AbstractClassEnhancePluginDefine
)
plugin
).
define
(
enhanceClassName
,
newClassBuilder
);
newClassBuilder
.
make
(
TypeResolutionStrategy
.
Active
.
INSTANCE
).
load
(
ClassLoader
.
getSystemClassLoader
(),
ClassLoadingStrategy
.
Default
.
INJECTION
)
newClassBuilder
.
make
(
new
TypeResolutionStrategy
.
Active
()
).
load
(
ClassLoader
.
getSystemClassLoader
(),
ClassLoadingStrategy
.
Default
.
INJECTION
)
.
getLoaded
();
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassConstructorInterceptor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.interceptor.enhance
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.plugin.interceptor.loader.InterceptorInstanceLoader
;
import
net.bytebuddy.implementation.bind.annotation.AllArguments
;
...
...
@@ -10,7 +10,7 @@ import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import
net.bytebuddy.implementation.bind.annotation.This
;
public
class
ClassConstructorInterceptor
{
private
static
EasyLogger
easyL
ogger
=
LogManager
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
ClassConstructorInterceptor
.
class
);
private
String
instanceMethodsAroundInterceptorClassName
;
...
...
@@ -34,7 +34,7 @@ public class ClassConstructorInterceptor {
allArguments
);
interceptor
.
onConstruct
(
context
,
interceptorContext
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"ClassConstructorInterceptor failue."
,
t
);
l
ogger
.
error
(
"ClassConstructorInterceptor failue."
,
t
);
}
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
浏览文件 @
de32fce1
...
...
@@ -4,8 +4,9 @@ import static net.bytebuddy.jar.asm.Opcodes.ACC_PRIVATE;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
any
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
not
;
import
com.a.eye.skywalking.logging.LogManager
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.logging.api.ILog
;
import
com.a.eye.skywalking.logging.api.LogManager
;
import
com.a.eye.skywalking.plugin.AbstractClassEnhancePluginDefine
;
import
com.a.eye.skywalking.plugin.PluginException
;
import
com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
...
...
@@ -22,164 +23,141 @@ import com.a.eye.skywalking.plugin.interceptor.EnhanceException;
import
com.a.eye.skywalking.plugin.interceptor.MethodMatcher
;
public
abstract
class
ClassEnhancePluginDefine
extends
AbstractClassEnhancePluginDefine
{
private
static
EasyLogger
easyLogger
=
LogManager
.
getLogger
(
ClassEnhancePluginDefine
.
class
);
public
static
final
String
contextAttrName
=
"_$EnhancedClassInstanceContext"
;
@Override
protected
DynamicType
.
Builder
<?>
enhance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
newClassBuilder
=
this
.
enhanceClass
(
enhanceOriginClassName
,
newClassBuilder
);
newClassBuilder
=
this
.
enhanceInstance
(
enhanceOriginClassName
,
newClassBuilder
);
return
newClassBuilder
;
}
private
DynamicType
.
Builder
<?>
enhanceInstance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
MethodMatcher
[]
methodMatchers
=
getInstanceMethodsMatchers
();
if
(
methodMatchers
==
null
){
return
newClassBuilder
;
}
/**
* alter class source code.<br/>
*
* new class need:<br/>
* 1.add field '_$EnhancedClassInstanceContext' of type
* EnhancedClassInstanceContext <br/>
*
* 2.intercept constructor by default, and intercept method which it's
* required by interceptorDefineClass. <br/>
*/
String
interceptor
=
getInstanceMethodsInterceptor
();
if
(
StringUtil
.
isEmpty
(
interceptor
))
{
throw
new
EnhanceException
(
"no InstanceMethodsAroundInterceptor define. "
);
}
newClassBuilder
=
newClassBuilder
.
defineField
(
contextAttrName
,
EnhancedClassInstanceContext
.
class
,
ACC_PRIVATE
)
.
constructor
(
any
())
.
intercept
(
SuperMethodCall
.
INSTANCE
.
andThen
(
MethodDelegation
.
to
(
new
ClassConstructorInterceptor
(
interceptor
))
.
appendParameterBinder
(
FieldProxy
.
Binder
.
install
(
FieldGetter
.
class
,
FieldSetter
.
class
))));
ClassInstanceMethodsInterceptor
classMethodInterceptor
=
new
ClassInstanceMethodsInterceptor
(
interceptor
);
StringBuilder
enhanceRules
=
new
StringBuilder
(
"\nprepare to enhance class ["
+
enhanceOriginClassName
+
"] instance methods as following rules:\n"
);
int
ruleIdx
=
1
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
enhanceRules
.
append
(
"\t"
+
ruleIdx
++
+
". "
+
methodMatcher
+
"\n"
);
}
easyLogger
.
debug
(
enhanceRules
);
ElementMatcher
.
Junction
<
MethodDescription
>
matcher
=
null
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
easyLogger
.
debug
(
"enhance class {} instance methods by rule: {}"
,
enhanceOriginClassName
,
methodMatcher
);
if
(
matcher
==
null
)
{
matcher
=
methodMatcher
.
buildMatcher
();
continue
;
}
matcher
=
matcher
.
or
(
methodMatcher
.
buildMatcher
());
}
/**
* exclude static methods.
*/
matcher
=
matcher
.
and
(
not
(
ElementMatchers
.
isStatic
()));
newClassBuilder
=
newClassBuilder
.
method
(
matcher
).
intercept
(
MethodDelegation
.
to
(
classMethodInterceptor
));
return
newClassBuilder
;
}
/**
* 返回需要被增强的方法列表
*
* @return
*/
protected
abstract
MethodMatcher
[]
getInstanceMethodsMatchers
();
/**
* 返回增强拦截器的实现<br/>
* 每个拦截器在同一个被增强类的内部,保持单例
*
* @return
*/
protected
abstract
String
getInstanceMethodsInterceptor
();
private
DynamicType
.
Builder
<?>
enhanceClass
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
MethodMatcher
[]
methodMatchers
=
getStaticMethodsMatchers
();
if
(
methodMatchers
==
null
){
return
newClassBuilder
;
}
String
interceptor
=
getStaticMethodsInterceptor
();
if
(
StringUtil
.
isEmpty
(
interceptor
))
{
throw
new
EnhanceException
(
"no StaticMethodsAroundInterceptor define. "
);
}
ClassStaticMethodsInterceptor
classMethodInterceptor
=
new
ClassStaticMethodsInterceptor
(
interceptor
);
StringBuilder
enhanceRules
=
new
StringBuilder
(
"\nprepare to enhance class ["
+
enhanceOriginClassName
+
"] static methods as following rules:\n"
);
int
ruleIdx
=
1
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
enhanceRules
.
append
(
"\t"
+
ruleIdx
++
+
". "
+
methodMatcher
+
"\n"
);
}
easyLogger
.
debug
(
enhanceRules
);
ElementMatcher
.
Junction
<
MethodDescription
>
matcher
=
null
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
easyLogger
.
debug
(
"enhance class {} static methods by rule: {}"
,
enhanceOriginClassName
,
methodMatcher
);
if
(
matcher
==
null
)
{
matcher
=
methodMatcher
.
buildMatcher
();
continue
;
}
matcher
=
matcher
.
or
(
methodMatcher
.
buildMatcher
());
}
/**
* restrict static methods.
*/
matcher
=
matcher
.
and
(
ElementMatchers
.
isStatic
());
newClassBuilder
=
newClassBuilder
.
method
(
matcher
).
intercept
(
MethodDelegation
.
to
(
classMethodInterceptor
));
return
newClassBuilder
;
}
/**
* 返回需要被增强的方法列表
*
* @return
*/
protected
abstract
MethodMatcher
[]
getStaticMethodsMatchers
();
/**
* 返回增强拦截器的实现<br/>
* 每个拦截器在同一个被增强类的内部,保持单例
*
* @return
*/
protected
abstract
String
getStaticMethodsInterceptor
();
private
static
ILog
logger
=
LogManager
.
getLogger
(
ClassEnhancePluginDefine
.
class
);
public
static
final
String
contextAttrName
=
"_$EnhancedClassInstanceContext"
;
@Override
protected
DynamicType
.
Builder
<?>
enhance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
newClassBuilder
=
this
.
enhanceClass
(
enhanceOriginClassName
,
newClassBuilder
);
newClassBuilder
=
this
.
enhanceInstance
(
enhanceOriginClassName
,
newClassBuilder
);
return
newClassBuilder
;
}
private
DynamicType
.
Builder
<?>
enhanceInstance
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
MethodMatcher
[]
methodMatchers
=
getInstanceMethodsMatchers
();
if
(
methodMatchers
==
null
)
{
return
newClassBuilder
;
}
/**
* alter class source code.<br/>
*
* new class need:<br/>
* 1.add field '_$EnhancedClassInstanceContext' of type
* EnhancedClassInstanceContext <br/>
*
* 2.intercept constructor by default, and intercept method which it's
* required by interceptorDefineClass. <br/>
*/
String
interceptor
=
getInstanceMethodsInterceptor
();
if
(
StringUtil
.
isEmpty
(
interceptor
))
{
throw
new
EnhanceException
(
"no InstanceMethodsAroundInterceptor define. "
);
}
newClassBuilder
=
newClassBuilder
.
defineField
(
contextAttrName
,
EnhancedClassInstanceContext
.
class
,
ACC_PRIVATE
).
constructor
(
any
()).
intercept
(
SuperMethodCall
.
INSTANCE
.
andThen
(
MethodDelegation
.
to
(
new
ClassConstructorInterceptor
(
interceptor
)).
appendParameterBinder
(
FieldProxy
.
Binder
.
install
(
FieldGetter
.
class
,
FieldSetter
.
class
))));
ClassInstanceMethodsInterceptor
classMethodInterceptor
=
new
ClassInstanceMethodsInterceptor
(
interceptor
);
StringBuilder
enhanceRules
=
new
StringBuilder
(
"\nprepare to enhance class ["
+
enhanceOriginClassName
+
"] instance methods as following rules:\n"
);
int
ruleIdx
=
1
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
enhanceRules
.
append
(
"\t"
+
ruleIdx
++
+
". "
+
methodMatcher
+
"\n"
);
}
logger
.
debug
(
enhanceRules
.
toString
());
ElementMatcher
.
Junction
<
MethodDescription
>
matcher
=
null
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
logger
.
debug
(
"enhance class {} instance methods by rule: {}"
,
enhanceOriginClassName
,
methodMatcher
);
if
(
matcher
==
null
)
{
matcher
=
methodMatcher
.
buildMatcher
();
continue
;
}
matcher
=
matcher
.
or
(
methodMatcher
.
buildMatcher
());
}
/**
* exclude static methods.
*/
matcher
=
matcher
.
and
(
not
(
ElementMatchers
.
isStatic
()));
newClassBuilder
=
newClassBuilder
.
method
(
matcher
).
intercept
(
MethodDelegation
.
to
(
classMethodInterceptor
));
return
newClassBuilder
;
}
/**
* 返回需要被增强的方法列表
*
* @return
*/
protected
abstract
MethodMatcher
[]
getInstanceMethodsMatchers
();
/**
* 返回增强拦截器的实现<br/>
* 每个拦截器在同一个被增强类的内部,保持单例
*
* @return
*/
protected
abstract
String
getInstanceMethodsInterceptor
();
private
DynamicType
.
Builder
<?>
enhanceClass
(
String
enhanceOriginClassName
,
DynamicType
.
Builder
<?>
newClassBuilder
)
throws
PluginException
{
MethodMatcher
[]
methodMatchers
=
getStaticMethodsMatchers
();
if
(
methodMatchers
==
null
)
{
return
newClassBuilder
;
}
String
interceptor
=
getStaticMethodsInterceptor
();
if
(
StringUtil
.
isEmpty
(
interceptor
))
{
throw
new
EnhanceException
(
"no StaticMethodsAroundInterceptor define. "
);
}
ClassStaticMethodsInterceptor
classMethodInterceptor
=
new
ClassStaticMethodsInterceptor
(
interceptor
);
StringBuilder
enhanceRules
=
new
StringBuilder
(
"\nprepare to enhance class ["
+
enhanceOriginClassName
+
"] static methods as following rules:\n"
);
int
ruleIdx
=
1
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
enhanceRules
.
append
(
"\t"
+
ruleIdx
++
+
". "
+
methodMatcher
+
"\n"
);
}
logger
.
debug
(
enhanceRules
.
toString
());
ElementMatcher
.
Junction
<
MethodDescription
>
matcher
=
null
;
for
(
MethodMatcher
methodMatcher
:
methodMatchers
)
{
logger
.
debug
(
"enhance class {} static methods by rule: {}"
,
enhanceOriginClassName
,
methodMatcher
);
if
(
matcher
==
null
)
{
matcher
=
methodMatcher
.
buildMatcher
();
continue
;
}
matcher
=
matcher
.
or
(
methodMatcher
.
buildMatcher
());
}
/**
* restrict static methods.
*/
matcher
=
matcher
.
and
(
ElementMatchers
.
isStatic
());
newClassBuilder
=
newClassBuilder
.
method
(
matcher
).
intercept
(
MethodDelegation
.
to
(
classMethodInterceptor
));
return
newClassBuilder
;
}
/**
* 返回需要被增强的方法列表
*
* @return
*/
protected
abstract
MethodMatcher
[]
getStaticMethodsMatchers
();
/**
* 返回增强拦截器的实现<br/>
* 每个拦截器在同一个被增强类的内部,保持单例
*
* @return
*/
protected
abstract
String
getStaticMethodsInterceptor
();
}
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassInstanceMethodsInterceptor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.interceptor.enhance
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
import
com.a.eye.skywalking.plugin.interceptor.loader.InterceptorInstanceLoader
;
import
net.bytebuddy.implementation.bind.annotation.*
;
...
...
@@ -15,7 +15,7 @@ import java.util.concurrent.Callable;
* @author wusheng
*/
public
class
ClassInstanceMethodsInterceptor
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
ClassInstanceMethodsInterceptor
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
ClassInstanceMethodsInterceptor
.
class
);
private
String
instanceMethodsAroundInterceptorClassName
;
...
...
@@ -34,7 +34,7 @@ public class ClassInstanceMethodsInterceptor {
try
{
interceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
result
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"class[{}] before method[{}] intercept failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
l
ogger
.
error
(
"class[{}] before method[{}] intercept failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
}
Object
ret
=
null
;
...
...
@@ -48,14 +48,14 @@ public class ClassInstanceMethodsInterceptor {
try
{
interceptor
.
handleMethodException
(
t
,
instanceContext
,
interceptorContext
);
}
catch
(
Throwable
t2
)
{
easyL
ogger
.
error
(
"class[{}] handle method[{}] exception failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t2
.
getMessage
()},
t2
);
l
ogger
.
error
(
"class[{}] handle method[{}] exception failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t2
.
getMessage
()},
t2
);
}
throw
t
;
}
finally
{
try
{
ret
=
interceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
ret
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"class[{}] after method[{}] intercept failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
l
ogger
.
error
(
"class[{}] after method[{}] intercept failue:{}"
,
new
Object
[]
{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
}
}
return
ret
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/ClassStaticMethodsInterceptor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.interceptor.enhance
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
com.a.eye.skywalking.plugin.interceptor.loader.InterceptorInstanceLoader
;
import
net.bytebuddy.implementation.bind.annotation.AllArguments
;
import
net.bytebuddy.implementation.bind.annotation.Origin
;
...
...
@@ -17,7 +17,7 @@ import java.util.concurrent.Callable;
* @author wusheng
*/
public
class
ClassStaticMethodsInterceptor
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
ClassStaticMethodsInterceptor
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
ClassStaticMethodsInterceptor
.
class
);
private
String
staticMethodsAroundInterceptorClassName
;
...
...
@@ -35,7 +35,7 @@ public class ClassStaticMethodsInterceptor {
try
{
interceptor
.
beforeMethod
(
interceptorContext
,
result
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"class[{}] before static method[{}] intercept failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t
.
getMessage
()},
t
);
l
ogger
.
error
(
"class[{}] before static method[{}] intercept failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t
.
getMessage
()},
t
);
}
...
...
@@ -50,14 +50,14 @@ public class ClassStaticMethodsInterceptor {
try
{
interceptor
.
handleMethodException
(
t
,
interceptorContext
);
}
catch
(
Throwable
t2
)
{
easyL
ogger
.
error
(
"class[{}] handle static method[{}] exception failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t2
.
getMessage
()},
t2
);
l
ogger
.
error
(
"class[{}] handle static method[{}] exception failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t2
.
getMessage
()},
t2
);
}
throw
t
;
}
finally
{
try
{
ret
=
interceptor
.
afterMethod
(
interceptorContext
,
ret
);
}
catch
(
Throwable
t
)
{
easyL
ogger
.
error
(
"class[{}] after static method[{}] intercept failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t
.
getMessage
()},
t
);
l
ogger
.
error
(
"class[{}] after static method[{}] intercept failue:{}"
,
new
Object
[]
{
clazz
,
method
.
getName
(),
t
.
getMessage
()},
t
);
}
}
return
ret
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/enhance/MethodInputAndOutParameterInterceptor.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.interceptor.enhance
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
import
net.bytebuddy.implementation.bind.annotation.AllArguments
;
import
net.bytebuddy.implementation.bind.annotation.Origin
;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.interceptor.loader
;
import
com.a.eye.skywalking.logging.
LogManager
;
import
com.a.eye.skywalking.logging.
EasyLog
ger
;
import
com.a.eye.skywalking.logging.
api.ILog
;
import
com.a.eye.skywalking.logging.
api.LogMana
ger
;
import
java.io.BufferedInputStream
;
import
java.io.ByteArrayOutputStream
;
...
...
@@ -16,7 +16,7 @@ import java.util.concurrent.locks.ReentrantLock;
* Created by wusheng on 16/8/2.
*/
public
class
InterceptorInstanceLoader
{
private
static
EasyLogger
easyL
ogger
=
LogManager
.
getLogger
(
InterceptorInstanceLoader
.
class
);
private
static
ILog
l
ogger
=
LogManager
.
getLogger
(
InterceptorInstanceLoader
.
class
);
private
static
ConcurrentHashMap
<
String
,
Object
>
INSTANCE_CACHE
=
new
ConcurrentHashMap
<>();
...
...
@@ -72,7 +72,7 @@ public class InterceptorInstanceLoader {
BufferedInputStream
is
=
null
;
ByteArrayOutputStream
baos
=
null
;
try
{
easyL
ogger
.
debug
(
"Read binary code of {} using classload {}"
,
className
,
InterceptorInstanceLoader
.
class
.
getClassLoader
());
l
ogger
.
debug
(
"Read binary code of {} using classload {}"
,
className
,
InterceptorInstanceLoader
.
class
.
getClassLoader
());
is
=
new
BufferedInputStream
(
InterceptorInstanceLoader
.
class
.
getResourceAsStream
(
path
));
baos
=
new
ByteArrayOutputStream
();
int
ch
=
0
;
...
...
@@ -81,7 +81,7 @@ public class InterceptorInstanceLoader {
}
data
=
baos
.
toByteArray
();
}
catch
(
IOException
e
)
{
easyL
ogger
.
error
(
e
.
getMessage
(),
e
);
l
ogger
.
error
(
e
.
getMessage
(),
e
);
}
finally
{
if
(
is
!=
null
)
try
{
...
...
@@ -105,7 +105,7 @@ public class InterceptorInstanceLoader {
}
}
defineClassMethod
.
setAccessible
(
true
);
easyL
ogger
.
debug
(
"load binary code of {} to classload {}"
,
className
,
targetClassLoader
);
l
ogger
.
debug
(
"load binary code of {} to classload {}"
,
className
,
targetClassLoader
);
Class
<?>
type
=
(
Class
<?>)
defineClassMethod
.
invoke
(
targetClassLoader
,
className
,
data
,
0
,
data
.
length
,
null
);
return
(
T
)
type
.
newInstance
();
}
...
...
skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/protocol/util/ContextGenerator.java
浏览文件 @
de32fce1
...
...
@@ -29,7 +29,7 @@ public final class ContextGenerator {
*/
public
static
Span
generateSpanFromContextData
(
ContextData
context
,
Identification
id
)
{
Span
spanData
=
CurrentThreadSpanStack
.
peek
();
if
(
context
!=
null
&&
!
StringUtil
.
isEmpty
(
context
.
getTraceId
())
&&
spanData
==
null
){
if
(
context
!=
null
&&
context
.
getTraceId
()
!=
null
&&
spanData
==
null
){
spanData
=
new
Span
(
context
.
getTraceId
(),
context
.
getParentLevel
(),
context
.
getLevelId
(),
Config
.
SkyWalking
.
APPLICATION_CODE
,
Config
.
SkyWalking
.
USER_ID
);
}
else
{
spanData
=
getSpanFromThreadLocal
();
...
...
skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/consumerworker/ConsumerWorkerTest.java
已删除
100644 → 0
浏览文件 @
c98b41b0
package
test.a.eye.cloud.consumerworker
;
import
com.a.eye.skywalking.buffer.BufferGroup
;
import
com.a.eye.skywalking.conf.Config
;
import
org.junit.Test
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
public
class
ConsumerWorkerTest
{
@Test
public
void
checkConsumerWorkerIsStartIfConsumerSizeIsZero
()
{
Config
.
Consumer
.
MAX_CONSUMER
=
0
;
BufferGroup
bufferGroup
=
new
BufferGroup
(
"testBufferGroup"
);
int
count
=
getConsumerWorkerThreadCount
();
assertEquals
(
Config
.
Consumer
.
MAX_CONSUMER
,
count
);
}
private
int
getConsumerWorkerThreadCount
()
{
ThreadGroup
group
=
Thread
.
currentThread
().
getThreadGroup
();
ThreadGroup
topGroup
=
group
;
while
(
group
!=
null
)
{
topGroup
=
group
;
group
=
group
.
getParent
();
}
int
activeCount
=
topGroup
.
activeCount
();
Thread
[]
threads
=
new
Thread
[
activeCount
];
topGroup
.
enumerate
(
threads
);
int
count
=
0
;
for
(
Thread
thread
:
threads
)
{
if
(
thread
!=
null
&&
"ConsumerWorker"
.
equals
(
thread
.
getName
()))
{
count
++;
}
}
return
count
;
}
}
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.dubbo
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
DubboBuriedPointType
implements
IBuriedPointType
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java
浏览文件 @
de32fce1
...
...
@@ -102,7 +102,7 @@ public class MonitorFilterInterceptor implements InstanceMethodsAroundIntercepto
private
boolean
isConsumer
(
EnhancedClassInstanceContext
context
)
{
return
(
b
oolean
)
context
.
get
(
"isConsumer"
);
return
(
B
oolean
)
context
.
get
(
"isConsumer"
);
}
private
void
dealException
(
Throwable
t
,
EnhancedClassInstanceContext
context
)
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.httpClient.v4
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
WebBuriedPointType
implements
IBuriedPointType
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.jdbc.define
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
JDBCBuriedPointType
implements
IBuriedPointType
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.jedis.v2
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
RedisBuriedPointType
implements
IBuriedPointType
{
private
static
RedisBuriedPointType
redisBuriedPointType
;
...
...
skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.motan
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
MotanBuriedPointType
implements
IBuriedPointType
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.tomcat78x
;
import
com.a.eye.skywalking.api.IBuriedPointType
;
import
com.a.eye.skywalking.protocol.common.CallType
;
public
class
WebBuriedPointType
implements
IBuriedPointType
{
...
...
skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/define/TomcatPluginDefine.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.plugin.tomcat78x.define
;
import
com.a.eye.skywalking.logging.LogManager
;
import
com.a.eye.skywalking.logging.EasyLogger
;
import
com.a.eye.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher
;
import
com.a.eye.skywalking.plugin.interceptor.MethodMatcher
;
import
com.a.eye.skywalking.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine
;
import
com.a.eye.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher
;
public
class
TomcatPluginDefine
extends
ClassInstanceMethodsEnhancePluginDefine
{
private
static
EasyLogger
easyLogger
=
LogManager
.
getLogger
(
TomcatPluginDefine
.
class
);
@Override
protected
MethodMatcher
[]
getInstanceMethodsMatchers
()
{
...
...
skywalking-sniffer/skywalking-test-api/pom.xml
浏览文件 @
de32fce1
...
...
@@ -21,7 +21,7 @@
<dependencies>
<dependency>
<groupId>
com.a.eye
</groupId>
<artifactId>
skywalking-
api
</artifactId>
<artifactId>
skywalking-
network
</artifactId>
<version>
${project.version}
</version>
</dependency>
...
...
skywalking-sniffer/skywalking-test-api/src/main/java/com/a/eye/skywalking/testframework/api/ContextPoolOperator.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.testframework.api
;
import
com.a.eye.skywalking.protocol.common.ISerializable
;
import
com.a.eye.skywalking.testframework.api.config.Config
;
import
java.lang.reflect.Field
;
...
...
@@ -9,13 +7,13 @@ import java.util.ArrayList;
import
java.util.List
;
public
class
ContextPoolOperator
{
public
static
List
<
ISerializable
>
acquireBufferData
()
{
List
<
ISerializable
>
resultSpan
=
new
ArrayList
<
ISerializable
>();
public
static
List
<
Object
>
acquireBufferData
()
{
List
<
Object
>
resultSpan
=
new
ArrayList
<
Object
>();
Object
[]
bufferGroupObjectArray
=
acquireBufferGroupObjectArrayByClassLoader
();
for
(
Object
bufferGroup
:
bufferGroupObjectArray
)
{
ISerializable
[]
spanList
=
acquireBufferData
(
bufferGroup
);
for
(
ISerializable
span
:
spanList
)
{
Object
[]
spanList
=
acquireBufferData
(
bufferGroup
);
for
(
Object
span
:
spanList
)
{
if
(
span
!=
null
)
{
resultSpan
.
add
(
span
);
}
...
...
@@ -29,19 +27,19 @@ public class ContextPoolOperator {
Object
[]
bufferGroupObjectArray
=
acquireBufferGroupObjectArrayByClassLoader
();
for
(
Object
bufferGroup
:
bufferGroupObjectArray
)
{
ISerializable
[]
spanList
=
acquireBufferData
(
bufferGroup
);
Object
[]
spanList
=
acquireBufferData
(
bufferGroup
);
for
(
int
i
=
0
;
i
<
spanList
.
length
;
i
++)
{
spanList
[
i
]
=
null
;
}
}
}
private
static
ISerializable
[]
acquireBufferData
(
Object
bufferGroup
)
{
private
static
Object
[]
acquireBufferData
(
Object
bufferGroup
)
{
try
{
Class
bufferGroupClass
=
Thread
.
currentThread
().
getContextClassLoader
().
loadClass
(
Config
.
BUFFER_GROUP_CLASS_NAME
);
Field
spanArrayField
=
bufferGroupClass
.
getDeclaredField
(
Config
.
SPAN_ARRAY_FIELD_NAME
);
spanArrayField
.
setAccessible
(
true
);
return
(
ISerializable
[])
spanArrayField
.
get
(
bufferGroup
);
return
(
Object
[])
spanArrayField
.
get
(
bufferGroup
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Failed to acquire span array"
,
e
);
}
...
...
skywalking-sniffer/skywalking-test-api/src/main/java/com/a/eye/skywalking/testframework/api/RequestSpanAssert.java
浏览文件 @
de32fce1
package
com.a.eye.skywalking.testframework.api
;
import
com.a.eye.skywalking.
protocol
.RequestSpan
;
import
com.a.eye.skywalking.
protocol.common.ISerializable
;
import
com.a.eye.skywalking.
network.grpc
.RequestSpan
;
import
com.a.eye.skywalking.
network.grpc.TraceId
;
import
com.a.eye.skywalking.testframework.api.exception.SpanDataNotEqualsException
;
import
com.a.eye.skywalking.testframework.api.exception.SpanDataFormatException
;
import
com.a.eye.skywalking.testframework.api.exception.TraceIdNotSameException
;
...
...
@@ -34,10 +34,10 @@ public class RequestSpanAssert {
}
private
static
List
<
RequestSpan
>
acquiredRequestSpanFromBuffer
()
{
List
<
ISerializable
>
spans
=
ContextPoolOperator
.
acquireBufferData
();
List
<
Object
>
spans
=
ContextPoolOperator
.
acquireBufferData
();
List
<
RequestSpan
>
result
=
new
ArrayList
<
RequestSpan
>();
for
(
ISerializable
span
:
spans
)
{
for
(
Object
span
:
spans
)
{
if
(
span
instanceof
RequestSpan
)
{
result
.
add
((
RequestSpan
)
span
);
}
...
...
@@ -116,14 +116,22 @@ public class RequestSpanAssert {
String
traceId
=
null
;
for
(
RequestSpan
span
:
traceSpanList
)
{
if
(
traceId
==
null
)
{
traceId
=
span
.
getTraceId
(
);
traceId
=
toLiteralLTraceId
(
span
.
getTraceId
()
);
}
if
(!
traceId
.
equals
(
span
.
getTraceId
(
)))
{
if
(!
traceId
.
equals
(
toLiteralLTraceId
(
span
.
getTraceId
()
)))
{
throw
new
TraceIdNotSameException
(
"trace id is not all the same.trace id :"
+
traceId
+
",Error trace id :"
+
span
.
getTraceId
());
}
}
}
private
static
String
toLiteralLTraceId
(
TraceId
traceId
){
StringBuilder
tid
=
new
StringBuilder
();
for
(
Long
segment
:
traceId
.
getSegmentsList
())
{
tid
.
append
(
segment
).
append
(
"."
);
}
return
tid
.
substring
(
0
,
tid
.
length
()
-
1
);
}
}
skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java
浏览文件 @
de32fce1
...
...
@@ -62,7 +62,7 @@ public class RequestSpanData extends AbstractSpanData {
}
public
String
getBusinessKey
()
{
return
requestSpan
.
getBus
s
inessKey
();
return
requestSpan
.
getBusinessKey
();
}
public
String
getCallType
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录