Loading apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml 0 → 100644 +71 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!-- ~ /* ~ * 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 ~ */ --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>apm-sdk-plugin</artifactId> <groupId>org.skywalking</groupId> <version>3.2.5-2017</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>apm-mongodb-2.x-plugin</artifactId> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.14.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>2.14.2</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <!-- 源码插件 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <!-- 发布时自动将源码同时发布的配置 --> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> No newline at end of file apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptor.java 0 → 100644 +102 −0 Original line number Diff line number Diff line /* * 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; import com.mongodb.AggregationOutput; import com.mongodb.CommandResult; import com.mongodb.DB; import com.mongodb.ServerAddress; import com.mongodb.WriteResult; import java.lang.reflect.Method; import java.util.List; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; import org.skywalking.apm.agent.core.context.trace.AbstractSpan; import org.skywalking.apm.agent.core.context.trace.SpanLayer; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; 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.MethodInterceptResult; import org.skywalking.apm.network.trace.component.ComponentsDefine; /** * {@link MongoDBCollectionMethodInterceptor} intercepts constructor of {@link com.mongodb.DBCollection}or {@link * com.mongodb.DBCollectionImpl} recording the ServerAddress and creating the exit span. * * @author liyuntao */ public class MongoDBCollectionMethodInterceptor implements InstanceMethodsAroundInterceptor, InstanceConstructorInterceptor { private static final String DB_TYPE = "MongoDB"; private static final String MONGO_DB_OP_PREFIX = "MongoDB/"; @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) throws Throwable { String remotePeer = (String)objInst.getSkyWalkingDynamicField(); String opertaion = method.getName(); AbstractSpan span = ContextManager.createExitSpan(MONGO_DB_OP_PREFIX + opertaion, new ContextCarrier(), remotePeer); span.setComponent(ComponentsDefine.MONGODB); Tags.DB_TYPE.set(span, DB_TYPE); SpanLayer.asDB(span); } @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable { AbstractSpan activeSpan = ContextManager.activeSpan(); CommandResult cresult = null; if (ret instanceof WriteResult) { WriteResult wresult = (WriteResult)ret; cresult = wresult.getCachedLastError(); } else if (ret instanceof AggregationOutput) { AggregationOutput aresult = (AggregationOutput)ret; cresult = aresult.getCommandResult(); } if (null != cresult && !cresult.ok()) { activeSpan.log(cresult.getException()); } ContextManager.stopSpan(); return ret; } @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Throwable t) { AbstractSpan activeSpan = ContextManager.activeSpan(); activeSpan.errorOccurred(); activeSpan.log(t); } @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { List<ServerAddress> servers = null; DB db = (DB)allArguments[0]; servers = db.getMongo().getAllAddress(); StringBuilder peers = new StringBuilder(); for (ServerAddress address : servers) { peers.append(address.getHost() + ":" + address.getPort() + ";"); } objInst.setSkyWalkingDynamicField(peers.subSequence(0, peers.length() - 1).toString()); } } apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/InterceptPoint.java 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * 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 org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; /** * @auther liyuntao */ public abstract class InterceptPoint implements InstanceMethodsInterceptPoint { private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBCollectionMethodInterceptor"; @Override public String getMethodsInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } @Override public boolean isOverrideArgs() { return false; } } apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionImplInstrumentation.java 0 → 100644 +140 −0 Original line number Diff line number Diff line /* * 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 static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** * {@link MongoDBCollectionImplInstrumentation} define that the MongoDB Java Driver 2.13.x-2.14.x plugin intercepts the * following methods in the {@link com.mongodb.DBCollectionImpl}class: * 1. find <br/> * 2. insert <br/> * 3. insertImpl <br/> * 4. update <br/> * 5. updateImpl <br/> * 6. remove <br/> * 7. createIndex <br/> * * @author liyuntao */ public class MongoDBCollectionImplInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.mongodb.DBCollectionImpl"; private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBCollectionMethodInterceptor"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[] { new ConstructorInterceptPoint() { @Override public ElementMatcher<MethodDescription> getConstructorMatcher() { return any(); } @Override public String getConstructorInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } } }; } @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { return new InstanceMethodsInterceptPoint[] { new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("find").and(takesArguments(9)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("insert").and(takesArguments(4)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("insertImpl"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("update"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("updateImpl"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("remove").and(takesArguments(4)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("createIndex"); } }, }; } @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" }; } } apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionInstrumentation.java 0 → 100644 +173 −0 Original line number Diff line number Diff line /* * 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 static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** * {@link MongoDBCollectionInstrumentation} define that the MongoDB Java Driver 2.13.x-2.14.x plugin intercepts the * following methods in the {@link com.mongodb.DBCollection}class: * 1. aggregate <br/> * 2. findAndModify <br/> * 3. getCount * <br/> * 4. drop <br/> * 5. dropIndexes <br/> * 6. rename <br/> * 7. group <br/> * 8. distinct <br/> * 9. mapReduce <br/> * * @author 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.MongoDBCollectionMethodInterceptor"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[] { new ConstructorInterceptPoint() { @Override public ElementMatcher<MethodDescription> getConstructorMatcher() { return any(); } @Override public String getConstructorInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } } }; } @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { return new InstanceMethodsInterceptPoint[] { new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("aggregate").and(takesArgumentWithType(1, "com.mongodb.ReadPreference")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("findAndModify").and(takesArguments(9)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("getCount").and(takesArgumentWithType(6, "java.util.concurrent.TimeUnit")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("drop"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("dropIndexes"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("rename").and(takesArgumentWithType(1, "boolean")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("group").and(takesArgumentWithType(1, "boolean")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("group").and(takesArgumentWithType(1, "com.mongodb.DBObject")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("distinct").and(takesArgumentWithType(2, "com.mongodb.ReadPreference")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("mapReduce").and(takesArgumentWithType(0, "com.mongodb.MapReduceCommand")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("mapReduce").and(takesArgumentWithType(0, "com.mongodb.DBObject")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("explainAggregate"); } }, }; } @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" }; } } Loading
apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml 0 → 100644 +71 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!-- ~ /* ~ * 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 ~ */ --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>apm-sdk-plugin</artifactId> <groupId>org.skywalking</groupId> <version>3.2.5-2017</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>apm-mongodb-2.x-plugin</artifactId> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.14.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>2.14.2</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <!-- 源码插件 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <!-- 发布时自动将源码同时发布的配置 --> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> No newline at end of file
apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptor.java 0 → 100644 +102 −0 Original line number Diff line number Diff line /* * 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; import com.mongodb.AggregationOutput; import com.mongodb.CommandResult; import com.mongodb.DB; import com.mongodb.ServerAddress; import com.mongodb.WriteResult; import java.lang.reflect.Method; import java.util.List; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; import org.skywalking.apm.agent.core.context.trace.AbstractSpan; import org.skywalking.apm.agent.core.context.trace.SpanLayer; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; 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.MethodInterceptResult; import org.skywalking.apm.network.trace.component.ComponentsDefine; /** * {@link MongoDBCollectionMethodInterceptor} intercepts constructor of {@link com.mongodb.DBCollection}or {@link * com.mongodb.DBCollectionImpl} recording the ServerAddress and creating the exit span. * * @author liyuntao */ public class MongoDBCollectionMethodInterceptor implements InstanceMethodsAroundInterceptor, InstanceConstructorInterceptor { private static final String DB_TYPE = "MongoDB"; private static final String MONGO_DB_OP_PREFIX = "MongoDB/"; @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) throws Throwable { String remotePeer = (String)objInst.getSkyWalkingDynamicField(); String opertaion = method.getName(); AbstractSpan span = ContextManager.createExitSpan(MONGO_DB_OP_PREFIX + opertaion, new ContextCarrier(), remotePeer); span.setComponent(ComponentsDefine.MONGODB); Tags.DB_TYPE.set(span, DB_TYPE); SpanLayer.asDB(span); } @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable { AbstractSpan activeSpan = ContextManager.activeSpan(); CommandResult cresult = null; if (ret instanceof WriteResult) { WriteResult wresult = (WriteResult)ret; cresult = wresult.getCachedLastError(); } else if (ret instanceof AggregationOutput) { AggregationOutput aresult = (AggregationOutput)ret; cresult = aresult.getCommandResult(); } if (null != cresult && !cresult.ok()) { activeSpan.log(cresult.getException()); } ContextManager.stopSpan(); return ret; } @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Throwable t) { AbstractSpan activeSpan = ContextManager.activeSpan(); activeSpan.errorOccurred(); activeSpan.log(t); } @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { List<ServerAddress> servers = null; DB db = (DB)allArguments[0]; servers = db.getMongo().getAllAddress(); StringBuilder peers = new StringBuilder(); for (ServerAddress address : servers) { peers.append(address.getHost() + ":" + address.getPort() + ";"); } objInst.setSkyWalkingDynamicField(peers.subSequence(0, peers.length() - 1).toString()); } }
apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/InterceptPoint.java 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * 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 org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; /** * @auther liyuntao */ public abstract class InterceptPoint implements InstanceMethodsInterceptPoint { private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBCollectionMethodInterceptor"; @Override public String getMethodsInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } @Override public boolean isOverrideArgs() { return false; } }
apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionImplInstrumentation.java 0 → 100644 +140 −0 Original line number Diff line number Diff line /* * 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 static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** * {@link MongoDBCollectionImplInstrumentation} define that the MongoDB Java Driver 2.13.x-2.14.x plugin intercepts the * following methods in the {@link com.mongodb.DBCollectionImpl}class: * 1. find <br/> * 2. insert <br/> * 3. insertImpl <br/> * 4. update <br/> * 5. updateImpl <br/> * 6. remove <br/> * 7. createIndex <br/> * * @author liyuntao */ public class MongoDBCollectionImplInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.mongodb.DBCollectionImpl"; private static final String MONGDB_METHOD_INTERCET_CLASS = "org.skywalking.apm.plugin.mongodb.v2.MongoDBCollectionMethodInterceptor"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[] { new ConstructorInterceptPoint() { @Override public ElementMatcher<MethodDescription> getConstructorMatcher() { return any(); } @Override public String getConstructorInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } } }; } @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { return new InstanceMethodsInterceptPoint[] { new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("find").and(takesArguments(9)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("insert").and(takesArguments(4)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("insertImpl"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("update"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("updateImpl"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("remove").and(takesArguments(4)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("createIndex"); } }, }; } @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" }; } }
apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v2/define/MongoDBCollectionInstrumentation.java 0 → 100644 +173 −0 Original line number Diff line number Diff line /* * 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 static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** * {@link MongoDBCollectionInstrumentation} define that the MongoDB Java Driver 2.13.x-2.14.x plugin intercepts the * following methods in the {@link com.mongodb.DBCollection}class: * 1. aggregate <br/> * 2. findAndModify <br/> * 3. getCount * <br/> * 4. drop <br/> * 5. dropIndexes <br/> * 6. rename <br/> * 7. group <br/> * 8. distinct <br/> * 9. mapReduce <br/> * * @author 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.MongoDBCollectionMethodInterceptor"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[] { new ConstructorInterceptPoint() { @Override public ElementMatcher<MethodDescription> getConstructorMatcher() { return any(); } @Override public String getConstructorInterceptor() { return MONGDB_METHOD_INTERCET_CLASS; } } }; } @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { return new InstanceMethodsInterceptPoint[] { new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("aggregate").and(takesArgumentWithType(1, "com.mongodb.ReadPreference")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("findAndModify").and(takesArguments(9)); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("getCount").and(takesArgumentWithType(6, "java.util.concurrent.TimeUnit")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("drop"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("dropIndexes"); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("rename").and(takesArgumentWithType(1, "boolean")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("group").and(takesArgumentWithType(1, "boolean")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("group").and(takesArgumentWithType(1, "com.mongodb.DBObject")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("distinct").and(takesArgumentWithType(2, "com.mongodb.ReadPreference")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("mapReduce").and(takesArgumentWithType(0, "com.mongodb.MapReduceCommand")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("mapReduce").and(takesArgumentWithType(0, "com.mongodb.DBObject")); } }, new InterceptPoint() { @Override public ElementMatcher<MethodDescription> getMethodsMatcher() { return named("explainAggregate"); } }, }; } @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" }; } }