Search in sources :

Example 91 with Tracer

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());
        }
    }
}
Also used : TransactionStats(com.newrelic.agent.stats.TransactionStats) Tracer(com.newrelic.agent.tracers.Tracer) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 92 with Tracer

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);
}
Also used : TracedMetricData(com.newrelic.agent.introspec.TracedMetricData) Tracer(com.newrelic.agent.tracers.Tracer) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) Test(org.junit.Test)

Example 93 with Tracer

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);
}
Also used : TracedMetricData(com.newrelic.agent.introspec.TracedMetricData) Tracer(com.newrelic.agent.tracers.Tracer) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) Test(org.junit.Test)

Example 94 with Tracer

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);
}
Also used : TracedMetricData(com.newrelic.agent.introspec.TracedMetricData) Tracer(com.newrelic.agent.tracers.Tracer) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) Test(org.junit.Test)

Example 95 with Tracer

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);
}
Also used : Tracer(com.newrelic.agent.tracers.Tracer) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) ErrorEvent(com.newrelic.agent.introspec.ErrorEvent) Error(com.newrelic.agent.introspec.Error) Event(com.newrelic.agent.introspec.Event) ErrorEvent(com.newrelic.agent.introspec.ErrorEvent) Test(org.junit.Test)

Aggregations

Tracer (com.newrelic.agent.tracers.Tracer)263 Test (org.junit.Test)195 OtherRootTracer (com.newrelic.agent.tracers.OtherRootTracer)104 DefaultTracer (com.newrelic.agent.tracers.DefaultTracer)99 Transaction (com.newrelic.agent.Transaction)86 BasicRequestRootTracer (com.newrelic.agent.tracers.servlet.BasicRequestRootTracer)54 ClassMethodSignature (com.newrelic.agent.tracers.ClassMethodSignature)41 ExitTracer (com.newrelic.agent.bridge.ExitTracer)39 TokenImpl (com.newrelic.agent.TokenImpl)35 StartAndThenLink (com.newrelic.agent.TransactionAsyncUtility.StartAndThenLink)31 OtherRootSqlTracer (com.newrelic.agent.tracers.OtherRootSqlTracer)25 TransactionData (com.newrelic.agent.TransactionData)24 HashMap (java.util.HashMap)24 SqlTracer (com.newrelic.agent.tracers.SqlTracer)20 ArrayList (java.util.ArrayList)19 UltraLightTracer (com.newrelic.agent.tracers.UltraLightTracer)17 TransactionStats (com.newrelic.agent.stats.TransactionStats)16 MockRPMService (com.newrelic.agent.MockRPMService)15 JSONArray (org.json.simple.JSONArray)15 JSONObject (org.json.simple.JSONObject)14