Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿信在这里
SkyWalking
提交
83f8714f
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,发现更多精彩内容 >>
提交
83f8714f
编写于
10月 15, 2017
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Finish the prototype codes.
上级
d8e21adc
变更
19
显示空白变更内容
内联
并排
Showing
19 changed file
with
335 addition
and
34 deletion
+335
-34
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java
...walking/apm/agent/core/conf/SnifferConfigInitializer.java
+7
-10
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginBootstrap.java
...org/skywalking/apm/agent/core/plugin/PluginBootstrap.java
+6
-4
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginResourcesResolver.java
...alking/apm/agent/core/plugin/PluginResourcesResolver.java
+4
-3
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java
...ent/core/plugin/interceptor/enhance/ConstructorInter.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInter.java
...ent/core/plugin/interceptor/enhance/InstMethodsInter.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java
...interceptor/enhance/InstMethodsInterWithOverrideArgs.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInter.java
...t/core/plugin/interceptor/enhance/StaticMethodsInter.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInterWithOverrideArgs.java
...terceptor/enhance/StaticMethodsInterWithOverrideArgs.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/AgentClassLoader.java
...alking/apm/agent/core/plugin/loader/AgentClassLoader.java
+226
-0
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java
...m/agent/core/plugin/loader/InterceptorInstanceLoader.java
+49
-1
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/NotImplementationException.java
.../agent/core/plugin/loader/NotImplementationException.java
+25
-0
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java
.../skywalking/apm/agent/core/remote/GRPCChannelManager.java
+4
-2
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/sampling/SamplingService.java
...g/skywalking/apm/agent/core/sampling/SamplingService.java
+1
-1
apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/apm/plugin/jedis/v2/RedisMethodMatch.java
.../org/skywalking/apm/plugin/jedis/v2/RedisMethodMatch.java
+1
-1
apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/src/main/java/org/skywalking/apm/plugin/sjdbc/ExecuteEventListener.java
...org/skywalking/apm/plugin/sjdbc/ExecuteEventListener.java
+2
-2
apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java
...lugin/spring/resttemplate/async/FutureGetInterceptor.java
+1
-1
apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
.../async/define/ResponseExtractorFutureInstrumentation.java
+2
-2
apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/spymemcached/v2/define/MemcachedInstrumentation.java
...ugin/spymemcached/v2/define/MemcachedInstrumentation.java
+1
-1
apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/skywalking/apm/toolkit/activation/trace/TraceContextInterceptor.java
...apm/toolkit/activation/trace/TraceContextInterceptor.java
+1
-1
未找到文件。
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java
浏览文件 @
83f8714f
...
...
@@ -42,16 +42,13 @@ public class SnifferConfigInitializer {
private
static
String
ENV_KEY_PREFIX
=
"skywalking."
;
/**
* Try to locate config file, named {@link #CONFIG_FILE_NAME}, in following order:
* 1. Path from SystemProperty. {@link #overrideConfigBySystemEnv()}
* 2. class path.
* 3. Path, where agent is. {@link #loadConfigFromAgentFolder()}
* <p>
* If no found in any path, agent is still going to run in default config, {@link Config},
* but in initialization steps, these following configs must be set, by config file or system properties:
* <p>
* 1. applicationCode. "-DapplicationCode=" or {@link Config.Agent#APPLICATION_CODE}
* 2. servers. "-Dservers=" or {@link Config.Collector#SERVERS}
* Try to locate `agent.config`, which should be in the /config dictionary of agent package.
*
* Also try to override the config by system.env and system.properties. All the keys in these two places should
* start with {@link #ENV_KEY_PREFIX}. e.g. in env `skywalking.agent.application_code=yourAppName` to override
* `agent.application_code` in config file.
*
* At the end, `agent.application_code` and `collector.servers` must be not blank.
*/
public
static
void
initialize
()
throws
ConfigNotFoundException
,
AgentPackageNotFoundException
{
InputStream
configFileStream
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginBootstrap.java
浏览文件 @
83f8714f
...
...
@@ -22,8 +22,7 @@ import java.net.URL;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException
;
import
org.skywalking.apm.agent.core.boot.AgentPackagePath
;
import
org.skywalking.apm.agent.core.plugin.loader.PluginClassLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.AgentClassLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
@@ -43,7 +42,7 @@ public class PluginBootstrap {
* @return plugin definition list.
*/
public
List
<
AbstractClassEnhancePluginDefine
>
loadPlugins
()
throws
AgentPackageNotFoundException
{
PluginClassLoader
.
initAndGet
(
AgentPackagePath
.
getPath
()
);
AgentClassLoader
.
initDefaultLoader
(
);
PluginResourcesResolver
resolver
=
new
PluginResourcesResolver
();
List
<
URL
>
resources
=
resolver
.
getResources
();
...
...
@@ -68,7 +67,10 @@ public class PluginBootstrap {
try
{
logger
.
debug
(
"loading plugin class {}."
,
pluginDefine
.
getDefineClass
());
AbstractClassEnhancePluginDefine
plugin
=
(
AbstractClassEnhancePluginDefine
)
Class
.
forName
(
pluginDefine
.
getDefineClass
()).
newInstance
();
(
AbstractClassEnhancePluginDefine
)
Class
.
forName
(
pluginDefine
.
getDefineClass
(),
true
,
AgentClassLoader
.
getDefault
())
.
newInstance
();
plugins
.
add
(
plugin
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
t
,
"load plugin [{}] failure."
,
pluginDefine
.
getDefineClass
());
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginResourcesResolver.java
浏览文件 @
83f8714f
...
...
@@ -23,6 +23,7 @@ import java.net.URL;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
import
org.skywalking.apm.agent.core.plugin.loader.AgentClassLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
@@ -39,7 +40,7 @@ public class PluginResourcesResolver {
List
<
URL
>
cfgUrlPaths
=
new
ArrayList
<
URL
>();
Enumeration
<
URL
>
urls
;
try
{
urls
=
getDefaultClassLoader
().
getResources
(
"skywalking-plugin.def"
);
urls
=
AgentClassLoader
.
getDefault
().
getResources
(
"skywalking-plugin.def"
);
while
(
urls
.
hasMoreElements
())
{
URL
pluginUrl
=
urls
.
nextElement
();
...
...
@@ -56,8 +57,8 @@ public class PluginResourcesResolver {
/**
* Get the classloader.
* First get current thread's classloader,
* if fail, get {@link PluginResourcesResolver}'s classloader.
* First get
Default
current thread's classloader,
* if fail, get
Default
{@link PluginResourcesResolver}'s classloader.
*
* @return the classloader to find plugin definitions.
*/
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java
浏览文件 @
83f8714f
...
...
@@ -22,7 +22,7 @@ import net.bytebuddy.implementation.bind.annotation.AllArguments;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
net.bytebuddy.implementation.bind.annotation.This
;
import
org.skywalking.apm.agent.core.plugin.PluginException
;
import
org.skywalking.apm.agent.core.plugin.
interceptor.
loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInter.java
浏览文件 @
83f8714f
...
...
@@ -26,7 +26,7 @@ import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import
net.bytebuddy.implementation.bind.annotation.SuperCall
;
import
net.bytebuddy.implementation.bind.annotation.This
;
import
org.skywalking.apm.agent.core.plugin.PluginException
;
import
org.skywalking.apm.agent.core.plugin.
interceptor.
loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java
浏览文件 @
83f8714f
...
...
@@ -25,7 +25,7 @@ import net.bytebuddy.implementation.bind.annotation.Origin;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
net.bytebuddy.implementation.bind.annotation.This
;
import
org.skywalking.apm.agent.core.plugin.PluginException
;
import
org.skywalking.apm.agent.core.plugin.
interceptor.
loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInter.java
浏览文件 @
83f8714f
...
...
@@ -24,7 +24,7 @@ import net.bytebuddy.implementation.bind.annotation.AllArguments;
import
net.bytebuddy.implementation.bind.annotation.Origin
;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
net.bytebuddy.implementation.bind.annotation.SuperCall
;
import
org.skywalking.apm.agent.core.plugin.
interceptor.
loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInterWithOverrideArgs.java
浏览文件 @
83f8714f
...
...
@@ -23,7 +23,7 @@ import net.bytebuddy.implementation.bind.annotation.AllArguments;
import
net.bytebuddy.implementation.bind.annotation.Morph
;
import
net.bytebuddy.implementation.bind.annotation.Origin
;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
org.skywalking.apm.agent.core.plugin.
interceptor.
loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.agent.core.plugin.loader.InterceptorInstanceLoader
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/
Plugin
ClassLoader.java
→
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/
Agent
ClassLoader.java
浏览文件 @
83f8714f
...
...
@@ -18,64 +18,174 @@
package
org.skywalking.apm.agent.core.plugin.loader
;
import
java.io.BufferedInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FilenameFilter
;
import
java.io.IOException
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.util.Enumeration
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.concurrent.locks.ReentrantLock
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarFile
;
import
org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException
;
import
org.skywalking.apm.agent.core.boot.AgentPackagePath
;
import
org.skywalking.apm.logging.ILog
;
import
org.skywalking.apm.logging.LogManager
;
/**
* The <code>
Plugin
ClassLoader</code> represents a classloader,
* The <code>
Agent
ClassLoader</code> represents a classloader,
* which is in charge of finding plugins and interceptors.
*
* @author wusheng
*/
public
class
Plugin
ClassLoader
extends
ClassLoader
{
private
static
final
ILog
logger
=
LogManager
.
getLogger
(
Plugin
ClassLoader
.
class
);
private
static
Plugin
ClassLoader
LOADER
;
public
class
Agent
ClassLoader
extends
ClassLoader
{
private
static
final
ILog
logger
=
LogManager
.
getLogger
(
Agent
ClassLoader
.
class
);
private
static
Agent
ClassLoader
LOADER
;
private
List
<
File
>
classpath
;
private
List
<
Jar
File
>
allJars
;
private
List
<
Jar
>
allJars
;
private
ReentrantLock
jarScanLock
=
new
ReentrantLock
();
private
ReentrantLock
loadClassLock
=
new
ReentrantLock
();
public
static
PluginClassLoader
ge
t
()
{
public
static
AgentClassLoader
getDefaul
t
()
{
return
LOADER
;
}
public
static
PluginClassLoader
initAndGet
(
File
agentDictionary
)
{
LOADER
=
new
PluginClassLoader
(
agentDictionary
);
return
get
();
public
static
AgentClassLoader
initDefaultLoader
()
throws
AgentPackageNotFoundException
{
LOADER
=
new
AgentClassLoader
(
AgentClassLoader
.
class
.
getClassLoader
()
);
return
get
Default
();
}
private
PluginClassLoader
(
File
agentDictionary
)
{
super
(
PluginClassLoader
.
class
.
getClassLoader
());
public
AgentClassLoader
(
ClassLoader
parent
)
throws
AgentPackageNotFoundException
{
super
(
parent
);
File
agentDictionary
=
AgentPackagePath
.
getPath
();
classpath
=
new
LinkedList
<
File
>();
classpath
.
add
(
new
File
(
agentDictionary
,
"plugins"
));
classpath
.
add
(
new
File
(
agentDictionary
,
"activations"
));
}
protected
Class
<?>
loadClass
(
String
name
,
boolean
resolve
)
throws
ClassNotFoundException
{
loadClassLock
.
lock
();
try
{
// First, check if the class has already been loaded
Class
<?>
c
=
findLoadedClass
(
name
);
if
(
c
==
null
)
{
try
{
super
.
loadClass
(
name
,
resolve
);
}
catch
(
ClassNotFoundException
e
)
{
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if
(
c
==
null
)
{
// If still not found, then invoke findClass in order
// to find the class.
c
=
findClass
(
name
);
}
}
if
(
resolve
)
{
resolveClass
(
c
);
}
return
c
;
}
finally
{
loadClassLock
.
unlock
();
}
}
@Override
protected
Class
<?>
findClass
(
String
name
)
throws
ClassNotFoundException
{
throw
new
ClassNotFoundException
(
name
);
List
<
Jar
>
allJars
=
getAllJars
();
String
path
=
"/"
+
name
.
replace
(
'.'
,
'/'
).
concat
(
".class"
);
for
(
Jar
jar
:
allJars
)
{
JarEntry
entry
=
jar
.
jarFile
.
getJarEntry
(
path
);
if
(
entry
!=
null
)
{
try
{
URL
classFileUrl
=
new
URL
(
"jar:file:"
+
jar
.
sourceFile
.
getAbsolutePath
()
+
"!/"
+
name
);
byte
[]
data
=
null
;
BufferedInputStream
is
=
null
;
ByteArrayOutputStream
baos
=
null
;
try
{
is
=
new
BufferedInputStream
(
classFileUrl
.
openStream
());
baos
=
new
ByteArrayOutputStream
();
int
ch
=
0
;
while
((
ch
=
is
.
read
())
!=
-
1
)
{
baos
.
write
(
ch
);
}
data
=
baos
.
toByteArray
();
}
finally
{
if
(
is
!=
null
)
try
{
is
.
close
();
}
catch
(
IOException
ignored
)
{
}
if
(
baos
!=
null
)
try
{
baos
.
close
();
}
catch
(
IOException
ignored
)
{
}
}
return
defineClass
(
name
,
data
,
0
,
data
.
length
);
}
catch
(
MalformedURLException
e
)
{
logger
.
error
(
e
,
"find class fail."
);
}
catch
(
IOException
e
)
{
logger
.
error
(
e
,
"find class fail."
);
}
}
}
throw
new
ClassNotFoundException
(
"Can't find "
+
name
);
}
@Override
protected
URL
findResource
(
String
name
)
{
getAllJars
();
throw
new
RuntimeException
(
""
);
List
<
Jar
>
allJars
=
getAllJars
();
for
(
Jar
jar
:
allJars
)
{
JarEntry
entry
=
jar
.
jarFile
.
getJarEntry
(
name
);
if
(
entry
!=
null
)
{
try
{
return
new
URL
(
"jar:file:"
+
jar
.
sourceFile
.
getAbsolutePath
()
+
"!/"
+
name
);
}
catch
(
MalformedURLException
e
)
{
continue
;
}
}
}
return
null
;
}
@Override
protected
Enumeration
<
URL
>
findResources
(
String
name
)
throws
IOException
{
List
<
URL
>
allResources
=
new
LinkedList
<
URL
>();
List
<
Jar
>
allJars
=
getAllJars
();
for
(
Jar
jar
:
allJars
)
{
JarEntry
entry
=
jar
.
jarFile
.
getJarEntry
(
name
);
if
(
entry
!=
null
)
{
allResources
.
add
(
new
URL
(
"jar:file:"
+
jar
.
sourceFile
.
getAbsolutePath
()
+
"!/"
+
name
));
}
}
final
Iterator
<
URL
>
iterator
=
allResources
.
iterator
();
return
new
Enumeration
<
URL
>()
{
@Override
public
boolean
hasMoreElements
()
{
return
iterator
.
hasNext
();
}
@Override
public
URL
nextElement
()
{
return
iterator
.
next
();
}
};
}
private
List
<
Jar
File
>
getAllJars
()
{
private
List
<
Jar
>
getAllJars
()
{
if
(
allJars
==
null
)
{
jarScanLock
.
lock
();
try
{
if
(
allJars
==
null
)
{
allJars
=
new
LinkedList
<
Jar
File
>();
allJars
=
new
LinkedList
<
Jar
>();
for
(
File
path
:
classpath
)
{
if
(
path
.
exists
()
&&
path
.
isDirectory
())
{
String
[]
jarFileNames
=
path
.
list
(
new
FilenameFilter
()
{
...
...
@@ -85,8 +195,10 @@ public class PluginClassLoader extends ClassLoader {
});
for
(
String
fileName
:
jarFileNames
)
{
try
{
JarFile
jar
=
new
JarFile
(
fileName
);
File
file
=
new
File
(
path
,
fileName
);
Jar
jar
=
new
Jar
(
new
JarFile
(
file
),
file
);
allJars
.
add
(
jar
);
logger
.
info
(
"{} loaded."
,
file
.
toString
());
}
catch
(
IOException
e
)
{
logger
.
error
(
e
,
"{} jar file can't be resolved"
,
fileName
);
}
...
...
@@ -101,4 +213,14 @@ public class PluginClassLoader extends ClassLoader {
return
allJars
;
}
private
class
Jar
{
private
JarFile
jarFile
;
private
File
sourceFile
;
private
Jar
(
JarFile
jarFile
,
File
sourceFile
)
{
this
.
jarFile
=
jarFile
;
this
.
sourceFile
=
sourceFile
;
}
}
}
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/
interceptor/
loader/InterceptorInstanceLoader.java
→
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java
浏览文件 @
83f8714f
...
...
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
package
org.skywalking.apm.agent.core.plugin.
interceptor.
loader
;
package
org.skywalking.apm.agent.core.plugin.loader
;
import
java.io.BufferedInputStream
;
import
java.io.ByteArrayOutputStream
;
...
...
@@ -24,8 +24,11 @@ import java.io.IOException;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.security.ProtectionDomain
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.locks.ReentrantLock
;
import
org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor
;
import
org.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsAroundInterceptor
;
...
...
@@ -53,7 +56,52 @@ public class InterceptorInstanceLoader {
private
static
ReentrantLock
INSTANCE_LOAD_LOCK
=
new
ReentrantLock
();
private
static
Map
<
ClassLoader
,
ClassLoader
>
EXTEND_PLUGIN_CLASSLOADERS
=
new
HashMap
<
ClassLoader
,
ClassLoader
>();
public
static
<
T
>
T
load
(
String
className
,
ClassLoader
targetClassLoader
)
throws
InvocationTargetException
,
IllegalAccessException
,
InstantiationException
,
ClassNotFoundException
,
AgentPackageNotFoundException
{
if
(
targetClassLoader
==
null
)
{
targetClassLoader
=
InterceptorInstanceLoader
.
class
.
getClassLoader
();
}
String
instanceKey
=
className
+
"_OF_"
+
targetClassLoader
.
getClass
().
getName
()
+
"@"
+
Integer
.
toHexString
(
targetClassLoader
.
hashCode
());
Object
inst
=
INSTANCE_CACHE
.
get
(
instanceKey
);
if
(
inst
==
null
)
{
if
(
InterceptorInstanceLoader
.
class
.
getClassLoader
().
equals
(
targetClassLoader
))
{
inst
=
targetClassLoader
.
loadClass
(
className
).
newInstance
();
}
else
{
INSTANCE_LOAD_LOCK
.
lock
();
try
{
ClassLoader
pluginLoader
=
EXTEND_PLUGIN_CLASSLOADERS
.
get
(
targetClassLoader
);
if
(
pluginLoader
==
null
)
{
pluginLoader
=
new
AgentClassLoader
(
targetClassLoader
);
EXTEND_PLUGIN_CLASSLOADERS
.
put
(
targetClassLoader
,
pluginLoader
);
}
inst
=
Class
.
forName
(
className
,
true
,
pluginLoader
).
newInstance
();
}
finally
{
INSTANCE_LOAD_LOCK
.
unlock
();
}
}
if
(
inst
!=
null
)
{
INSTANCE_CACHE
.
put
(
instanceKey
,
inst
);
}
}
return
(
T
)
inst
;
}
/**
* Old load method, just for backup
*
* @param className
* @param targetClassLoader
* @param <T>
* @return
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public
static
<
T
>
T
load0
(
String
className
,
ClassLoader
targetClassLoader
)
throws
InvocationTargetException
,
IllegalAccessException
,
InstantiationException
,
ClassNotFoundException
{
if
(
targetClassLoader
==
null
)
{
targetClassLoader
=
InterceptorInstanceLoader
.
class
.
getClassLoader
();
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/NotImplementationException.java
0 → 100644
浏览文件 @
83f8714f
/*
* Copyright 2017, OpenSkywalking Organization All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
package
org.skywalking.apm.agent.core.plugin.loader
;
/**
* @author wusheng
*/
public
class
NotImplementationException
extends
RuntimeException
{
}
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java
浏览文件 @
83f8714f
...
...
@@ -70,13 +70,15 @@ public class GRPCChannelManager implements BootService, Runnable {
@Override
public
void
shutdown
()
throws
Throwable
{
connectCheckFuture
.
cancel
(
true
);
if
(
managedChannel
!=
null
)
{
managedChannel
.
shutdownNow
();
}
logger
.
debug
(
"Selected collector grpc service shutdown."
);
}
@Override
public
void
run
()
{
logger
.
debug
(
"Selected collector grpc service running, reconnect:{}."
,
reconnect
);
logger
.
debug
(
"Selected collector grpc service running, reconnect:{}."
,
reconnect
);
if
(
reconnect
)
{
if
(
RemoteDownstreamConfig
.
Collector
.
GRPC_SERVERS
.
size
()
>
0
)
{
String
server
=
""
;
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/sampling/SamplingService.java
浏览文件 @
83f8714f
...
...
@@ -86,7 +86,7 @@ public class SamplingService implements BootService {
}
/**
* @return true, if sampling mechanism is on, and get the sampling factor successfully.
* @return true, if sampling mechanism is on, and get
Default
the sampling factor successfully.
*/
public
boolean
trySampling
()
{
if
(
on
)
{
...
...
apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/apm/plugin/jedis/v2/RedisMethodMatch.java
浏览文件 @
83f8714f
...
...
@@ -39,7 +39,7 @@ public enum RedisMethodMatch {
.
or
(
named
(
"zrangeByScore"
)).
or
(
named
(
"smove"
)).
or
(
named
(
"lset"
))
.
or
(
named
(
"decrBy"
)).
or
(
named
(
"pttl"
)).
or
(
named
(
"scan"
))
.
or
(
named
(
"zrank"
)).
or
(
named
(
"blpop"
)).
or
(
named
(
"rpoplpush"
))
.
or
(
named
(
"zremrangeByLex"
)).
or
(
named
(
"get"
)).
or
(
named
(
"lpop"
))
.
or
(
named
(
"zremrangeByLex"
)).
or
(
named
(
"get
Default
"
)).
or
(
named
(
"lpop"
))
.
or
(
named
(
"persist"
)).
or
(
named
(
"scriptExists"
)).
or
(
named
(
"georadius"
))
.
or
(
named
(
"set"
)).
or
(
named
(
"srandmember"
)).
or
(
named
(
"incr"
)).
or
(
named
(
"setbit"
))
.
or
(
named
(
"hexists"
)).
or
(
named
(
"expireAt"
)).
or
(
named
(
"pexpire"
)).
or
(
named
(
"zcard"
))
...
...
apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/src/main/java/org/skywalking/apm/plugin/sjdbc/ExecuteEventListener.java
浏览文件 @
83f8714f
...
...
@@ -35,8 +35,8 @@ import org.skywalking.apm.network.trace.component.ComponentsDefine;
import
org.skywalking.apm.plugin.sjdbc.define.AsyncExecuteInterceptor
;
/**
* Sharding-jdbc provides {@link EventBusInstance} to help external systems get events of sql execution.
* {@link ExecuteEventListener} can get sql statement start and end events, resulting in db span.
* Sharding-jdbc provides {@link EventBusInstance} to help external systems get
Default
events of sql execution.
* {@link ExecuteEventListener} can get
Default
sql statement start and end events, resulting in db span.
*
* @author gaohongtao
*/
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java
浏览文件 @
83f8714f
...
...
@@ -32,7 +32,7 @@ public class FutureGetInterceptor implements InstanceMethodsAroundInterceptor {
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
Object
[]
cacheValues
=
(
Object
[])
objInst
.
getSkyWalkingDynamicField
();
ContextManager
.
createLocalSpan
(
"future/get:"
+
((
URI
)
cacheValues
[
0
]).
getPath
());
ContextManager
.
createLocalSpan
(
"future/get
Default
:"
+
((
URI
)
cacheValues
[
0
]).
getPath
());
}
@Override
...
...
apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
浏览文件 @
83f8714f
...
...
@@ -32,7 +32,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import
static
org
.
skywalking
.
apm
.
agent
.
core
.
plugin
.
match
.
NameMatch
.
byName
;
/**
* {@link ResponseExtractorFutureInstrumentation} enhance the <code>addCallback</code> method and <code>get</code>
* {@link ResponseExtractorFutureInstrumentation} enhance the <code>addCallback</code> method and <code>get
Default
</code>
* method of <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code> by
* <code>org.skywalking.apm.plugin.spring.resttemplate.async.ResponseCallBackInterceptor</code> and
* <code>org.skywalking.apm.plugin.spring.resttemplate.async.FutureGetInterceptor</code>.
...
...
@@ -48,7 +48,7 @@ public class ResponseExtractorFutureInstrumentation extends ClassInstanceMethods
private
static
final
String
ADD_CALLBACK_INTERCEPTOR
=
"org.skywalking.apm.plugin.spring.resttemplate.async.ResponseCallBackInterceptor"
;
private
static
final
String
ENHANCE_CLASS
=
"org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture"
;
private
static
final
String
GET_METHOD_INTERCEPTOR
=
"org.skywalking.apm.plugin.spring.resttemplate.async.FutureGetInterceptor"
;
private
static
final
String
GET_METHOD_NAME
=
"get"
;
private
static
final
String
GET_METHOD_NAME
=
"get
Default
"
;
@Override
protected
ConstructorInterceptPoint
[]
getConstructorsInterceptPoints
()
{
...
...
apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/spymemcached/v2/define/MemcachedInstrumentation.java
浏览文件 @
83f8714f
...
...
@@ -75,7 +75,7 @@ public class MemcachedInstrumentation extends ClassInstanceMethodsEnhancePluginD
return
named
(
"touch"
).
or
(
named
(
"append"
)).
or
(
named
(
"prepend"
)).
or
(
named
(
"asyncCAS"
))
.
or
(
named
(
"cas"
)).
or
(
named
(
"add"
)).
or
(
named
(
"set"
)).
or
(
named
(
"replace"
))
.
or
(
named
(
"asyncGet"
)).
or
(
named
(
"asyncGets"
)).
or
(
named
(
"gets"
)).
or
(
named
(
"getAndTouch"
))
.
or
(
named
(
"get"
)).
or
(
named
(
"asyncGetBulk"
)).
or
(
named
(
"asyncGetAndTouch"
))
.
or
(
named
(
"get
Default
"
)).
or
(
named
(
"asyncGetBulk"
)).
or
(
named
(
"asyncGetAndTouch"
))
.
or
(
named
(
"getBulk"
)).
or
(
named
(
"getStats"
)).
or
(
named
(
"incr"
))
.
or
(
named
(
"decr"
)).
or
(
named
(
"asyncIncr"
)).
or
(
named
(
"asyncDecr"
))
.
or
(
named
(
"delete"
));
...
...
apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/skywalking/apm/toolkit/activation/trace/TraceContextInterceptor.java
浏览文件 @
83f8714f
...
...
@@ -43,6 +43,6 @@ public class TraceContextInterceptor implements StaticMethodsAroundInterceptor {
@Override
public
void
handleMethodException
(
Class
clazz
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
parameterTypes
,
Throwable
t
)
{
logger
.
error
(
"Failed to get trace Id."
,
t
);
logger
.
error
(
"Failed to get
Default
trace Id."
,
t
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录