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());
}
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);
}
}
}
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"));
}
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());
}
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());
}
Aggregations