use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class TracerToSpanEventTest method setup.
@Before
public void setup() {
transactionAgentAttributes = new HashMap<>();
transactionUserAttributes = new HashMap<>();
tracerAgentAttributes = new HashMap<>();
tracerUserAttributes = new HashMap<>();
expectedAgentAttributes = new HashMap<>();
expectedUserAttributes = new HashMap<>();
expectedAgentAttributes.put("error.class", "0");
expectedAgentAttributes.put("port", 9191);
expectedIntrinsicAttributes = new HashMap<>();
expectedIntrinsicAttributes.put("traceId", traceId);
expectedIntrinsicAttributes.put("duration", (float) duration / TimeConversion.NANOSECONDS_PER_SECOND);
expectedIntrinsicAttributes.put("type", "Span");
expectedIntrinsicAttributes.put("category", "generic");
expectedIntrinsicAttributes.put("sampled", sampled);
expectedIntrinsicAttributes.put("nr.entryPoint", true);
expectedIntrinsicAttributes.put("timestamp", timestamp);
expectedIntrinsicAttributes.put("priority", priority);
expectedIntrinsicAttributes.put("transaction.name", txnName.getName());
tracer = mock(Tracer.class);
txnData = mock(TransactionData.class);
spanErrorBuilder = mock(SpanErrorBuilder.class);
spanError = mock(SpanError.class);
spanProxy = mock(SpanProxy.class);
throwable = mock(TransactionThrowable.class);
environmentService = mock(EnvironmentService.class);
environment = mock(Environment.class);
transactionDataToDistributedTraceIntrinsics = mock(TransactionDataToDistributedTraceIntrinsics.class);
txnStats = mock(TransactionStats.class, RETURNS_DEEP_STUBS);
errorBuilderMap = new HashMap<>();
errorBuilderMap.put(appName, spanErrorBuilder);
when(tracer.getDuration()).thenReturn(duration);
when(tracer.getStartTimeInMillis()).thenReturn(timestamp);
when(tracer.getAgentAttributes()).thenReturn(tracerAgentAttributes);
when(tracer.getCustomAttributes()).thenReturn(tracerUserAttributes);
when(spanErrorBuilder.buildSpanError(tracer, isRoot, responseStatus, statusMessage, throwable)).thenReturn(spanError);
when(spanErrorBuilder.areErrorsEnabled()).thenReturn(true);
when(txnData.getApplicationName()).thenReturn(appName);
when(txnData.getResponseStatus()).thenReturn(responseStatus);
when(txnData.getStatusMessage()).thenReturn(statusMessage);
when(txnData.getThrowable()).thenReturn(throwable);
when(txnData.getPriority()).thenReturn(priority);
when(txnData.sampled()).thenReturn(sampled);
when(txnData.getSpanProxy()).thenReturn(spanProxy);
when(txnData.getPriorityTransactionName()).thenReturn(txnName);
when(txnData.getUserAttributes()).thenReturn(transactionUserAttributes);
when(spanProxy.getOrCreateTraceId()).thenReturn(traceId);
when(environmentService.getEnvironment()).thenReturn(environment);
when(environment.getAgentIdentity()).thenReturn(new AgentIdentity("dispatcher", "1.2.3", 9191, "myInstance"));
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class SqlTraceServiceTest method multipleHarvests.
@Test
public void multipleHarvests() throws Exception {
Map<String, Object> configMap = createStagingMap();
createServiceManager(configMap);
SqlTraceService sqlTraceService = ServiceFactory.getSqlTraceService();
Assert.assertTrue(sqlTraceService.isEnabled());
// 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());
// 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());
long expectedDuration = TimeUnit.MILLISECONDS.convert(duration, TimeUnit.NANOSECONDS);
String expectedSql = "select * from dude where somevalue = ?";
SqlObfuscator sqlObfuscator = ServiceFactory.getDatabaseService().getDefaultSqlObfuscator();
long expectedId = sqlObfuscator.obfuscateSql(expectedSql).hashCode();
SqlTrace sqlTrace = getSqlTrace(expectedId, sqlTraces);
Assert.assertNotNull(sqlTrace);
Assert.assertEquals(expectedId, sqlTrace.getId());
Assert.assertEquals(expectedSql, sqlTrace.getQuery());
Assert.assertEquals(2, sqlTrace.getCallCount());
Assert.assertEquals(expectedDuration * 2, sqlTrace.getTotal());
Assert.assertEquals(expectedDuration, sqlTrace.getMin());
Assert.assertEquals(expectedDuration, sqlTrace.getMax());
expectedSql = "select * from dudette where somevalue = ?";
expectedId = sqlObfuscator.obfuscateSql(expectedSql).hashCode();
sqlTrace = getSqlTrace(expectedId, sqlTraces);
Assert.assertNotNull(sqlTrace);
Assert.assertEquals(expectedId, sqlTrace.getId());
Assert.assertEquals(expectedSql, sqlTrace.getQuery());
Assert.assertEquals(1, sqlTrace.getCallCount());
Assert.assertEquals(expectedDuration, sqlTrace.getTotal());
Assert.assertEquals(expectedDuration, sqlTrace.getMin());
Assert.assertEquals(expectedDuration, sqlTrace.getMax());
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class SqlTraceServiceTest method insertSqlMaxLength.
@Test
public void insertSqlMaxLength() throws Exception {
Map<String, Object> configMap = createStagingMap();
createServiceManager(configMap);
// run a transaction
Tracer requestDispatcherTracer = startDispatcherTracer();
long duration = TimeUnit.NANOSECONDS.convert(getExplainThresholdInMillis() + 1, TimeUnit.MILLISECONDS);
char[] charData = new char[2100];
String sql = "select * from dude where where somevalue = 'cool'";
for (int i = 0; i < sql.length(); i++) {
charData[i] = sql.charAt(i);
}
for (int i = sql.length(); i < charData.length; i++) {
charData[i] = 'a';
}
sql = String.valueOf(charData);
startSqlTracer(sql, 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();
Assert.assertEquals(1, sqlTraces.size());
SqlTrace sqlTrace = sqlTraces.get(0);
int maxSqlLength = ServiceFactory.getConfigService().getDefaultAgentConfig().getTransactionTracerConfig().getInsertSqlMaxLength();
SqlObfuscator sqlObfuscator = ServiceFactory.getDatabaseService().getDefaultSqlObfuscator();
sql = sqlObfuscator.obfuscateSql(sql);
Assert.assertEquals(TransactionSegment.truncateSql(sql, maxSqlLength).length(), sqlTrace.getQuery().length());
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class SqlTraceServiceTest method serializeSqlTrace.
@Test
public void serializeSqlTrace() throws Exception {
Map<String, Object> configMap = createStagingMap();
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);
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();
Assert.assertEquals(1, sqlTraces.size());
SqlTrace sqlTrace = sqlTraces.get(0);
ByteArrayOutputStream os = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(os);
JSONValue.writeJSONString(sqlTraces, writer);
writer.close();
String json = os.toString();
JSONParser parser = new JSONParser();
JSONArray deserializedSqlTraces = (JSONArray) parser.parse(json);
Assert.assertEquals(1, deserializedSqlTraces.size());
JSONArray deserializedSqlTrace = (JSONArray) deserializedSqlTraces.get(0);
Assert.assertEquals(10, deserializedSqlTrace.size());
Assert.assertEquals(sqlTrace.getBlameMetricName(), deserializedSqlTrace.get(0));
Assert.assertEquals(sqlTrace.getUri(), deserializedSqlTrace.get(1));
Assert.assertEquals(sqlTrace.getId(), deserializedSqlTrace.get(2));
Assert.assertEquals(sqlTrace.getQuery(), deserializedSqlTrace.get(3));
Assert.assertEquals(sqlTrace.getMetricName(), deserializedSqlTrace.get(4));
Assert.assertEquals(Integer.valueOf(sqlTrace.getCallCount()).longValue(), deserializedSqlTrace.get(5));
Assert.assertEquals(sqlTrace.getTotal(), deserializedSqlTrace.get(6));
Assert.assertEquals(sqlTrace.getMin(), deserializedSqlTrace.get(7));
Assert.assertEquals(sqlTrace.getMax(), deserializedSqlTrace.get(8));
Map<String, Object> decodedParams = (Map<String, Object>) decodeParams(deserializedSqlTrace.get(9));
Map<String, Object> sqlTraceParams = sqlTrace.getParameters();
Double decodedPriority = (Double) decodedParams.remove("priority");
Float sqlTracePriority = (Float) sqlTraceParams.remove("priority");
Assert.assertEquals(decodedParams, sqlTraceParams);
Assert.assertEquals(decodedPriority, sqlTracePriority, 0.0000001f);
}
use of com.newrelic.agent.tracers.Tracer in project newrelic-java-agent by newrelic.
the class SqlTraceServiceTest method multipleTransactions.
@Test
public void multipleTransactions() throws Exception {
Map<String, Object> configMap = createStagingMap();
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 another transaction
requestDispatcherTracer = startDispatcherTracer();
long duration2 = TimeUnit.NANOSECONDS.convert(getExplainThresholdInMillis() + 1, TimeUnit.MILLISECONDS);
startSqlTracer("select * from dude where somevalue = 'cool'", duration2).finish(Opcodes.RETURN, null);
startSqlTracer("select * from dude where somevalue = 'cool'", duration2).finish(Opcodes.RETURN, null);
startSqlTracer("select * from dudette where somevalue = 'cool'", duration2).finish(Opcodes.RETURN, null);
startSqlTracer("select * from duderino where somevalue = 'cool'", duration2).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(3, sqlTraces.size());
long expectedDuration = TimeUnit.MILLISECONDS.convert(duration, TimeUnit.NANOSECONDS);
long expectedDuration2 = TimeUnit.MILLISECONDS.convert(duration2, TimeUnit.NANOSECONDS);
String expectedSql = "select * from dude where somevalue = ?";
SqlObfuscator sqlObfuscator = ServiceFactory.getDatabaseService().getDefaultSqlObfuscator();
long expectedId = sqlObfuscator.obfuscateSql(expectedSql).hashCode();
SqlTrace sqlTrace = getSqlTrace(expectedId, sqlTraces);
Assert.assertNotNull(sqlTrace);
Assert.assertEquals(expectedId, sqlTrace.getId());
Assert.assertEquals(expectedSql, sqlTrace.getQuery());
Assert.assertEquals(4, sqlTrace.getCallCount());
Assert.assertEquals((expectedDuration * 2) + (expectedDuration2 * 2), sqlTrace.getTotal());
Assert.assertEquals(expectedDuration, sqlTrace.getMin());
Assert.assertEquals(expectedDuration2, sqlTrace.getMax());
expectedSql = "select * from dudette where somevalue = ?";
expectedId = sqlObfuscator.obfuscateSql(expectedSql).hashCode();
sqlTrace = getSqlTrace(expectedId, sqlTraces);
Assert.assertNotNull(sqlTrace);
Assert.assertEquals(expectedId, sqlTrace.getId());
Assert.assertEquals(expectedSql, sqlTrace.getQuery());
Assert.assertEquals(2, sqlTrace.getCallCount());
Assert.assertEquals(expectedDuration + expectedDuration2, sqlTrace.getTotal());
Assert.assertEquals(expectedDuration, sqlTrace.getMin());
Assert.assertEquals(expectedDuration2, sqlTrace.getMax());
expectedSql = "select * from duderino where somevalue = ?";
expectedId = sqlObfuscator.obfuscateSql(expectedSql).hashCode();
sqlTrace = getSqlTrace(expectedId, sqlTraces);
Assert.assertNotNull(sqlTrace);
Assert.assertEquals(expectedId, sqlTrace.getId());
Assert.assertEquals(expectedSql, sqlTrace.getQuery());
Assert.assertEquals(1, sqlTrace.getCallCount());
Assert.assertEquals(expectedDuration2, sqlTrace.getTotal());
Assert.assertEquals(expectedDuration2, sqlTrace.getMin());
Assert.assertEquals(expectedDuration2, sqlTrace.getMax());
}
Aggregations