diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
index 3c347b75b4c5afa7319e23add32e7b50a3bcd7a5..ec6bef62c4d3d53dd41041c6a5bdcb8d327abb00 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
@@ -29,7 +29,7 @@
4.0.0
- mongodb-2.x-plugin
+ apm-mongodb-2.x-plugin
jar
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBV2MethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBV2MethodInterceptor.java
index d55980a4cb58963ebef417178e886cdff08fc551..acbeea1e7bf4d8e6193f3da3a2231d4707f27b28 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBV2MethodInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBV2MethodInterceptor.java
@@ -34,6 +34,9 @@ import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptR
import org.skywalking.apm.network.trace.component.ComponentsDefine;
/**
+ * {@link MongoDBV2MethodInterceptor} intercept method of {@link com.mongodb.DBCollection#find()}
+ *or{@link com.mongodb.DBCollectionImpl#insertImpl}.... record the mongoDB host, operation name ...
+ *
* @Auther liyuntao
*/
@@ -79,4 +82,5 @@ public class MongoDBV2MethodInterceptor implements InstanceMethodsAroundIntercep
objInst.setSkyWalkingDynamicField(peers.subSequence(0, peers.length() - 1).toString());
}
+
}
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionInstrumentation.java
new file mode 100644
index 0000000000000000000000000000000000000000..3affcc6b9217aa6b50e957797c0be0277199b4fa
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionInstrumentation.java
@@ -0,0 +1,152 @@
+/*
+ * 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.plugin.mongodb.v2.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.skywalking.apm.plugin.mongodb.v2.MongoDBV2MethodInterceptor;
+
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link MongoDBCollectionInstrumentation} presents that skywalking intercepts {@link com.mongodb.DBCollection#find()},
+ * {@link com.mongodb.DBCollection#mapReduce} by using {@link MongoDBV2MethodInterceptor}.
+ *
+ * @Auther liyuntao
+ */
+public class MongoDBCollectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "com.mongodb.DBCollection";
+
+ private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBV2MethodInterceptor";
+
+ @Override
+ protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return null;
+ }
+
+ @Override
+ protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("find");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("mapReduce").and(takesArgumentWithType(0, "com.mongodb.MapReduceCommand"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("aggregate").and(takesArgumentWithType(1, "com.mongodb.ReadPreference"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("aggregate").and(takesArgumentWithType(2, "com.mongodb.ReadPreference"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("createIndex").and(takesArgumentWithType(2, "boolean"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+
+ @Override
+ protected String[] witnessClasses() {
+ /**
+ * @see {@link com.mongodb.tools.ConnectionPoolStat}
+ */
+ return new String[] {
+ "com.mongodb.tools.ConnectionPoolStat"
+ };
+ }
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBV2Instrumentation.java b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBV2Instrumentation.java
index b2ba7d0973b17259561908b38f530160a9cbe232..20de3d76309e36dee95621acd100bbacd25b67e6 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBV2Instrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBV2Instrumentation.java
@@ -24,22 +24,25 @@ import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoin
import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.skywalking.apm.plugin.mongodb.v2.MongoDBV2MethodInterceptor;
import static net.bytebuddy.matcher.ElementMatchers.any;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
+ * {@link MongoDBCollectionInstrumentation} presents that skywalking intercepts {@link com.mongodb.DBCollectionImpl#find()},
+ * {@link com.mongodb.DBCollectionImpl#insertImpl} by using {@link MongoDBV2MethodInterceptor}.
+ *
* @Auther liyuntao
*/
public class MongoDBV2Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
- private static final String ENHANCE_CLASS = "com.mongodb.DBCollection";
+ private static final String ENHANCE_CLASS = "com.mongodb.DBCollectionImpl";
private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBV2MethodInterceptor";
-
-
@Override
protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[] {
@@ -63,7 +66,55 @@ public class MongoDBV2Instrumentation extends ClassInstanceMethodsEnhancePluginD
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher getMethodsMatcher() {
- return named("getWriteConcern");
+ return named("find").and(takesArgumentWithType(8, "com.mongodb.DBEncoder"));
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("insertImpl");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return takesArgumentWithType(1, "boolean");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("updateImpl");
}
@Override
@@ -79,7 +130,39 @@ public class MongoDBV2Instrumentation extends ClassInstanceMethodsEnhancePluginD
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher getMethodsMatcher() {
- return named("getReadPreference");
+ return named("findAndModifyImpl");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("drop");
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return MONGDB_METHOD_INTERCET_CLASS;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named("createIndex");
}
@Override
@@ -100,4 +183,14 @@ public class MongoDBV2Instrumentation extends ClassInstanceMethodsEnhancePluginD
return byName(ENHANCE_CLASS);
}
+ @Override
+ protected String[] witnessClasses() {
+ /**
+ * @see {@link com.mongodb.tools.ConnectionPoolStat}
+ */
+ return new String[] {
+ "com.mongodb.tools.ConnectionPoolStat"
+ };
+ }
+
}
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/resources/skywalking-plugin.def
index 0544be0b5da78d8223517d315c67deb15c67cc80..7f6089493e51dd1ba19c490e406fb7f1dae6a6c5 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/resources/skywalking-plugin.def
@@ -1 +1,2 @@
mongodb-2.x=org.skywalking.apm.plugin.mongodb.v2.define.MongoDBV2Instrumentation
+mongodb-2.x=org.skywalking.apm.plugin.mongodb.v2.define.MongoDBCollectionInstrumentation