Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
2501c566
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2501c566
编写于
7月 02, 2016
作者:
A
ascrutae
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.将Context修改成List实现
2. 将RPC Client的序号作为 RPC Server的父级序号 3. 如果存在RPC调用包含其他调用,其他调用的埋点信息将不发送
上级
d7fc6c62
变更
16
显示空白变更内容
内联
并排
Showing
16 changed file
with
637 addition
and
468 deletion
+637
-468
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java
...d/skywalking/buriedpoint/ApplicationExceptionHandler.java
+0
-46
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/BuriedPointInvoker.java
...m/ai/cloud/skywalking/buriedpoint/BuriedPointInvoker.java
+90
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
.../cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
+18
-48
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
.../cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
+34
-47
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java
...ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java
+49
-1
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
...cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
+42
-55
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
...kywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
+17
-35
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Context.java
...rc/main/java/com/ai/cloud/skywalking/context/Context.java
+34
-7
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/ContextData.java
.../main/java/com/ai/cloud/skywalking/model/ContextData.java
+7
-1
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/Identification.java
...in/java/com/ai/cloud/skywalking/model/Identification.java
+4
-4
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ContextGenerator.java
...n/java/com/ai/cloud/skywalking/util/ContextGenerator.java
+12
-1
skywalking-collector/skywalking-api/src/test/java/test/ai/cloud/list/ArrayListTest.java
...g-api/src/test/java/test/ai/cloud/list/ArrayListTest.java
+36
-0
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/exception/SpanTypeCannotConvertException.java
.../skywalking/exception/SpanTypeCannotConvertException.java
+7
-0
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java
.../src/main/java/com/ai/cloud/skywalking/protocol/Span.java
+233
-212
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java
.../main/java/com/ai/cloud/skywalking/protocol/SpanData.java
+22
-11
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanType.java
.../main/java/com/ai/cloud/skywalking/protocol/SpanType.java
+32
-0
未找到文件。
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java
已删除
100644 → 0
浏览文件 @
d7fc6c62
package
com.ai.cloud.skywalking.buriedpoint
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
BuriedPoint
.
EXCLUSIVE_EXCEPTIONS
;
import
java.util.HashSet
;
import
java.util.Set
;
import
com.ai.cloud.skywalking.api.IExceptionHandler
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.protocol.Span
;
public
class
ApplicationExceptionHandler
implements
IExceptionHandler
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ApplicationExceptionHandler
.
class
);
private
static
String
EXCEPTION_SPLIT
=
","
;
private
static
Set
<
String
>
exclusiveExceptionSet
=
null
;
@Override
public
void
handleException
(
Throwable
th
)
{
try
{
if
(
exclusiveExceptionSet
==
null
)
{
Set
<
String
>
exclusiveExceptions
=
new
HashSet
<
String
>();
String
[]
exceptions
=
EXCLUSIVE_EXCEPTIONS
.
split
(
EXCEPTION_SPLIT
);
for
(
String
exception
:
exceptions
)
{
exclusiveExceptions
.
add
(
exception
);
}
exclusiveExceptionSet
=
exclusiveExceptions
;
}
Span
span
=
Context
.
getLastSpan
();
span
.
handleException
(
th
,
exclusiveExceptionSet
,
Config
.
BuriedPoint
.
MAX_EXCEPTION_STACK_LENGTH
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/BuriedPointInvoker.java
0 → 100644
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
java.util.HashSet
;
import
java.util.Set
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
BuriedPoint
.
EXCLUSIVE_EXCEPTIONS
;
public
class
BuriedPointInvoker
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
BuriedPointInvoker
.
class
);
private
static
String
EXCEPTION_SPLIT
=
","
;
private
static
Set
<
String
>
exclusiveExceptionSet
=
null
;
public
ContextData
beforeInvoker
(
Span
spanData
)
{
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"TraceId:"
+
spanData
.
getTraceId
()
+
"\tviewpointId:"
+
spanData
.
getViewPointId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
());
}
// 将新创建的Context存放到ThreadLocal栈中。
Context
.
append
(
spanData
);
// 并将当前的Context返回回去
return
new
ContextData
(
spanData
);
}
public
void
afterInvoker
()
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
;
// 弹出上下文的栈顶中的元素
Span
spanData
=
Context
.
removeLastSpan
();
if
(
spanData
==
null
||
spanData
.
isInvalidate
())
{
return
;
}
// 加上花费时间
spanData
.
setCost
(
System
.
currentTimeMillis
()
-
spanData
.
getStartDate
());
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"TraceId:"
+
spanData
.
getTraceId
()
+
"\tviewpointId:"
+
spanData
.
getViewPointId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
()
+
"\tbusinessKey:"
+
spanData
.
getBusinessKey
());
}
ContextBuffer
.
save
(
spanData
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
}
public
void
handleException
(
Throwable
th
)
{
try
{
if
(
exclusiveExceptionSet
==
null
)
{
Set
<
String
>
exclusiveExceptions
=
new
HashSet
<
String
>();
String
[]
exceptions
=
EXCLUSIVE_EXCEPTIONS
.
split
(
EXCEPTION_SPLIT
);
for
(
String
exception
:
exceptions
)
{
exclusiveExceptions
.
add
(
exception
);
}
exclusiveExceptionSet
=
exclusiveExceptions
;
}
Span
span
=
Context
.
getLastSpan
();
span
.
handleException
(
th
,
exclusiveExceptionSet
,
Config
.
BuriedPoint
.
MAX_EXCEPTION_STACK_LENGTH
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
...
...
@@ -13,7 +10,7 @@ import com.ai.cloud.skywalking.model.Identification;
import
com.ai.cloud.skywalking.protocol.Span
;
import
com.ai.cloud.skywalking.util.ContextGenerator
;
public
class
LocalBuriedPointSender
extends
ApplicationExceptionHandl
er
public
class
LocalBuriedPointSender
extends
BuriedPointInvok
er
implements
IBuriedPointSender
{
private
static
Logger
logger
=
LogManager
...
...
@@ -25,10 +22,8 @@ public class LocalBuriedPointSender extends ApplicationExceptionHandler
return
new
EmptyContextData
();
Span
spanData
=
ContextGenerator
.
generateSpanFromThreadLocal
(
id
);
// 将新创建的Context存放到ThreadLocal栈中。
Context
.
append
(
spanData
);
// 并将当前的Context返回回去
return
new
ContextData
(
spanData
);
return
super
.
beforeInvoker
(
spanData
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
return
new
EmptyContextData
();
...
...
@@ -36,31 +31,6 @@ public class LocalBuriedPointSender extends ApplicationExceptionHandler
}
public
void
afterSend
()
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
;
// 弹出上下文的栈顶中的元素
Span
spanData
=
Context
.
removeLastSpan
();
if
(
spanData
==
null
)
{
return
;
}
// 加上花费时间
spanData
.
setCost
(
System
.
currentTimeMillis
()
-
spanData
.
getStartDate
());
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"TraceId:"
+
spanData
.
getTraceId
()
+
"\tviewpointId:"
+
spanData
.
getViewPointId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
()
+
"\tbusinessKey:"
+
spanData
.
getBusinessKey
());
}
ContextBuffer
.
save
(
spanData
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
super
.
afterInvoker
();
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
import
com.ai.cloud.skywalking.api.IBuriedPointReceiver
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
com.ai.cloud.skywalking.protocol.SpanType
;
import
com.ai.cloud.skywalking.util.ContextGenerator
;
public
class
RPCBuriedPointReceiver
extends
ApplicationExceptionHandl
er
public
class
RPCBuriedPointReceiver
extends
BuriedPointInvok
er
implements
IBuriedPointReceiver
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
RPCBuriedPointReceiver
.
class
);
public
void
afterReceived
()
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
;
// 获取上下文的栈顶中的元素
Span
spanData
=
Context
.
removeLastSpan
();
// 填上必要信息
spanData
.
setCost
(
System
.
currentTimeMillis
()
-
spanData
.
getStartDate
());
// 存放到本地发送进程中
ContextBuffer
.
save
(
spanData
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
super
.
afterInvoker
();
}
public
void
beforeReceived
(
ContextData
context
,
Identification
id
)
{
...
...
@@ -43,18 +29,19 @@ public class RPCBuriedPointReceiver extends ApplicationExceptionHandler
Span
spanData
=
ContextGenerator
.
generateSpanFromContextData
(
context
,
id
);
// 设置是否为接收端
spanData
.
setReceiver
(
true
);
spanData
.
setSpanType
(
SpanType
.
RPC_SERVER
);
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"TraceId:"
+
spanData
.
getTraceId
()
+
"\tviewpointId:"
+
spanData
.
getViewPointId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
());
}
invalidateAllSpanIfIsNotFirstSpan
(
spanData
);
Context
.
append
(
spanData
);
super
.
beforeInvoker
(
spanData
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
}
}
private
void
invalidateAllSpanIfIsNotFirstSpan
(
Span
spanData
)
{
if
(!
Context
.
getLastSpan
().
getTraceId
().
equals
(
spanData
.
getTraceId
()))
{
Context
.
invalidateAllSpan
();
}
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
public
class
RPCBuriedPointSender
extends
LocalBuriedPointSender
{}
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.EmptyContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
com.ai.cloud.skywalking.protocol.SpanType
;
import
com.ai.cloud.skywalking.util.ContextGenerator
;
public
class
RPCBuriedPointSender
extends
BuriedPointInvoker
implements
IBuriedPointSender
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
RPCBuriedPointSender
.
class
);
@Override
public
ContextData
beforeSend
(
Identification
id
)
{
try
{
if
(!
AuthDesc
.
isAuth
())
return
new
EmptyContextData
();
Span
spanData
=
ContextGenerator
.
generateSpanFromThreadLocal
(
id
);
//设置SpanType的类型
spanData
.
setSpanType
(
SpanType
.
RPC_CLIENT
);
Context
.
append
(
spanData
);
return
new
ContextData
(
spanData
.
getTraceId
(),
generateSubParentLevelId
(
spanData
),
spanData
.
getCallType
());
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
.
getMessage
(),
t
);
return
new
EmptyContextData
();
}
}
private
String
generateSubParentLevelId
(
Span
spanData
)
{
if
(
spanData
.
getParentLevel
()
==
null
)
{
return
spanData
.
getLevelId
()
+
""
;
}
return
spanData
.
getParentLevel
()
+
"."
+
spanData
.
getLevelId
();
}
@Override
public
void
afterSend
()
{
super
.
afterInvoker
();
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
...
...
@@ -18,10 +17,9 @@ import com.ai.cloud.skywalking.util.TraceIdGenerator;
* 暂不确定多线程的实现方式
*
* @author wusheng
*
*/
@Deprecated
public
class
ThreadBuriedPointSender
extends
ApplicationExceptionHandl
er
public
class
ThreadBuriedPointSender
extends
BuriedPointInvok
er
implements
IBuriedPointSender
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ThreadBuriedPointSender
.
class
);
...
...
@@ -65,18 +63,7 @@ public class ThreadBuriedPointSender extends ApplicationExceptionHandler
}
public
void
afterSend
()
{
Span
span
=
Context
.
removeLastSpan
();
if
(
span
==
null
)
{
return
;
}
// 填上必要信息
span
.
setCost
(
System
.
currentTimeMillis
()
-
span
.
getStartDate
());
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"viewpointId:"
+
span
.
getViewPointId
()
+
"\tParentLevelId:"
+
span
.
getParentLevel
()
+
"\tLevelId:"
+
span
.
getLevelId
());
}
ContextBuffer
.
save
(
span
);
super
.
afterInvoker
();
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.buriedpoint
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
...
...
@@ -17,10 +15,9 @@ import com.ai.cloud.skywalking.util.ContextGenerator;
* 暂不确定多线程的实现方式
*
* @author wusheng
*
*/
@Deprecated
public
class
ThreadFactoryBuriedPointSender
extends
ApplicationExceptionHandl
er
public
class
ThreadFactoryBuriedPointSender
extends
BuriedPointInvok
er
implements
IBuriedPointSender
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ThreadBuriedPointSender
.
class
);
...
...
@@ -37,21 +34,6 @@ public class ThreadFactoryBuriedPointSender extends ApplicationExceptionHandler
}
public
void
afterSend
()
{
if
(!
AuthDesc
.
isAuth
())
return
;
// 获取上下文的栈顶中的元素
Span
spanData
=
Context
.
removeLastSpan
();
if
(
spanData
==
null
)
{
return
;
}
// 填上必要信息
spanData
.
setCost
(
System
.
currentTimeMillis
()
-
spanData
.
getStartDate
());
if
(
Config
.
BuriedPoint
.
PRINTF
)
{
logger
.
debug
(
"viewpointId:"
+
spanData
.
getViewPointId
()
+
"\tParentLevelId:"
+
spanData
.
getParentLevel
()
+
"\tLevelId:"
+
spanData
.
getLevelId
());
}
ContextBuffer
.
save
(
spanData
);
super
.
afterInvoker
();
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Context.java
浏览文件 @
2501c566
...
...
@@ -2,7 +2,8 @@ package com.ai.cloud.skywalking.context;
import
com.ai.cloud.skywalking.protocol.Span
;
import
java.util.Stack
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Context
{
private
static
ThreadLocal
<
SpanNodeStack
>
nodes
=
new
ThreadLocal
<
SpanNodeStack
>();
...
...
@@ -32,22 +33,30 @@ public class Context {
return
nodes
.
get
().
pop
();
}
public
static
void
invalidateAllSpan
()
{
if
(
nodes
.
get
()
==
null
)
{
nodes
.
set
(
new
SpanNodeStack
());
}
nodes
.
get
().
invalidateAllCurrentSpan
();
}
static
class
SpanNodeStack
{
private
Stack
<
SpanNode
>
spans
=
new
Stack
<
SpanNode
>();
private
List
<
SpanNode
>
spans
=
new
ArrayList
<
SpanNode
>();
public
Span
pop
()
{
Span
span
=
spans
.
pop
().
getData
();
Span
span
=
listPop
();
if
(!
isEmpty
())
{
spans
.
p
eek
().
incrementNextSubSpanLevelId
();
listP
eek
().
incrementNextSubSpanLevelId
();
}
return
span
;
}
public
void
push
(
Span
span
)
{
if
(!
isEmpty
())
{
spans
.
push
(
new
SpanNode
(
span
,
spans
.
p
eek
().
getNextSubSpanLevelId
()));
listPush
(
new
SpanNode
(
span
,
listP
eek
().
getNextSubSpanLevelId
()));
}
else
{
spans
.
p
ush
(
new
SpanNode
(
span
));
listP
ush
(
new
SpanNode
(
span
));
}
}
...
...
@@ -56,12 +65,30 @@ public class Context {
if
(
spans
.
isEmpty
())
{
return
null
;
}
return
spans
.
p
eek
().
getData
();
return
listP
eek
().
getData
();
}
public
boolean
isEmpty
()
{
return
spans
.
isEmpty
();
}
private
Span
listPop
()
{
return
spans
.
remove
(
spans
.
size
()
-
1
).
getData
();
}
private
SpanNode
listPeek
()
{
return
spans
.
get
(
spans
.
size
()
-
1
);
}
private
void
listPush
(
SpanNode
spanNode
)
{
spans
.
add
(
spans
.
size
(),
spanNode
);
}
public
void
invalidateAllCurrentSpan
()
{
for
(
SpanNode
spanNode
:
spans
)
{
spanNode
.
getData
().
setIsInvalidate
(
true
);
}
}
}
static
class
SpanNode
{
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/ContextData.java
浏览文件 @
2501c566
...
...
@@ -13,11 +13,17 @@ public class ContextData {
}
public
ContextData
(
String
traceId
,
String
parentLevel
,
String
spanType
)
{
this
.
traceId
=
traceId
;
this
.
parentLevel
=
parentLevel
;
this
.
spanType
=
spanType
;
}
public
ContextData
(
Span
span
)
{
this
.
traceId
=
span
.
getTraceId
();
this
.
parentLevel
=
span
.
getParentLevel
();
this
.
levelId
=
span
.
getLevelId
();
this
.
spanType
=
span
.
getSpanType
();
this
.
spanType
=
span
.
getSpanType
Desc
();
}
public
ContextData
(
String
contextDataStr
)
{
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/Identification.java
浏览文件 @
2501c566
...
...
@@ -6,7 +6,7 @@ import com.ai.cloud.skywalking.util.StringUtil;
public
class
Identification
{
private
String
viewPoint
;
private
String
businessKey
;
private
String
spanType
;
private
String
spanType
Desc
;
private
String
callType
;
public
Identification
()
{
...
...
@@ -21,8 +21,8 @@ public class Identification {
return
businessKey
;
}
public
String
getSpanType
()
{
return
spanType
;
public
String
getSpanType
Desc
()
{
return
spanType
Desc
;
}
public
String
getCallType
()
{
...
...
@@ -58,7 +58,7 @@ public class Identification {
if
(
StringUtil
.
isEmpty
(
spanType
.
getTypeName
()))
{
throw
new
IllegalArgumentException
(
"Span Type name cannot be null"
);
}
sendData
.
spanType
=
spanType
.
getTypeName
();
sendData
.
spanType
Desc
=
spanType
.
getTypeName
();
sendData
.
callType
=
spanType
.
getCallType
().
toString
();
return
this
;
}
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ContextGenerator.java
浏览文件 @
2501c566
...
...
@@ -5,6 +5,7 @@ import com.ai.cloud.skywalking.context.Context;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
com.ai.cloud.skywalking.protocol.SpanType
;
public
final
class
ContextGenerator
{
/**
...
...
@@ -42,7 +43,7 @@ public final class ContextGenerator {
}
private
static
void
initNewSpanData
(
Span
spanData
,
Identification
id
)
{
spanData
.
setSpanType
(
id
.
getSpanType
());
spanData
.
setSpanType
Desc
(
id
.
getSpanTypeDesc
());
spanData
.
setViewPointId
(
id
.
getViewPoint
());
spanData
.
setBusinessKey
(
id
.
getBusinessKey
());
//FIX Add Call Type field
...
...
@@ -62,10 +63,20 @@ public final class ContextGenerator {
// 不存在,新创建一个Context
span
=
new
Span
(
TraceIdGenerator
.
generate
(),
Config
.
SkyWalking
.
APPLICATION_CODE
,
Config
.
SkyWalking
.
USER_ID
);
}
else
{
// 根据ParentContextData的TraceId和RPCID
// LevelId是由SpanNode类的nextSubSpanLevelId字段进行初始化的.
// 所以在这里不需要初始化
span
=
new
Span
(
parentSpan
.
getTraceId
(),
Config
.
SkyWalking
.
APPLICATION_CODE
,
Config
.
SkyWalking
.
USER_ID
);
// check parent span is RPC span
// if true, current span is invalidate and current span also belong to RPC span
if
(
parentSpan
.
isRPCClientSpan
())
{
span
.
setSpanType
(
SpanType
.
RPC_CLIENT
);
span
.
setIsInvalidate
(
true
);
}
if
(!
StringUtil
.
isEmpty
(
parentSpan
.
getParentLevel
()))
{
span
.
setParentLevel
(
parentSpan
.
getParentLevel
()
+
"."
+
parentSpan
.
getLevelId
());
}
else
{
...
...
skywalking-collector/skywalking-api/src/test/java/test/ai/cloud/list/ArrayListTest.java
0 → 100644
浏览文件 @
2501c566
package
test.ai.cloud.list
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
/**
* Created by xin on 16-7-2.
*/
public
class
ArrayListTest
{
private
List
<
String
>
data
=
new
ArrayList
<>();
@Before
public
void
initData
()
{
data
.
add
(
"AAAA"
);
data
.
add
(
"AAAAB"
);
data
.
add
(
"AAAAB"
);
data
.
add
(
"AAAAB"
);
}
@Test
public
void
testPop
()
{
data
.
remove
(
data
.
size
()
-
1
);
assertEquals
(
data
.
size
(),
3
);
}
@Test
public
void
testPush
()
{
data
.
add
(
data
.
size
(),
"BBBBB"
);
assertEquals
(
data
.
get
(
data
.
size
()
-
1
),
"BBBBB"
);
}
}
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/exception/SpanTypeCannotConvertException.java
0 → 100644
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.exception
;
public
class
SpanTypeCannotConvertException
extends
RuntimeException
{
public
SpanTypeCannotConvertException
(
String
spanTypeValue
)
{
super
(
"Can not convert SpanTypeValue["
+
spanTypeValue
+
"]"
);
}
}
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java
浏览文件 @
2501c566
...
...
@@ -70,10 +70,10 @@ public class Span extends SpanData {
NEW_LINE_PLACEHOLDER
,
OS_NEW_LINE
);
break
;
case
9
:
spanType
=
fieldValues
[
9
];
spanTypeDesc
=
fieldValues
[
9
];
break
;
case
10
:
isReceiver
=
Boolean
.
valueOf
(
fieldValues
[
10
]);
spanType
=
SpanType
.
convert
(
fieldValues
[
10
]);
break
;
case
11
:
businessKey
=
fieldValues
[
11
].
trim
().
replaceAll
(
...
...
@@ -115,7 +115,7 @@ public class Span extends SpanData {
toStringValue
.
append
(
levelId
+
SPAN_FIELD_SEPARATOR
);
if
(
isNonBlank
(
viewPointId
))
{
toStringValue
.
append
(
viewPointId
+
SPAN_FIELD_SEPARATOR
);
toStringValue
.
append
(
generateViewPointBySpanType
()
+
SPAN_FIELD_SEPARATOR
);
}
else
{
toStringValue
.
append
(
" "
+
SPAN_FIELD_SEPARATOR
);
}
...
...
@@ -143,8 +143,8 @@ public class Span extends SpanData {
toStringValue
.
append
(
" "
+
SPAN_FIELD_SEPARATOR
);
}
toStringValue
.
append
(
spanType
+
SPAN_FIELD_SEPARATOR
);
toStringValue
.
append
(
isReceiver
+
SPAN_FIELD_SEPARATOR
);
toStringValue
.
append
(
spanTypeDesc
+
SPAN_FIELD_SEPARATOR
);
toStringValue
.
append
(
spanType
.
getValue
()
+
SPAN_FIELD_SEPARATOR
);
if
(
isNonBlank
(
businessKey
))
{
// 换行符在各个系统中表现不一致,
...
...
@@ -181,6 +181,16 @@ public class Span extends SpanData {
return
toStringValue
.
toString
();
}
private
String
generateViewPointBySpanType
()
{
if
(
spanType
==
SpanType
.
RPC_CLIENT
)
{
viewPointId
=
"RPC Client : "
+
viewPointId
;
}
else
if
(
spanType
==
SpanType
.
RPC_SERVER
)
{
viewPointId
=
"RPC Server : "
+
viewPointId
;
}
return
viewPointId
;
}
protected
boolean
isNonBlank
(
String
str
)
{
return
str
!=
null
&&
str
.
length
()
>
0
;
}
...
...
@@ -209,7 +219,7 @@ public class Span extends SpanData {
}
int
sublength
=
maxExceptionStackLength
;
if
(
maxExceptionStackLength
>
expMessage
.
length
())
{
if
(
maxExceptionStackLength
>
expMessage
.
length
())
{
sublength
=
expMessage
.
length
();
}
...
...
@@ -220,4 +230,15 @@ public class Span extends SpanData {
}
}
public
boolean
isRPCClientSpan
()
{
if
(
this
.
spanType
==
SpanType
.
RPC_CLIENT
)
{
return
true
;
}
else
{
return
false
;
}
}
public
void
setIsInvalidate
(
boolean
isInvalidate
)
{
this
.
isInvalidate
=
isInvalidate
;
}
}
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java
浏览文件 @
2501c566
...
...
@@ -67,17 +67,24 @@ public abstract class SpanData {
* 已字符串的形式描述<br/>
* 如:java,dubbo等
*/
protected
String
spanType
=
""
;
protected
String
spanType
Desc
=
""
;
/**
* 节点调用类型描述<br/>
* @see com.ai.cloud.skywalking.protocol.CallType
*/
protected
String
callType
=
""
;
/**
* 节点的状态<br/>
* 不参与序列化
*/
protected
boolean
isInvalidate
=
false
;
/**
* 节点分布式类型<br/>
*
服务端/
客户端
*
本地调用 / RPC服务端 / RPC
客户端
*/
protected
boolean
isReceiver
=
false
;
protected
SpanType
spanType
=
SpanType
.
LOCAL
;
/**
* 节点调用过程中的业务字段<br/>
* 如:业务系统设置的订单号,SQL语句等
...
...
@@ -147,20 +154,24 @@ public abstract class SpanData {
this
.
address
=
address
;
}
public
String
getSpanType
()
{
return
spanType
;
public
String
getSpanType
Desc
()
{
return
spanType
Desc
;
}
public
void
setSpanType
(
String
spanType
)
{
this
.
spanType
=
spanType
;
public
void
setSpanType
Desc
(
String
spanTypeDesc
)
{
this
.
spanType
Desc
=
spanTypeDesc
;
}
public
boolean
isReceiver
()
{
return
isReceiver
;
public
SpanType
getSpanType
()
{
return
spanType
;
}
public
void
setSpanType
(
SpanType
spanType
)
{
this
.
spanType
=
spanType
;
}
public
void
setReceiver
(
boolean
receiver
)
{
isReceiver
=
receiver
;
public
boolean
isInvalidate
(
)
{
return
isInvalidate
;
}
public
void
setBusinessKey
(
String
businessKey
)
{
...
...
skywalking-collector/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanType.java
0 → 100644
浏览文件 @
2501c566
package
com.ai.cloud.skywalking.protocol
;
import
com.ai.cloud.skywalking.exception.SpanTypeCannotConvertException
;
/**
* Created by xin on 16-7-2.
*/
public
enum
SpanType
{
LOCAL
((
byte
)
1
),
RPC_CLIENT
((
byte
)
2
),
RPC_SERVER
((
byte
)
4
);
private
byte
value
;
SpanType
(
byte
value
)
{
this
.
value
=
value
;
}
static
SpanType
convert
(
String
spanTypeValue
)
{
switch
(
Byte
.
valueOf
(
spanTypeValue
)){
case
1
:
return
LOCAL
;
case
2
:
return
RPC_CLIENT
;
case
3
:
return
RPC_SERVER
;
default
:
throw
new
SpanTypeCannotConvertException
(
spanTypeValue
);
}
}
public
byte
getValue
()
{
return
value
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录