Search in sources :

Example 76 with Tracer

use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.

the class SqlTraceServiceTest method serverConfigChanges.

@Test
public void serverConfigChanges() throws Exception {
    Map<String, Object> configMap = createStagingMap();
    Map<String, Object> sqlMap = createMap();
    sqlMap.put("enabled", true);
    configMap.put(AgentConfigImpl.SLOW_SQL, sqlMap);
    createServiceManager(configMap);
    // run a transaction
    Tracer requestDispatcherTracer = startDispatcherTracer();
    long duration = TimeUnit.NANOSECONDS.convert(getExplainThresholdInMillis() + 1, TimeUnit.MILLISECONDS);
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dudette where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    requestDispatcherTracer.finish(Opcodes.RETURN, null);
    // run a harvest
    MockHarvestService mockharvestService = (MockHarvestService) ServiceFactory.getHarvestService();
    mockharvestService.runHarvest(ServiceFactory.getConfigService().getDefaultAgentConfig().getApplicationName(), new StatsEngineImpl());
    MockRPMService mockRPMService = (MockRPMService) ServiceFactory.getRPMService();
    List<SqlTrace> sqlTraces = mockRPMService.getSqlTraces();
    // verify results
    Assert.assertEquals(2, sqlTraces.size());
    Map<String, Object> serverData = createMap();
    Map<String, Object> agentMap = createMap();
    serverData.put(AgentConfigFactory.AGENT_CONFIG, agentMap);
    agentMap.put(AgentConfigFactory.SLOW_SQL_PREFIX + "enabled", false);
    MockRPMServiceManager rpmServiceManager = (MockRPMServiceManager) ServiceFactory.getRPMServiceManager();
    ConnectionConfigListener connectionConfigListener = rpmServiceManager.getConnectionConfigListener();
    connectionConfigListener.connected(mockRPMService, serverData);
    // run a transaction
    requestDispatcherTracer = startDispatcherTracer();
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dudette where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    requestDispatcherTracer.finish(Opcodes.RETURN, null);
    // run a harvest
    mockharvestService.runHarvest(ServiceFactory.getConfigService().getDefaultAgentConfig().getApplicationName(), new StatsEngineImpl());
    sqlTraces = mockRPMService.getSqlTraces();
    // verify results
    Assert.assertEquals(0, sqlTraces.size());
    serverData = createMap();
    agentMap = createMap();
    serverData.put(AgentConfigFactory.AGENT_CONFIG, agentMap);
    agentMap.put(AgentConfigFactory.SLOW_SQL_PREFIX + "enabled", true);
    connectionConfigListener.connected(mockRPMService, serverData);
    // run a transaction
    requestDispatcherTracer = startDispatcherTracer();
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dude where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    startSqlTracer("select * from dudette where somevalue = 'cool'", duration).finish(Opcodes.RETURN, null);
    requestDispatcherTracer.finish(Opcodes.RETURN, null);
    // run a harvest
    mockharvestService.runHarvest(ServiceFactory.getConfigService().getDefaultAgentConfig().getApplicationName(), new StatsEngineImpl());
    sqlTraces = mockRPMService.getSqlTraces();
    // verify results
    Assert.assertEquals(2, sqlTraces.size());
}
Also used : StatsEngineImpl(com.newrelic.agent.stats.StatsEngineImpl) SqlTracer(com.newrelic.agent.tracers.SqlTracer) OtherRootSqlTracer(com.newrelic.agent.tracers.OtherRootSqlTracer) BasicRequestRootTracer(com.newrelic.agent.tracers.servlet.BasicRequestRootTracer) Tracer(com.newrelic.agent.tracers.Tracer) ConnectionConfigListener(com.newrelic.agent.ConnectionConfigListener) MockHarvestService(com.newrelic.agent.MockHarvestService) MockRPMServiceManager(com.newrelic.agent.MockRPMServiceManager) MockRPMService(com.newrelic.agent.MockRPMService) Test(org.junit.Test)

Example 77 with Tracer

use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.

the class W3CTraceContextCrossAgentTest method testTraceContext.

@Test
public void testTraceContext() throws Exception {
    String testName = (String) testData.get("test_name");
    String accountKey = (String) testData.get("trusted_account_key");
    String accountId = (String) testData.get("account_id");
    String transportType = (String) testData.get("transport_type");
    Boolean webTransaction = (Boolean) testData.get("web_transaction");
    Boolean raisesException = (Boolean) testData.get("raises_exception");
    Boolean forceSampledTrue = (Boolean) testData.get("force_sampled_true");
    Boolean spanEventsEnabled = (Boolean) testData.get("span_events_enabled");
    replaceConfig(spanEventsEnabled);
    System.out.println("Running test: " + testName);
    JSONArray outbound_payloads = (JSONArray) testData.get("outbound_payloads");
    JSONArray inbound_payloads = (JSONArray) testData.get("inbound_headers");
    List expectedMetrics = (List) testData.get("expected_metrics");
    Map<String, Object> intrinsics = (Map<String, Object>) testData.get("intrinsics");
    Map<String, Object> commonAssertions = intrinsics == null ? Collections.<String, Object>emptyMap() : (Map<String, Object>) intrinsics.get("common");
    List targetEvents = intrinsics == null ? Collections.emptyList() : (ArrayList) intrinsics.get("target_events");
    Map<String, Object> transactionAssertions = intrinsics == null ? Collections.<String, Object>emptyMap() : (Map<String, Object>) intrinsics.get("Transaction");
    Map<String, Object> spanAssertions = intrinsics == null ? Collections.<String, Object>emptyMap() : (Map<String, Object>) intrinsics.get("Span");
    Map<String, Object> connectInfo = Maps.newHashMap();
    connectInfo.put(DistributedTracingConfig.ACCOUNT_ID, accountId);
    connectInfo.put(DistributedTracingConfig.TRUSTED_ACCOUNT_KEY, accountKey);
    connectInfo.put(DistributedTracingConfig.PRIMARY_APPLICATION_ID, "2827902");
    AgentConfig agentConfig = AgentHelper.createAgentConfig(true, Collections.<String, Object>emptyMap(), connectInfo);
    distributedTraceService.connected(null, agentConfig);
    Transaction.clearTransaction();
    TransactionActivity.clear();
    spanEventService.clearReservoir();
    Transaction tx = Transaction.getTransaction();
    TransactionData transactionData = new TransactionData(tx, 0);
    TransactionStats transactionStats = transactionData.getTransaction().getTransactionActivity().getTransactionStats();
    eventPool = spanEventService.getOrCreateDistributedSamplingReservoir(APP_NAME);
    List<String> parents = Lists.newArrayList();
    List<String> states = Lists.newArrayList();
    List<String> newrelic = Lists.newArrayList();
    if (inbound_payloads != null) {
        for (Object payload : inbound_payloads) {
            JSONObject j = (JSONObject) payload;
            if (j.get("traceparent") != null) {
                parents.addAll(Lists.newArrayList(String.valueOf(j.get("traceparent"))));
            }
            if (j.get("tracestate") != null) {
                states.addAll(Lists.newArrayList(String.valueOf(j.get("tracestate"))));
            }
            if (j.get("newrelic") != null) {
                newrelic.addAll(Lists.newArrayList(String.valueOf(j.get("newrelic"))));
            }
        }
    }
    MockHttpRequest httpRequest = new MockHttpRequest();
    for (String parent : parents) {
        httpRequest.setHeader("traceparent", parent);
    }
    for (String state : states) {
        httpRequest.setHeader("tracestate", state);
    }
    for (String header : newrelic) {
        httpRequest.setHeader("newrelic", header);
    }
    Tracer rootTracer;
    if (webTransaction) {
        rootTracer = TransactionAsyncUtility.createAndStartDispatcherTracer(this, "WebTransaction", httpRequest);
    } else {
        rootTracer = TransactionAsyncUtility.createOtherTracer("OtherTransaction");
        tx.getTransactionActivity().tracerStarted(rootTracer);
        tx.provideRawHeaders(httpRequest);
    }
    if (raisesException) {
        tx.setThrowable(new Throwable(), TransactionErrorPriority.API, false);
    }
    setTransportType(tx, transportType);
    if (forceSampledTrue && tx.getPriority() < 1) {
        tx.setPriorityIfNotNull(new Random().nextFloat() + 1.0f);
    }
    if (outbound_payloads != null) {
        for (Object assertion : outbound_payloads) {
            MockHttpResponse mockHttpResponse = new MockHttpResponse();
            tx.getCrossProcessState().processOutboundRequestHeaders(mockHttpResponse);
            JSONObject payloadAssertions = (JSONObject) assertion;
            String traceparent = mockHttpResponse.getHeader("traceparent");
            String tracestate = mockHttpResponse.getHeader("tracestate");
            if (traceparent != null) {
                W3CTraceParent traceParent = W3CTraceParentParser.parseHeaders(Collections.singletonList(traceparent));
                assertOutboundTraceParentPayload(payloadAssertions, traceParent);
            } else {
                assertOutboundTraceParentPayload(payloadAssertions, null);
            }
            if (tracestate != null) {
                assertOutboundTraceStatePayload(payloadAssertions, W3CTraceStateSupport.parseHeaders(Collections.singletonList(mockHttpResponse.getHeader("tracestate"))));
            } else {
                assertOutboundTraceStatePayload(payloadAssertions, null);
            }
        }
    }
    rootTracer.finish(Opcodes.RETURN, 0);
    List<SpanEvent> spans = eventPool.asList();
    TransactionEvent transactionEvent = serviceManager.getTransactionEventsService().createEvent(transactionData, transactionStats, "wat");
    JSONObject txnEvents = serializeAndParseEvents(transactionEvent);
    StatsEngine statsEngine = statsService.getStatsEngineForHarvest(APP_NAME);
    assertExpectedMetrics(expectedMetrics, statsEngine);
    for (Object event : targetEvents) {
        if (event.toString().startsWith("Transaction") && transactionAssertions != null) {
            assertTransactionEvents(transactionAssertions, txnEvents);
            assertTransactionEvents(commonAssertions, txnEvents);
        } else if (event.toString().startsWith("Span") && spanAssertions != null) {
            assertSpanEvents(spanAssertions, spans);
            assertSpanEvents(commonAssertions, spans);
        }
    }
}
Also used : MockHttpRequest(com.newrelic.agent.tracers.servlet.MockHttpRequest) Tracer(com.newrelic.agent.tracers.Tracer) JSONArray(org.json.simple.JSONArray) TransactionEvent(com.newrelic.agent.service.analytics.TransactionEvent) JSONObject(org.json.simple.JSONObject) SpanEvent(com.newrelic.agent.model.SpanEvent) JSONObject(org.json.simple.JSONObject) MockHttpResponse(com.newrelic.agent.tracers.servlet.MockHttpResponse) Test(org.junit.Test)

Example 78 with Tracer

use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.

the class SlowQueryInfoTest method testDTAttributes.

@Test
public void testDTAttributes() {
    Map<String, Object> settings = new HashMap<>();
    Map<String, Object> dtMap = new HashMap<>();
    dtMap.put("enabled", true);
    settings.put("distributed_tracing", dtMap);
    Map<String, Object> spanConfig = new HashMap<>();
    spanConfig.put("collect_span_events", true);
    settings.put("span_events", spanConfig);
    setupServiceManager(settings);
    DistributedTraceServiceImpl dts = (DistributedTraceServiceImpl) ServiceFactory.getServiceManager().getDistributedTraceService();
    Map<String, Object> configMap = ImmutableMap.<String, Object>builder().put("distributed_tracing", ImmutableMap.builder().put("primary_application_id", "1app23").put("trusted_account_key", "1tak23").put("account_id", "1acct234").build()).build();
    dts.connected(null, AgentConfigFactory.createAgentConfig(configMap, null, null));
    Transaction.clearTransaction();
    Transaction transaction = Transaction.getTransaction();
    transaction.getTransactionActivity().tracerStarted(new OtherRootTracer(transaction, new ClassMethodSignature("class", "method", "desc"), null, new SimpleMetricNameFormat("test")));
    String inboundPayload = "{\n" + "  \"v\": [\n" + "    0,\n" + "    2\n" + "  ],\n" + "  \"d\": {\n" + "    \"ty\": \"App\",\n" + "    \"ac\": \"1acct789\",\n" + "    \"ap\": \"1app23\",\n" + "    \"id\": \"27856f70d3d314b7\",\n" + "    \"tr\": \"3221bf09aa0bcf0d\",\n" + "    \"tk\": \"1tak23\",\n" + "    \"pr\": 1.0002,\n" + "    \"sa\": true,\n" + "    \"tx\": \"123456\",\n" + "    \"ti\": 1482959525577\n" + "  }\n" + "}";
    transaction.acceptDistributedTracePayload(inboundPayload);
    TransactionData data = new TransactionData(transaction, 100);
    Tracer tracer = new DefaultTracer(transaction, new ClassMethodSignature("ClassName", "methodName", "methodDesc"), null, null, TracerFlags.DISPATCHER);
    String obfuscatedQuery = "select ? from ?";
    HashMap<String, Object> sqlMap = new HashMap<>();
    ServerProp serverProp = ServerProp.createPropObject(SqlTraceConfigImpl.DEFAULT_USE_LONGER_SQL_ID);
    sqlMap.put(SqlTraceConfigImpl.USE_LONGER_SQL_ID, serverProp);
    SqlTraceConfig sqlTraceConfig = SqlTraceConfigImpl.createSqlTraceConfig(sqlMap);
    SlowQueryInfo slowQueryInfo = new SlowQueryInfo(data, tracer, "select * from person", obfuscatedQuery, sqlTraceConfig);
    assertNotNull(transaction.getSpanProxy().getInboundDistributedTracePayload());
    Map<String, Object> parameters = slowQueryInfo.getParameters();
    assertEquals("App", parameters.get("parent.type"));
    assertEquals("1app23", parameters.get("parent.app"));
    assertEquals("1acct789", parameters.get("parent.account"));
    assertNotNull(parameters.get("parent.transportType"));
    assertNotNull(parameters.get("parent.transportDuration"));
    assertNotNull(parameters.get("guid"));
    assertEquals("3221bf09aa0bcf0d", parameters.get("traceId"));
    assertNotNull(parameters.get("priority"));
    assertEquals(true, parameters.get("sampled"));
}
Also used : HashMap(java.util.HashMap) DistributedTraceServiceImpl(com.newrelic.agent.tracing.DistributedTraceServiceImpl) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) Tracer(com.newrelic.agent.tracers.Tracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) SqlTraceConfig(com.newrelic.agent.config.SqlTraceConfig) Transaction(com.newrelic.agent.Transaction) ClassMethodSignature(com.newrelic.agent.tracers.ClassMethodSignature) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) TransactionData(com.newrelic.agent.TransactionData) ServerProp(com.newrelic.agent.config.ServerProp) SimpleMetricNameFormat(com.newrelic.agent.tracers.metricname.SimpleMetricNameFormat) Test(org.junit.Test)

Example 79 with Tracer

use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.

the class SlowQueryInfoTest method testLongerSqlId.

@Test
public void testLongerSqlId() {
    setupServiceManager(new HashMap<String, Object>());
    Transaction transaction = Transaction.getTransaction();
    HashMap<String, Object> sqlMap = new HashMap<>();
    ServerProp serverProp = ServerProp.createPropObject(!SqlTraceConfigImpl.DEFAULT_USE_LONGER_SQL_ID);
    sqlMap.put(SqlTraceConfigImpl.USE_LONGER_SQL_ID, serverProp);
    SqlTraceConfig sqlTraceConfig = SqlTraceConfigImpl.createSqlTraceConfig(sqlMap);
    MockDispatcher dispatcher = new MockDispatcher();
    dispatcher.setUri("http://jvm.agent.uri");
    transaction.setDispatcher(dispatcher);
    String obfuscatedQuery = "select ? from ?";
    TransactionData data = new TransactionData(transaction, 100);
    Tracer tracer = new DefaultTracer(transaction, new ClassMethodSignature("ClassName", "methodName", "methodDesc"), null, null, TracerFlags.DISPATCHER);
    SlowQueryInfo slowQueryInfo = new SlowQueryInfo(data, tracer, "select * from person", obfuscatedQuery, sqlTraceConfig);
    SqlTrace sqlTrace = slowQueryInfo.asSqlTrace();
    long hashedQuery = (long) obfuscatedQuery.hashCode();
    long longerHash = SlowQueryInfo.createLongerHashCode(hashedQuery);
    assertEquals(longerHash, sqlTrace.getId());
}
Also used : HashMap(java.util.HashMap) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) Tracer(com.newrelic.agent.tracers.Tracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) MockDispatcher(com.newrelic.agent.MockDispatcher) SqlTraceConfig(com.newrelic.agent.config.SqlTraceConfig) Transaction(com.newrelic.agent.Transaction) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) ClassMethodSignature(com.newrelic.agent.tracers.ClassMethodSignature) TransactionData(com.newrelic.agent.TransactionData) ServerProp(com.newrelic.agent.config.ServerProp) Test(org.junit.Test)

Example 80 with Tracer

use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.

the class SlowQueryInfoTest method testEmptyTxnUrlRequestUriDisabled.

@Test
public void testEmptyTxnUrlRequestUriDisabled() {
    Map<String, Object> attributeMap = new HashMap<>();
    attributeMap.put("exclude", "request.*");
    Map<String, Object> settings = new HashMap<>();
    settings.put("attributes", attributeMap);
    setupServiceManager(settings);
    SqlTraceConfig sqlTraceConfig = ServiceFactory.getConfigService().getDefaultAgentConfig().getSqlTraceConfig();
    Transaction transaction = Transaction.getTransaction();
    MockDispatcher dispatcher = new MockDispatcher();
    dispatcher.setUri("http://jvm.agent.uri");
    transaction.setDispatcher(dispatcher);
    TransactionData data = new TransactionData(transaction, 100);
    Tracer tracer = new DefaultTracer(transaction, new ClassMethodSignature("ClassName", "methodName", "methodDesc"), null, null, TracerFlags.DISPATCHER);
    SlowQueryInfo slowQueryInfo = new SlowQueryInfo(data, tracer, "select * from person", "select ? from ?", sqlTraceConfig);
    SqlTrace sqlTrace = slowQueryInfo.asSqlTrace();
    assertEquals(null, sqlTrace.getUri());
}
Also used : HashMap(java.util.HashMap) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) Tracer(com.newrelic.agent.tracers.Tracer) OtherRootTracer(com.newrelic.agent.tracers.OtherRootTracer) MockDispatcher(com.newrelic.agent.MockDispatcher) SqlTraceConfig(com.newrelic.agent.config.SqlTraceConfig) Transaction(com.newrelic.agent.Transaction) DefaultTracer(com.newrelic.agent.tracers.DefaultTracer) ClassMethodSignature(com.newrelic.agent.tracers.ClassMethodSignature) TransactionData(com.newrelic.agent.TransactionData) 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