use of com.newrelic.agent.introspec.TraceSegment in project newrelic-java-agent by newrelic.
the class PlayAsyncHttpClientTests method testWithHeaders.
@Test
public void testWithHeaders() throws Exception {
Introspector introspector = InstrumentationTestRunner.getIntrospector();
URI endpoint = server.getEndPoint();
String host = endpoint.getHost();
String url = endpoint.toURL().toExternalForm();
final CountDownLatch latch = new CountDownLatch(1);
final AtomicInteger result = new AtomicInteger();
makeAsyncRequestWithHeaders(url + "?no-transaction=true", standaloneWSResponse -> {
result.set(standaloneWSResponse.status());
latch.countDown();
});
latch.await(30, TimeUnit.SECONDS);
assertEquals(200, result.get());
// transaction
assertEquals(1, introspector.getFinishedTransactionCount(TimeUnit.SECONDS.toMillis(30)));
String txName = introspector.getTransactionNames().iterator().next();
// scoped metrics
assertEquals(1, MetricsHelper.getScopedMetricCount(txName, "External/" + host + "/PlayWS/get"));
// unscoped metrics
assertEquals(1, MetricsHelper.getUnscopedMetricCount("External/" + host + "/PlayWS/get"));
assertEquals(1, MetricsHelper.getUnscopedMetricCount("External/" + host + "/all"));
assertEquals(1, MetricsHelper.getUnscopedMetricCount("External/all"));
assertEquals(1, MetricsHelper.getUnscopedMetricCount("External/allOther"));
// events
Collection<TransactionEvent> transactionEvents = introspector.getTransactionEvents(txName);
assertEquals(1, transactionEvents.size());
TransactionEvent transactionEvent = transactionEvents.iterator().next();
assertEquals(1, transactionEvent.getExternalCallCount());
assertTrue(transactionEvent.getExternalDurationInSec() > 0);
// traces
Collection<TransactionTrace> traces = introspector.getTransactionTracesForTransaction(txName);
assertEquals(1, traces.size());
TransactionTrace trace = traces.iterator().next();
for (TraceSegment segment : trace.getInitialTraceSegment().getChildren()) {
Map<String, Object> attributes = segment.getTracerAttributes();
if (attributes.get("async_context").equals("segment-api")) {
assertEquals("", segment.getMethodName());
assertEquals("PlayWS", segment.getClassName());
assertEquals("External/" + host + "/PlayWS/get", segment.getName());
assertEquals(url, segment.getUri());
assertEquals(1, segment.getCallCount());
}
}
// external request information
Collection<ExternalRequest> externalRequests = introspector.getExternalRequests(txName);
assertEquals(1, externalRequests.size());
ExternalRequest externalRequest = externalRequests.iterator().next();
assertEquals(1, externalRequest.getCount());
assertEquals(host, externalRequest.getHostname());
assertEquals("PlayWS", externalRequest.getLibrary());
assertEquals("get", externalRequest.getOperation());
}
use of com.newrelic.agent.introspec.TraceSegment in project newrelic-java-agent by newrelic.
the class ShadedAsyncHttpClient2_1_0Tests method testTxnWithOnComplete.
@Test
public void testTxnWithOnComplete() throws Exception {
Introspector introspector = InstrumentationTestRunner.getIntrospector();
URI endpoint = server.getEndPoint();
String host = endpoint.getHost();
String url = endpoint.toURL().toExternalForm();
int status = makeAynscRequestWithOnComplete(url + "?no-transaction=true");
assertEquals(200, status);
// transaction
assertEquals(1, introspector.getFinishedTransactionCount());
String txName = introspector.getTransactionNames().iterator().next();
// events
Collection<TransactionEvent> transactionEvents = introspector.getTransactionEvents(txName);
assertEquals(1, transactionEvents.size());
TransactionEvent transactionEvent = transactionEvents.iterator().next();
// attribute added in onCompleted method of future
assertEquals(1, transactionEvent.getAttributes().size());
assertEquals("test", transactionEvent.getAttributes().get("key"));
// traces
Collection<TransactionTrace> traces = introspector.getTransactionTracesForTransaction(txName);
assertEquals(1, traces.size());
TransactionTrace trace = traces.iterator().next();
for (TraceSegment segment : trace.getInitialTraceSegment().getChildren()) {
Map<String, Object> attributes = segment.getTracerAttributes();
if (attributes.get("async_context").equals("External")) {
assertEquals("", segment.getMethodName());
assertEquals("External Request", segment.getClassName());
assertEquals("External/" + host + "/AsyncHttpClient/onCompleted", segment.getName());
assertEquals(url, segment.getUri());
assertEquals(1, segment.getCallCount());
}
assertEquals("test", attributes.get("key"));
}
}
use of com.newrelic.agent.introspec.TraceSegment in project newrelic-java-agent by newrelic.
the class RabbitMQTest method assertProduceConsumeTraceAttrs.
private void assertProduceConsumeTraceAttrs(TransactionTrace trace, String exchangeName, String replyTo, String correlationId, Map<String, Object> headers) {
// Collect all segments
Map<String, TraceSegment> segments = new HashMap<>();
Queue<TraceSegment> queue = new LinkedList<>();
queue.offer(trace.getInitialTraceSegment());
while (!queue.isEmpty()) {
TraceSegment segment = queue.poll();
segments.put(segment.getName(), segment);
queue.addAll(segment.getChildren());
}
TraceSegment produceSegment = segments.get("MessageBroker/RabbitMQ/Exchange/Consume/Named/" + exchangeName);
assertTrue(produceSegment.getTracerAttributes().containsKey("message.routingKey"));
assertEquals(replyTo, produceSegment.getTracerAttributes().get("message.replyTo"));
assertEquals(correlationId, produceSegment.getTracerAttributes().get("message.correlationId"));
for (String key : headers.keySet()) {
assertNotNull(produceSegment.getTracerAttributes().get("message." + key));
}
TraceSegment consumeSegment = segments.get("MessageBroker/RabbitMQ/Exchange/Consume/Named/" + exchangeName);
assertTrue(consumeSegment.getTracerAttributes().containsKey("message.routingKey"));
assertTrue(consumeSegment.getTracerAttributes().containsKey("message.queueName"));
assertEquals(replyTo, consumeSegment.getTracerAttributes().get("message.replyTo"));
for (String key : headers.keySet()) {
assertNotNull(consumeSegment.getTracerAttributes().get("message." + key));
}
}
Aggregations