From 0b4b4b17590d45c95f494964c8883947a0057574 Mon Sep 17 00:00:00 2001 From: wusheng Date: Sat, 24 Jun 2017 07:38:02 +0800 Subject: [PATCH 1/6] Add layer tag value: mq. --- .../java/org/skywalking/apm/agent/core/context/tag/Tags.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/Tags.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/Tags.java index 11c36a9f2..06895a864 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/Tags.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/Tags.java @@ -51,6 +51,7 @@ public final class Tags { private static final String DB_LAYER = "db"; private static final String RPC_FRAMEWORK_LAYER = "rpc"; private static final String HTTP_LAYER = "http"; + private static final String MQ_LAYER = "mq"; public static void asDB(AbstractSpan span) { SPAN_LAYER_TAG.set(span, DB_LAYER); @@ -63,6 +64,10 @@ public final class Tags { public static void asHttp(AbstractSpan span) { SPAN_LAYER_TAG.set(span, HTTP_LAYER); } + + public static void asMQ(AbstractSpan span) { + SPAN_LAYER_TAG.set(span, MQ_LAYER); + } } /** From ace2e638878a25e7885aaa2bc9a593bd954ca5f7 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 26 Jun 2017 11:23:19 +0800 Subject: [PATCH 2/6] Add mechanism to set default status(on/off) of plugin --- .../apm/agent/core/conf/Config.java | 6 +++++ .../apm/agent/core/plugin/PluginDefine.java | 27 ++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java index 0dbd4f44a..92b7f9fba 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java @@ -101,6 +101,12 @@ public class Config { */ public static List DISABLED_PLUGINS = new LinkedList(); + /** + * Name of force enable plugin, The value spilt by , + * if you have multiple plugins need to enable. + */ + public static List FORCE_ENABLE_PLUGINS = new LinkedList(); + public static class MongoDB { /** * If true, trace all the parameters, default is false. diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java index 96a82f896..5ccd13b70 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java @@ -15,9 +15,15 @@ public class PluginDefine { */ private String defineClass; - private PluginDefine(String name, String defineClass) { + /** + * The sate of plugin. + */ + private State state; + + private PluginDefine(String name, String defineClass, State state) { this.name = name; this.defineClass = defineClass; + this.state = state; } public static PluginDefine build(String define) throws IllegalPluginDefineException { @@ -30,16 +36,31 @@ public class PluginDefine { throw new IllegalPluginDefineException(define); } - return new PluginDefine(pluginDefine[0], pluginDefine[1]); + String pluginName = pluginDefine[0]; + String defineClass = pluginDefine[1]; + if (pluginName.toUpperCase().startsWith("[OFF]")) { + return new PluginDefine(pluginName.substring(5), defineClass, State.OFF); + } else { + return new PluginDefine(pluginName, defineClass, State.ON); + } } public boolean enable() { - return !Config.Plugin.DISABLED_PLUGINS.contains(name); + return !Config.Plugin.DISABLED_PLUGINS.contains(name) || forceEnable(); + } + + + private boolean forceEnable() { + return state == State.OFF && Config.Plugin.FORCE_ENABLE_PLUGINS.contains(name); } public String getDefineClass() { return defineClass; } + + private enum State { + OFF, ON; + } } From 6081f7f7b16bb616fc3df037b7f1a80ada357bd8 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 26 Jun 2017 11:26:24 +0800 Subject: [PATCH 3/6] fix lost tags --- .../java/org/skywalking/apm/agent/core/context/trace/Span.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java index 28f32f6ac..f3a3faa0e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java @@ -383,7 +383,7 @@ public class Span implements AbstractSpan { } } if (span.tagsWithInt != null) { - if (tagWithInt != null) { + if (tagWithInt == null) { tagWithInt = new JsonObject(); } for (IntTagItem item : span.tagsWithInt) { From a556e6ef7c43ca23a600e93aa38cd18eee9a1dc9 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 26 Jun 2017 11:29:27 +0800 Subject: [PATCH 4/6] fix skywalking container start failure --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index c0164684b..0f07a2151 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,6 +30,9 @@ services: es-server: image: elasticsearch:5.3 command: "-Enode.name=TestNode -Enetwork.host=0.0.0.0 -Ehttp.cors.enabled=true -Ehttp.cors.allow-origin=* -Ethread_pool.bulk.queue_size=1000 -Ecluster.name=CollectorDBCluster" + environment: + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" expose: - "9200" - "9300" From 37ecd3a2d67d463167499d40c373f7a614975375 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 26 Jun 2017 18:42:50 +0800 Subject: [PATCH 5/6] Fix windows script start collector failure. --- .../apm-collector-worker/bin/collector-service.bat | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/apm-collector/apm-collector-worker/bin/collector-service.bat b/apm-collector/apm-collector-worker/bin/collector-service.bat index fbc273ef5..ab1bef7c2 100644 --- a/apm-collector/apm-collector-worker/bin/collector-service.bat +++ b/apm-collector/apm-collector-worker/bin/collector-service.bat @@ -8,10 +8,13 @@ set COLLECTOR_RUNTIME_OPTIONS="-Xms256M -Xmx512M" set CLASSPATH=%COLLECTOR_BASE_PATH%\config; SET CLASSPATH=%COLLECTOR_BASE_PATH%\libs\*;%CLASSPATH% -if ""%JAVA_HOME%"" == """" ( - set _EXECJAVA=java -) else ( - set _EXECJAVA="%JAVA_HOME%"/bin/java +if defined JAVA_HOME ( + set _EXECJAVA="%JAVA_HOME:"=%"\bin\java +) + +if not defined JAVA_HOME ( + echo "JAVA_HOME not set." + set _EXECJAVA=java ) start /MIN "%COLLECOTR_PROCESS_TITLE%" %_EXECJAVA% "%COLLECTOR_RUNTIME_OPTIONS%" -cp "%CLASSPATH%" org.skywalking.apm.collector.worker.CollectorBootStartUp & From 6e1d0d602fb63f2394bf1b1d42930c84ecc22767 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 26 Jun 2017 22:52:27 +0800 Subject: [PATCH 6/6] add test case and fix logical error --- .../apm/agent/core/plugin/PluginDefine.java | 10 ++-- .../agent/core/plugin/PluginDefineTest.java | 48 +++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java index 5ccd13b70..307139574 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java @@ -5,6 +5,7 @@ import org.skywalking.apm.agent.core.plugin.exception.IllegalPluginDefineExcepti import org.skywalking.apm.util.StringUtil; public class PluginDefine { + public static final String PLUGIN_OFF_PREFIX = "[OFF]"; /** * Plugin name. */ @@ -38,17 +39,20 @@ public class PluginDefine { String pluginName = pluginDefine[0]; String defineClass = pluginDefine[1]; - if (pluginName.toUpperCase().startsWith("[OFF]")) { - return new PluginDefine(pluginName.substring(5), defineClass, State.OFF); + if (pluginName.toUpperCase().startsWith(PLUGIN_OFF_PREFIX)) { + return new PluginDefine(pluginName.substring(PLUGIN_OFF_PREFIX.length()), defineClass, State.OFF); } else { return new PluginDefine(pluginName, defineClass, State.ON); } } public boolean enable() { - return !Config.Plugin.DISABLED_PLUGINS.contains(name) || forceEnable(); + return !forceDisable() || forceEnable(); } + private boolean forceDisable() { + return state != State.ON || Config.Plugin.DISABLED_PLUGINS.contains(name); + } private boolean forceEnable() { return state == State.OFF && Config.Plugin.FORCE_ENABLE_PLUGINS.contains(name); diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java new file mode 100644 index 000000000..1f0a69dd9 --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/plugin/PluginDefineTest.java @@ -0,0 +1,48 @@ +package org.skywalking.apm.agent.core.plugin; + +import org.junit.Test; +import org.skywalking.apm.agent.core.conf.Config; +import org.skywalking.apm.agent.core.plugin.exception.IllegalPluginDefineException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class PluginDefineTest { + + private static final String TEST_PLUGIN = "test_plugin"; + private static final String TEST_DEFINE_CLASS = "test_define_class"; + + @Test(expected = IllegalPluginDefineException.class) + public void testIllegalPluginDefine() throws IllegalPluginDefineException { + PluginDefine.build("illegal_plugin_define"); + } + + @Test(expected = IllegalPluginDefineException.class) + public void testEmptyPluginDefine() throws IllegalPluginDefineException { + PluginDefine.build(""); + } + + @Test + public void testOffStatePlugin() throws IllegalPluginDefineException { + PluginDefine pluginDefine = PluginDefine.build(PluginDefine.PLUGIN_OFF_PREFIX + TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertFalse(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + } + + @Test + public void testDefaultStatePlugin() throws IllegalPluginDefineException { + PluginDefine pluginDefine = PluginDefine.build(TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertTrue(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + } + + @Test + public void testForceEnablePlugin() throws IllegalPluginDefineException { + Config.Plugin.FORCE_ENABLE_PLUGINS.add(TEST_PLUGIN); + PluginDefine pluginDefine = PluginDefine.build(PluginDefine.PLUGIN_OFF_PREFIX + TEST_PLUGIN + "=" + TEST_DEFINE_CLASS); + assertTrue(pluginDefine.enable()); + assertEquals(TEST_DEFINE_CLASS, pluginDefine.getDefineClass()); + Config.Plugin.FORCE_ENABLE_PLUGINS.clear(); + } +}