use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class ExternalsForTransactionTest method testcheckExternalsSameHost.
@Test
public void testcheckExternalsSameHost() {
TransactionStats stats = new TransactionStats();
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/all").recordResponseTime(10, TimeUnit.MILLISECONDS);
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/allWeb").recordResponseTime(10, TimeUnit.MILLISECONDS);
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/myhost/all").recordResponseTime(10, TimeUnit.MILLISECONDS);
stats.getScopedStats().getOrCreateResponseTimeStats("External/myhost/mylib").recordResponseTime(10, TimeUnit.MILLISECONDS);
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/all").recordResponseTime(5, TimeUnit.MILLISECONDS);
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/allWeb").recordResponseTime(5, TimeUnit.MILLISECONDS);
stats.getUnscopedStats().getOrCreateResponseTimeStats("External/myhost/all").recordResponseTime(5, TimeUnit.MILLISECONDS);
stats.getScopedStats().getOrCreateResponseTimeStats("External/myhost/secondlib").recordResponseTime(5, TimeUnit.MILLISECONDS);
Collection<Tracer> tracers = new ArrayList<>();
tracers.add(createTracer("External/myhost/mylib", "External/myhost/mylib/myOp"));
tracers.add(createTracer("External/myhost/secondlib", "External/myhost/secondlib/thirdOp"));
Collection<ExternalRequestImpl> actual = ExternalsForTransaction.checkExternals(true, stats, tracers);
Assert.assertEquals(2, actual.size());
Iterator<ExternalRequestImpl> it = actual.iterator();
while (it.hasNext()) {
ExternalRequestImpl impl = it.next();
Assert.assertEquals(1, impl.getCount());
if (impl.getMetricName().equals("External/myhost/mylib")) {
Assert.assertEquals("myhost", impl.getHostname());
Assert.assertEquals("mylib", impl.getLibrary());
Assert.assertEquals("myOp", impl.getOperation());
} else {
Assert.assertEquals("myhost", impl.getHostname());
Assert.assertEquals("secondlib", impl.getLibrary());
Assert.assertEquals("thirdOp", impl.getOperation());
}
}
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class IntrospectorImplTest method testOneTracerInTransaction.
@Test
public void testOneTracerInTransaction() {
// transaction
Transaction.getTransaction();
long startNs = System.nanoTime();
Tracer rootTracer = createOtherTracer("rootOnly");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
rootTracer.finish(RETURN_OPCODE, 0);
long diffNsRootOnly = System.nanoTime() - startNs;
// data check
Collection<String> txNames = impl.getTransactionNames();
Assert.assertEquals(1, txNames.size());
Assert.assertEquals("OtherTransaction/rootOnly", txNames.iterator().next());
Map<String, TracedMetricData> metrics = impl.getMetricsForTransaction("OtherTransaction/rootOnly");
Assert.assertEquals(1, metrics.size());
TracedMetricData data = metrics.get("Java/java.lang.Object/rootOnly");
Assert.assertEquals("Java/java.lang.Object/rootOnly", data.getName());
Assert.assertEquals(1, data.getCallCount());
Assert.assertEquals(data.getTotalTimeInSec(), data.getExclusiveTimeInSec(), .000000001);
Assert.assertTrue(data.getTotalTimeInSec() < (diffNsRootOnly / 1000000000.0));
Collection<com.newrelic.agent.introspec.TransactionEvent> events = impl.getTransactionEvents("OtherTransaction/rootOnly");
Assert.assertNotNull(events);
Assert.assertEquals(1, events.size());
com.newrelic.agent.introspec.TransactionEvent event = events.iterator().next();
Assert.assertEquals("OtherTransaction/rootOnly", event.getName());
Assert.assertEquals(0, event.getDatabaseCallCount(), .00001);
Assert.assertEquals(0, event.getExternalCallCount(), .00001);
Assert.assertEquals(event.getDurationInSec(), data.getTotalTimeInSec(), .00000001);
Assert.assertEquals(event.getDurationInSec(), event.getTotalTimeInSec(), .0000001);
Map<String, TracedMetricData> unscoped = impl.getUnscopedMetrics();
Assert.assertNotNull(unscoped);
TracedMetricData stats = unscoped.get("OtherTransactionTotalTime");
Assert.assertNotNull(stats);
Assert.assertEquals(1, stats.getCallCount());
Assert.assertEquals(event.getDurationInSec(), stats.getTotalTimeInSec(), .0000001);
stats = unscoped.get("OtherTransactionTotalTime/rootOnly");
Assert.assertNotNull(stats);
Assert.assertEquals(1, stats.getCallCount());
Assert.assertEquals(event.getDurationInSec(), stats.getTotalTimeInSec(), .0000001);
stats = unscoped.get("OtherTransaction/rootOnly");
Assert.assertNotNull(stats);
Assert.assertEquals(1, stats.getCallCount());
Assert.assertEquals(event.getDurationInSec(), stats.getTotalTimeInSec(), .0000001);
stats = unscoped.get("OtherTransaction/all");
Assert.assertNotNull(stats);
Assert.assertEquals(1, stats.getCallCount());
Assert.assertEquals(event.getDurationInSec(), stats.getTotalTimeInSec(), .0000001);
// second transaction
startNs = System.nanoTime();
rootTracer = createOtherTracer("secondTransaction");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
rootTracer.finish(RETURN_OPCODE, 0);
long diffNsSecondTransaction = System.nanoTime() - startNs;
// data check
txNames = impl.getTransactionNames();
Assert.assertEquals(2, txNames.size());
metrics = impl.getMetricsForTransaction("OtherTransaction/rootOnly");
Assert.assertEquals(1, metrics.size());
data = metrics.get("Java/java.lang.Object/rootOnly");
Assert.assertEquals("Java/java.lang.Object/rootOnly", data.getName());
Assert.assertEquals(1, data.getCallCount());
Assert.assertEquals(data.getTotalTimeInSec(), data.getExclusiveTimeInSec(), .000000001);
final double diffInSeconds = diffNsRootOnly / 1000000000.0;
final String msg = "Total duration in seconds is greater than diff. Duration in sec " + data.getTotalTimeInSec() + " diff: " + diffInSeconds;
Assert.assertTrue(msg, data.getTotalTimeInSec() < diffInSeconds);
metrics = impl.getMetricsForTransaction("OtherTransaction/secondTransaction");
Assert.assertEquals(1, metrics.size());
data = metrics.get("Java/java.lang.Object/secondTransaction");
Assert.assertEquals("Java/java.lang.Object/secondTransaction", data.getName());
Assert.assertEquals(1, data.getCallCount());
Assert.assertEquals(data.getTotalTimeInSec(), data.getExclusiveTimeInSec(), .000000001);
Assert.assertTrue(data.getTotalTimeInSec() < (diffNsSecondTransaction / 1000000000.0));
events = impl.getTransactionEvents("OtherTransaction/secondTransaction");
Assert.assertNotNull(events);
Assert.assertEquals(1, events.size());
event = events.iterator().next();
Assert.assertEquals("OtherTransaction/secondTransaction", event.getName());
Assert.assertEquals(0, event.getDatabaseCallCount(), .00001);
Assert.assertEquals(0, event.getExternalCallCount(), .00001);
Assert.assertEquals(event.getDurationInSec(), data.getTotalTimeInSec(), .00000001);
Assert.assertEquals(event.getDurationInSec(), event.getTotalTimeInSec(), .0000001);
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class IntrospectorImplTest method testMultChildrenTransaction.
@Test
public void testMultChildrenTransaction() {
// transaction
Transaction.getTransaction();
long startNs = System.nanoTime();
Tracer rootTracer = createOtherTracer("rootOnly");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
Tracer child1 = createDefaultTracer("default1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child1);
Tracer child2 = createDefaultTracer("default2");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child2);
child2.finish(RETURN_OPCODE, 0);
child1.finish(RETURN_OPCODE, 0);
rootTracer.finish(RETURN_OPCODE, 0);
long diffNs = System.nanoTime() - startNs;
// data check
Collection<String> txNames = impl.getTransactionNames();
Assert.assertEquals(1, txNames.size());
Assert.assertEquals("OtherTransaction/rootOnly", txNames.iterator().next());
Map<String, TracedMetricData> metrics = impl.getMetricsForTransaction("OtherTransaction/rootOnly");
Assert.assertEquals(3, metrics.size());
TracedMetricData init = metrics.get("Java/java.lang.Object/rootOnly");
Assert.assertNotNull(init);
Assert.assertEquals("Java/java.lang.Object/rootOnly", init.getName());
Assert.assertEquals(1, init.getCallCount());
Assert.assertTrue(init.getTotalTimeInSec() > init.getExclusiveTimeInSec());
Assert.assertTrue(init.getTotalTimeInSec() < (diffNs / 1000000000.0));
TracedMetricData data1 = metrics.get("Custom/default1");
Assert.assertNotNull(data1);
Assert.assertEquals("Custom/default1", data1.getName());
Assert.assertEquals(1, data1.getCallCount());
Assert.assertNotEquals(data1.getTotalTimeInSec(), data1.getExclusiveTimeInSec(), .000000001);
Assert.assertTrue(data1.getTotalTimeInSec() < init.getTotalTimeInSec());
TracedMetricData data2 = metrics.get("Custom/default2");
Assert.assertNotNull(data2);
Assert.assertEquals("Custom/default2", data2.getName());
Assert.assertEquals(1, data2.getCallCount());
Assert.assertEquals(data2.getTotalTimeInSec(), data2.getExclusiveTimeInSec(), .000000001);
Assert.assertEquals(data2.getTotalTimeInSec(), (data1.getTotalTimeInSec() - data1.getExclusiveTimeInSec()), .00000001);
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class IntrospectorImplTest method testMultipleTracersInTransaction.
@Test
public void testMultipleTracersInTransaction() {
// transaction
Transaction.getTransaction();
long startNs = System.nanoTime();
Tracer rootTracer = createOtherTracer("rootOnly1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
Tracer child1 = createDefaultTracer("default1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child1);
child1.finish(RETURN_OPCODE, 0);
child1 = createDefaultTracer("default1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child1);
child1.finish(RETURN_OPCODE, 0);
rootTracer.finish(RETURN_OPCODE, 0);
long diffNs = System.nanoTime() - startNs;
// data check
Collection<String> txNames = impl.getTransactionNames();
Assert.assertEquals(1, txNames.size());
Assert.assertEquals("OtherTransaction/rootOnly1", txNames.iterator().next());
Map<String, TracedMetricData> metrics = impl.getMetricsForTransaction("OtherTransaction/rootOnly1");
Assert.assertEquals(2, metrics.size());
TracedMetricData data = metrics.get("Java/java.lang.Object/rootOnly1");
Assert.assertNotNull(data);
Assert.assertEquals("Java/java.lang.Object/rootOnly1", data.getName());
Assert.assertEquals(1, data.getCallCount());
Assert.assertTrue(data.getTotalTimeInSec() > data.getExclusiveTimeInSec());
Assert.assertTrue(data.getTotalTimeInSec() < (diffNs / 1000000000.0));
data = metrics.get("Custom/default1");
Assert.assertNotNull(data);
Assert.assertEquals("Custom/default1", data.getName());
Assert.assertEquals(2, data.getCallCount());
Assert.assertEquals(data.getTotalTimeInSec(), data.getExclusiveTimeInSec(), .000000001);
Assert.assertTrue(data.getTotalTimeInSec() < (diffNs / 1000000000.0));
// second transaction - same as first
Transaction.clearTransaction();
Transaction.getTransaction();
rootTracer = createOtherTracer("rootOnly1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
child1 = createDefaultTracer("default1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child1);
child1.finish(RETURN_OPCODE, 0);
child1 = createDefaultTracer("default1");
Transaction.getTransaction().getTransactionActivity().tracerStarted(child1);
child1.finish(RETURN_OPCODE, 0);
rootTracer.finish(RETURN_OPCODE, 0);
// data check
Assert.assertEquals(2, impl.getFinishedTransactionCount());
txNames = impl.getTransactionNames();
Assert.assertEquals(1, txNames.size());
Assert.assertEquals("OtherTransaction/rootOnly1", txNames.iterator().next());
metrics = impl.getMetricsForTransaction("OtherTransaction/rootOnly1");
Assert.assertEquals(2, metrics.size());
data = metrics.get("Java/java.lang.Object/rootOnly1");
Assert.assertNotNull(data);
Assert.assertEquals("Java/java.lang.Object/rootOnly1", data.getName());
Assert.assertEquals(2, data.getCallCount());
Assert.assertTrue(data.getTotalTimeInSec() > data.getExclusiveTimeInSec());
data = metrics.get("Custom/default1");
Assert.assertNotNull(data);
Assert.assertEquals("Custom/default1", data.getName());
Assert.assertEquals(4, data.getCallCount());
Assert.assertEquals(data.getTotalTimeInSec(), data.getExclusiveTimeInSec(), .000000001);
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class IntrospectorImplTest method testErrorInTx.
@Test
public void testErrorInTx() {
// transaction
Transaction.getTransaction();
Tracer rootTracer = createOtherTracer("rootOnly");
Transaction.getTransaction().getTransactionActivity().tracerStarted(rootTracer);
Throwable throwable = new Throwable("MyTest");
Transaction.getTransaction().setThrowable(throwable, TransactionErrorPriority.TRACER, false);
rootTracer.finish(RETURN_OPCODE, 0);
// data check
Collection<String> txNames = impl.getTransactionNames();
Assert.assertEquals(1, txNames.size());
Assert.assertEquals("OtherTransaction/rootOnly", txNames.iterator().next());
Collection<Error> errors1 = impl.getErrors();
Collection<Error> errors2 = impl.getErrorsForTransaction("OtherTransaction/rootOnly");
Assert.assertEquals(1, errors1.size());
Assert.assertEquals(1, errors2.size());
Error error1 = errors1.iterator().next();
Assert.assertEquals(error1, errors2.iterator().next());
Assert.assertEquals("MyTest", error1.getErrorMessage());
Assert.assertEquals(throwable, error1.getThrowable());
Assert.assertEquals(1, impl.getTransactionEvents(txNames.iterator().next()).size());
Collection<ErrorEvent> events = impl.getErrorEvents();
Assert.assertEquals(1, events.size());
ErrorEvent event1 = events.iterator().next();
Assert.assertEquals("TransactionError", event1.getType());
Assert.assertEquals("MyTest", event1.getErrorMessage());
Assert.assertEquals("java.lang.Throwable", event1.getErrorClass());
Assert.assertEquals("OtherTransaction/rootOnly", event1.getTransactionName());
Collection<ErrorEvent> txEvents = impl.getErrorEventsForTransaction("OtherTransaction/rootOnly");
Assert.assertEquals(1, txEvents.size());
Event event2 = events.iterator().next();
Assert.assertEquals("TransactionError", event2.getType());
Assert.assertEquals(event1, event2);
}
Aggregations