package org.skywalking.apm.plugin.mongodb.v3; import com.mongodb.ReadPreference; import com.mongodb.ServerAddress; import com.mongodb.binding.ReadBinding; import org.skywalking.apm.agent.core.plugin.interceptor.EnhancedClassInstanceContext; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodInvokeContext; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; /** * {@link MongoDBReadBindingInterceptor} record the host and port information * from {@link EnhancedClassInstanceContext#context}, * * @author baiyang */ public class MongoDBReadBindingInterceptor implements InstanceMethodsAroundInterceptor { @Override public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { } /** * Execute after {@link com.mongodb.Mongo#getReadBinding(ReadPreference)}, * record the host and port information */ @Override public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { ReadBinding readBinding = (ReadBinding) ret; ServerAddress serverAddress = readBinding.getReadConnectionSource() .getServerDescription().getAddress(); String host = serverAddress.getHost(); Integer port = serverAddress.getPort(); context.set(MongoDBMethodInterceptor.MONGODB_HOST, host); context.set(MongoDBMethodInterceptor.MONGODB_PORT, port); return ret; } @Override public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { } }