Search in sources :

Example 1 with RemoteAddressAccessor

use of com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor in project pinpoint by naver.

the class RabbitMQConsumerHandleCompleteInboundCommandInterceptor method recordRootSpan.

private void recordRootSpan(SpanRecorder recorder, AMQConnection amqConnection, String exchange, String routingKey, Map<String, Object> headers) {
    recorder.recordServiceType(RabbitMQClientConstants.RABBITMQ_CLIENT);
    recorder.recordApi(CONSUMER_ENTRY_METHOD_DESCRIPTOR);
    String endPoint = RabbitMQClientConstants.UNKNOWN;
    String remoteAddress = RabbitMQClientConstants.UNKNOWN;
    if (amqConnection != null) {
        FrameHandler frameHandler = amqConnection.getFrameHandler();
        // Endpoint should be the local socket address of the consumer.
        if (frameHandler instanceof LocalAddressAccessor) {
            endPoint = ((LocalAddressAccessor) frameHandler)._$PINPOINT$_getLocalAddress();
        }
        // Remote address is the socket address of where the consumer is connected to.
        if (frameHandler instanceof RemoteAddressAccessor) {
            remoteAddress = ((RemoteAddressAccessor) frameHandler)._$PINPOINT$_getRemoteAddress();
        }
    }
    recorder.recordEndPoint(endPoint);
    recorder.recordRemoteAddress(remoteAddress);
    String convertedExchange = StringUtils.defaultIfEmpty(exchange, RabbitMQClientConstants.UNKNOWN);
    recorder.recordRpcName("rabbitmq://exchange=" + convertedExchange);
    recorder.recordAcceptorHost("exchange-" + convertedExchange);
    if (isDebug) {
        logger.debug("endPoint={}->{}", exchange, convertedExchange);
    }
    recorder.recordAttribute(RabbitMQClientConstants.RABBITMQ_ROUTINGKEY_ANNOTATION_KEY, routingKey);
    if (MapUtils.hasLength(headers)) {
        Object parentApplicationName = headers.get(RabbitMQClientConstants.META_PARENT_APPLICATION_NAME);
        if (!recorder.isRoot() && parentApplicationName != null) {
            Object parentApplicationType = headers.get(RabbitMQClientConstants.META_PARENT_APPLICATION_TYPE);
            recorder.recordParentApplication(parentApplicationName.toString(), NumberUtils.parseShort(parentApplicationType.toString(), ServiceType.UNDEFINED.getCode()));
        }
    }
}
Also used : LocalAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.LocalAddressAccessor) FrameHandler(com.rabbitmq.client.impl.FrameHandler) RemoteAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor)

Example 2 with RemoteAddressAccessor

use of com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor in project pinpoint by naver.

the class SocketFrameHandlerConstructInterceptor method after.

@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
    if (!validate(target, args)) {
        return;
    }
    String localAddress = RabbitMQClientConstants.UNKNOWN;
    String remoteAddress = RabbitMQClientConstants.UNKNOWN;
    if (args[0] instanceof Socket) {
        Socket socket = (Socket) args[0];
        localAddress = HostAndPort.toHostAndPortString(socket.getLocalAddress().getHostAddress(), socket.getLocalPort());
        remoteAddress = HostAndPort.toHostAndPortString(socket.getInetAddress().getHostAddress(), socket.getPort());
    }
    ((LocalAddressAccessor) target)._$PINPOINT$_setLocalAddress(localAddress);
    ((RemoteAddressAccessor) target)._$PINPOINT$_setRemoteAddress(remoteAddress);
}
Also used : LocalAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.LocalAddressAccessor) RemoteAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor) Socket(java.net.Socket)

Example 3 with RemoteAddressAccessor

use of com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor in project pinpoint by naver.

the class RabbitMQConsumerDispatchInterceptor method recordRootSpan.

private void recordRootSpan(SpanRecorder recorder, Connection connection, Envelope envelope, Map<String, Object> headers) {
    recorder.recordServiceType(RabbitMQClientConstants.RABBITMQ_CLIENT);
    recorder.recordApi(CONSUMER_ENTRY_METHOD_DESCRIPTOR);
    String endPoint = RabbitMQClientConstants.UNKNOWN;
    String remoteAddress = RabbitMQClientConstants.UNKNOWN;
    if (connection instanceof AMQConnection) {
        AMQConnection amqConnection = (AMQConnection) connection;
        FrameHandler frameHandler = amqConnection.getFrameHandler();
        // Endpoint should be the local socket address of the consumer.
        if (frameHandler instanceof LocalAddressAccessor) {
            endPoint = ((LocalAddressAccessor) frameHandler)._$PINPOINT$_getLocalAddress();
        }
        // Remote address is the socket address of where the consumer is connected to.
        if (frameHandler instanceof RemoteAddressAccessor) {
            remoteAddress = ((RemoteAddressAccessor) frameHandler)._$PINPOINT$_getRemoteAddress();
        }
    }
    recorder.recordEndPoint(endPoint);
    recorder.recordRemoteAddress(remoteAddress);
    String exchange = StringUtils.defaultIfEmpty(envelope.getExchange(), RabbitMQClientConstants.UNKNOWN);
    recorder.recordRpcName("rabbitmq://exchange=" + exchange);
    recorder.recordAcceptorHost("exchange-" + exchange);
    if (isDebug) {
        logger.debug("endPoint={}->{}", envelope.getExchange(), exchange);
    }
    recorder.recordAttribute(RabbitMQClientConstants.RABBITMQ_ROUTINGKEY_ANNOTATION_KEY, envelope.getRoutingKey());
    if (MapUtils.hasLength(headers)) {
        Object parentApplicationName = headers.get(RabbitMQClientConstants.META_PARENT_APPLICATION_NAME);
        if (!recorder.isRoot() && parentApplicationName != null) {
            Object parentApplicationType = headers.get(RabbitMQClientConstants.META_PARENT_APPLICATION_TYPE);
            recorder.recordParentApplication(parentApplicationName.toString(), NumberUtils.parseShort(parentApplicationType.toString(), ServiceType.UNDEFINED.getCode()));
        }
    }
}
Also used : LocalAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.LocalAddressAccessor) FrameHandler(com.rabbitmq.client.impl.FrameHandler) AMQConnection(com.rabbitmq.client.impl.AMQConnection) RemoteAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor)

Example 4 with RemoteAddressAccessor

use of com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor in project pinpoint by naver.

the class SocketChannelFrameHandlerConstructInterceptor method after.

@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
    if (!validate(target)) {
        return;
    }
    String localAddress = RabbitMQClientConstants.UNKNOWN;
    String remoteAddress = RabbitMQClientConstants.UNKNOWN;
    if (target instanceof SocketChannelFrameHandler) {
        SocketChannelFrameHandler frameHandler = (SocketChannelFrameHandler) target;
        localAddress = HostAndPort.toHostAndPortString(frameHandler.getLocalAddress().getHostAddress(), frameHandler.getLocalPort());
        remoteAddress = HostAndPort.toHostAndPortString(frameHandler.getAddress().getHostAddress(), frameHandler.getPort());
    }
    ((LocalAddressAccessor) target)._$PINPOINT$_setLocalAddress(localAddress);
    ((RemoteAddressAccessor) target)._$PINPOINT$_setRemoteAddress(remoteAddress);
}
Also used : LocalAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.LocalAddressAccessor) SocketChannelFrameHandler(com.rabbitmq.client.impl.nio.SocketChannelFrameHandler) RemoteAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor)

Example 5 with RemoteAddressAccessor

use of com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor in project pinpoint by naver.

the class ChannelBasicPublishInterceptor method after.

@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
    if (isDebug) {
        logger.afterInterceptor(target, args);
    }
    if (!validate(target, args)) {
        return;
    }
    final Trace trace = traceContext.currentTraceObject();
    if (trace == null) {
        return;
    }
    try {
        String exchange = (String) args[0];
        String routingKey = (String) args[1];
        if (exchange == null || exchange.equals("")) {
            exchange = RabbitMQClientConstants.UNKNOWN;
        }
        SpanEventRecorder recorder = trace.currentSpanEventRecorder();
        recorder.recordApi(descriptor);
        String endPoint = RabbitMQClientConstants.UNKNOWN;
        // Producer's endPoint should be the socket address of where the producer is actually connected to.
        final Connection connection = ((Channel) target).getConnection();
        if (connection instanceof AMQConnection) {
            AMQConnection amqConnection = (AMQConnection) connection;
            FrameHandler frameHandler = amqConnection.getFrameHandler();
            if (frameHandler instanceof RemoteAddressAccessor) {
                endPoint = ((RemoteAddressAccessor) frameHandler)._$PINPOINT$_getRemoteAddress();
            }
        }
        recorder.recordEndPoint(endPoint);
        // DestinationId is used to render the virtual queue node.
        // We choose the exchange name as the logical name of the queue node.
        recorder.recordDestinationId("exchange-" + exchange);
        recorder.recordAttribute(RabbitMQClientConstants.RABBITMQ_EXCHANGE_ANNOTATION_KEY, exchange);
        recorder.recordAttribute(RabbitMQClientConstants.RABBITMQ_ROUTINGKEY_ANNOTATION_KEY, routingKey);
        recorder.recordException(throwable);
    } finally {
        trace.traceBlockEnd();
    }
}
Also used : Trace(com.navercorp.pinpoint.bootstrap.context.Trace) FrameHandler(com.rabbitmq.client.impl.FrameHandler) AMQConnection(com.rabbitmq.client.impl.AMQConnection) SpanEventRecorder(com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder) Channel(com.rabbitmq.client.Channel) AMQConnection(com.rabbitmq.client.impl.AMQConnection) Connection(com.rabbitmq.client.Connection) RemoteAddressAccessor(com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor)

Aggregations

RemoteAddressAccessor (com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.RemoteAddressAccessor)5 LocalAddressAccessor (com.navercorp.pinpoint.plugin.rabbitmq.client.field.accessor.LocalAddressAccessor)4 FrameHandler (com.rabbitmq.client.impl.FrameHandler)3 AMQConnection (com.rabbitmq.client.impl.AMQConnection)2 SpanEventRecorder (com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder)1 Trace (com.navercorp.pinpoint.bootstrap.context.Trace)1 Channel (com.rabbitmq.client.Channel)1 Connection (com.rabbitmq.client.Connection)1 SocketChannelFrameHandler (com.rabbitmq.client.impl.nio.SocketChannelFrameHandler)1 Socket (java.net.Socket)1