Search in sources :

Example 11 with ErrorEvent

use of com.newrelic.agent.model.ErrorEvent in project newrelic-java-agent by newrelic.

the class ExpectedErrorFactoryTest method testTruncatedErrorEvent.

@Test
public void testTruncatedErrorEvent() throws Exception {
    Map<String, Object> configuration = new HashMap<>();
    configuration = buildConfigMap(configuration);
    ErrorCollectorConfig errorCollectorConfig = setupServices(configuration);
    StringBuilder errorMessageBuilder = new StringBuilder();
    for (int i = 0; i < 1024; i++) {
        errorMessageBuilder.append("1");
    }
    String errorMessage = errorMessageBuilder.toString();
    TracedError error = HttpTracedError.builder(errorCollectorConfig, appName, "dude", System.currentTimeMillis()).statusCodeAndMessage(403, errorMessage).requestUri("/dude").build();
    ErrorEvent event = ErrorEventFactory.create(appName, error, DistributedTraceServiceImpl.nextTruncatedFloat());
    JSONArray jsonArray = (JSONArray) AgentHelper.serializeJSON(event);
    JSONObject jsonObject = (JSONObject) jsonArray.get(0);
    assertEquals(errorMessage, error.getMessage());
    assertEquals("HttpClientError 403", error.getExceptionClass());
    assertEquals("HttpClientError 403", event.getErrorClass());
    assertEquals("HttpClientError 403", jsonObject.get("error.class"));
    assertEquals(MAX_ERROR_MESSAGE_SIZE, jsonObject.get("error.message").toString().length());
    assertEquals(MAX_ERROR_MESSAGE_SIZE, event.getErrorMessage().length());
}
Also used : JSONObject(org.json.simple.JSONObject) HashMap(java.util.HashMap) ErrorEvent(com.newrelic.agent.model.ErrorEvent) JSONArray(org.json.simple.JSONArray) JSONObject(org.json.simple.JSONObject) Test(org.junit.Test)

Example 12 with ErrorEvent

use of com.newrelic.agent.model.ErrorEvent in project newrelic-java-agent by newrelic.

the class DefaultTracerTest method testTransactionABParenting.

/**
 * Transaction A has spans 1, 2, and 3. Span 2 is active when a distributed tracing payload is created.
 * Transaction B has spans 5 and 6. The payload from span 2 is accepted when span 5 is active.
 *
 * Verify that all the parenting attributes are correct.
 */
@Test
public void testTransactionABParenting() {
    DistributedTraceServiceImpl dts = (DistributedTraceServiceImpl) ServiceFactory.getServiceManager().getDistributedTraceService();
    Map<String, Object> configMap = ImmutableMap.<String, Object>builder().put("distributed_tracing", ImmutableMap.builder().put("account_id", "12345").put("trusted_account_key", "67890").put("primary_application_id", "789").build()).build();
    dts.connected(null, AgentConfigFactory.createAgentConfig(configMap, null, null));
    TransactionActivity.clear();
    Transaction.clearTransaction();
    Transaction tx = Transaction.getTransaction();
    DefaultTracer span1Tracer = new OtherRootTracer(tx, new ClassMethodSignature("class", "span1", "()V"), null, DefaultTracer.NULL_METRIC_NAME_FORMATTER);
    tx.getTransactionActivity().tracerStarted(span1Tracer);
    tx.setTransactionName(com.newrelic.api.agent.TransactionNamePriority.CUSTOM_HIGH, true, "Transaction A");
    DefaultTracer span2Tracer = new OtherRootTracer(tx, new ClassMethodSignature("class", "span2", "()V"), null, DefaultTracer.NULL_METRIC_NAME_FORMATTER);
    tx.getTransactionActivity().tracerStarted(span2Tracer);
    DistributedTracePayload payload = new BoundTransactionApiImpl(span2Tracer.getTransaction()).createDistributedTracePayload();
    DefaultTracer span3Tracer = new OtherRootTracer(tx, new ClassMethodSignature("class", "span3", "()V"), null, DefaultTracer.NULL_METRIC_NAME_FORMATTER);
    tx.getTransactionActivity().tracerStarted(span3Tracer);
    span3Tracer.finish(Opcodes.ARETURN, null);
    span2Tracer.finish(Opcodes.ARETURN, null);
    span1Tracer.finish(Opcodes.ARETURN, null);
    TransactionActivity.clear();
    Transaction.clearTransaction();
    Transaction txB = Transaction.getTransaction();
    DefaultTracer span5Tracer = new OtherRootTracer(txB, new ClassMethodSignature("class", "span5", "()V"), null, DefaultTracer.NULL_METRIC_NAME_FORMATTER);
    txB.getTransactionActivity().tracerStarted(span5Tracer);
    span5Tracer.getTransaction().acceptDistributedTracePayload(payload);
    txB.setTransactionName(com.newrelic.api.agent.TransactionNamePriority.CUSTOM_HIGH, true, "Transaction B");
    txB.setThrowable(new Throwable(), TransactionErrorPriority.API, false);
    DefaultTracer span6Tracer = new OtherRootTracer(txB, new ClassMethodSignature("class", "span6", "()V"), null, DefaultTracer.NULL_METRIC_NAME_FORMATTER);
    txB.getTransactionActivity().tracerStarted(span6Tracer);
    span6Tracer.finish(Opcodes.ARETURN, null);
    span5Tracer.finish(Opcodes.ARETURN, null);
    // assert traceId
    SpanEventsService spanEventService = ServiceFactory.getSpanEventService();
    final TransactionData tdA = new TransactionData(tx, 1024);
    ((SpanEventsServiceImpl) spanEventService).dispatcherTransactionFinished(tdA, new TransactionStats());
    final TransactionData tdB = new TransactionData(txB, 1024);
    ((SpanEventsServiceImpl) spanEventService).dispatcherTransactionFinished(tdB, new TransactionStats());
    SamplingPriorityQueue<SpanEvent> eventPool = spanEventService.getOrCreateDistributedSamplingReservoir(APP_NAME);
    List<SpanEvent> spanEvents = eventPool.asList();
    assertEquals(5, spanEvents.size());
    TransactionEvent txAEvent = ServiceFactory.getTransactionEventsService().createEvent(tdA, new TransactionStats(), tdA.getBlameMetricName());
    TransactionEvent txBEvent = ServiceFactory.getTransactionEventsService().createEvent(tdB, new TransactionStats(), tdB.getBlameMetricName());
    SpanEvent span1 = getSpanByName(eventPool, "Java/class/span1");
    SpanEvent span2 = getSpanByName(eventPool, "Java/class/span2");
    SpanEvent span3 = getSpanByName(eventPool, "Java/class/span3");
    SpanEvent span5 = getSpanByName(eventPool, "Java/class/span5");
    SpanEvent span6 = getSpanByName(eventPool, "Java/class/span6");
    DistributedTracePayloadImpl parsedPayload = new DistributedTracePayloadParser(NewRelic.getAgent().getMetricAggregator(), ServiceFactory.getDistributedTraceService(), Agent.LOG).parse(null, payload.text());
    assertEquals(tx.getGuid(), parsedPayload.txnId);
    assertEquals(tx.sampled(), parsedPayload.sampled.booleanValue());
    assertEquals(tx.getPriority(), parsedPayload.priority, 0.0f);
    assertEquals(span2Tracer.getGuid(), parsedPayload.guid);
    assertEquals(span2.getGuid(), parsedPayload.guid);
    assertEquals(txAEvent.getTripId(), parsedPayload.traceId);
    assertEquals(txBEvent.getTripId(), parsedPayload.traceId);
    assertEquals(span1.getTraceId(), span2.getTraceId());
    assertEquals(span2.getTraceId(), span3.getTraceId());
    assertEquals(span3.getTraceId(), span5.getTraceId());
    assertEquals(span5.getTraceId(), span6.getTraceId());
    assertEquals(txAEvent.getGuid(), span1.getTransactionId());
    assertEquals(span1.getGuid(), span2.getParentId());
    assertEquals(txAEvent.getGuid(), span2.getTransactionId());
    assertEquals(span2.getGuid(), span3.getParentId());
    assertEquals(txAEvent.getGuid(), span3.getTransactionId());
    assertEquals(txAEvent.getGuid(), txBEvent.getParentId());
    assertEquals(span2.getGuid(), txBEvent.getParenSpanId());
    assertEquals(span2.getGuid(), span5.getParentId());
    assertEquals(txBEvent.getGuid(), span5.getTransactionId());
    assertEquals(span5.getGuid(), span6.getParentId());
    assertEquals(txBEvent.getGuid(), span6.getTransactionId());
    ServiceFactory.getTransactionService().transactionFinished(tdB, new TransactionStats());
    ErrorServiceImpl errorService = (ErrorServiceImpl) txB.getRPMService().getErrorService();
    DistributedSamplingPriorityQueue<ErrorEvent> reservoir = errorService.getReservoir(ServiceFactory.getConfigService().getDefaultAgentConfig().getApplicationName());
    List<ErrorEvent> errorEvents = reservoir.asList();
    assertEquals(1, errorEvents.size());
    ErrorEvent errorEvent = errorEvents.get(0);
    Map<String, Object> errorDtAtts = errorEvent.getDistributedTraceIntrinsics();
    assertEquals(txBEvent.getTripId(), errorDtAtts.get("traceId"));
    assertEquals(txBEvent.getGuid(), errorEvent.getTransactionGuid());
}
Also used : ErrorServiceImpl(com.newrelic.agent.errors.ErrorServiceImpl) DistributedTracePayload(com.newrelic.api.agent.DistributedTracePayload) DistributedTracePayloadImpl(com.newrelic.agent.tracing.DistributedTracePayloadImpl) TransactionEvent(com.newrelic.agent.service.analytics.TransactionEvent) TransactionData(com.newrelic.agent.TransactionData) BoundTransactionApiImpl(com.newrelic.agent.BoundTransactionApiImpl) DistributedTraceServiceImpl(com.newrelic.agent.tracing.DistributedTraceServiceImpl) SpanEventsService(com.newrelic.agent.service.analytics.SpanEventsService) DistributedTracePayloadParser(com.newrelic.agent.tracing.DistributedTracePayloadParser) TransactionStats(com.newrelic.agent.stats.TransactionStats) Transaction(com.newrelic.agent.Transaction) SpanEventsServiceImpl(com.newrelic.agent.service.analytics.SpanEventsServiceImpl) SpanEvent(com.newrelic.agent.model.SpanEvent) ErrorEvent(com.newrelic.agent.model.ErrorEvent) Test(org.junit.Test)

Aggregations

ErrorEvent (com.newrelic.agent.model.ErrorEvent)12 Test (org.junit.Test)6 ErrorServiceImpl (com.newrelic.agent.errors.ErrorServiceImpl)4 HashMap (java.util.HashMap)4 JSONArray (org.json.simple.JSONArray)4 JSONObject (org.json.simple.JSONObject)4 ThrowableError (com.newrelic.agent.errors.ThrowableError)2 StatsEngine (com.newrelic.agent.stats.StatsEngine)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 BoundTransactionApiImpl (com.newrelic.agent.BoundTransactionApiImpl)1 MockRPMService (com.newrelic.agent.MockRPMService)1 Transaction (com.newrelic.agent.Transaction)1 TransactionData (com.newrelic.agent.TransactionData)1 SpanEvent (com.newrelic.agent.model.SpanEvent)1 DistributedSamplingPriorityQueue (com.newrelic.agent.service.analytics.DistributedSamplingPriorityQueue)1 SpanEventsService (com.newrelic.agent.service.analytics.SpanEventsService)1 SpanEventsServiceImpl (com.newrelic.agent.service.analytics.SpanEventsServiceImpl)1 TransactionEvent (com.newrelic.agent.service.analytics.TransactionEvent)1 StatsWork (com.newrelic.agent.stats.StatsWork)1 TransactionStats (com.newrelic.agent.stats.TransactionStats)1