From be3efbdcd8149069eadd1e5eb516db2948a47596 Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 10 May 2021 10:23:31 +0200 Subject: [PATCH 01/12] add envelope transaction with payload from gson tests --- sentry/src/test/resources/envelope-transaction.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sentry/src/test/resources/envelope-transaction.txt diff --git a/sentry/src/test/resources/envelope-transaction.txt b/sentry/src/test/resources/envelope-transaction.txt new file mode 100644 index 0000000000..9bcd8e37b4 --- /dev/null +++ b/sentry/src/test/resources/envelope-transaction.txt @@ -0,0 +1,3 @@ +{"event_id":"3367f5196c494acaae85bbbd535379ac"} +{"type":"transaction","length":640,"content_type":"application/json"} +{"transaction":"a-transaction","type":"transaction","start_timestamp":"2020-10-23T10:24:01.791Z","timestamp":"2020-10-23T10:24:02.791Z","event_id":"3367f5196c494acaae85bbbd535379ac","contexts":{"trace":{"trace_id":"b156a475de54423d9c1571df97ec7eb6","span_id":"0a53026963414893","op":"http","status":"ok"},"custom":{"some-key":"some-value"}},"spans":[{"start_timestamp":"2021-03-05T08:51:12.838Z","timestamp":"2021-03-05T08:51:12.949Z","trace_id":"2b099185293344a5bfdd7ad89ebf9416","span_id":"5b95c29a5ded4281","parent_span_id":"a3b2d1d58b344b07","op":"PersonService.create","description":"desc","status":"aborted","tags":{"name":"value"}}]} \ No newline at end of file From d087ad5f193d6f8acaf7a6efa9d8522b88839a2d Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 10 May 2021 13:39:41 +0200 Subject: [PATCH 02/12] Capture transaction in OutboxSender instead of envelope --- .../src/main/java/io/sentry/OutboxSender.java | 37 +++++++++++++++ .../test/java/io/sentry/OutboxSenderTest.kt | 45 ++++++++++++++++--- 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index c3394bfa43..7c09329390 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -7,6 +7,7 @@ import io.sentry.hints.Resettable; import io.sentry.hints.Retryable; import io.sentry.hints.SubmissionResult; +import io.sentry.protocol.SentryTransaction; import io.sentry.util.CollectionUtils; import io.sentry.util.LogUtils; import io.sentry.util.Objects; @@ -152,6 +153,42 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } catch (Exception e) { logger.log(ERROR, "Item failed to process.", e); } + } else if (SentryItemType.Transaction.equals(item.getHeader().getType())) { + try (final Reader eventReader = + new BufferedReader( + new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { + SentryTransaction transaction = serializer.deserialize(eventReader, SentryTransaction.class); + if (transaction == null) { + logger.log( + SentryLevel.ERROR, + "Item %d of type %s returned null by the parser.", + items, + item.getHeader().getType()); + } else { + if (envelope.getHeader().getEventId() != null + && !envelope.getHeader().getEventId().equals(transaction.getEventId())) { + logger.log( + SentryLevel.ERROR, + "Item %d of has a different event id (%s) to the envelope header (%s)", + items, + envelope.getHeader().getEventId(), + transaction.getEventId()); + continue; + } + hub.captureTransaction(transaction, hint); + logger.log(SentryLevel.DEBUG, "Item %d is being captured.", items); + + if (!waitFlush(hint)) { + logger.log( + SentryLevel.WARNING, + "Timed out waiting for event submission: %s", + transaction.getEventId()); + break; + } + } + } catch (Exception e) { + logger.log(ERROR, "Item failed to process.", e); + } } else { // send unknown item types over the wire final SentryEnvelope newEnvelope = diff --git a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt index bd32de92c9..9363b87997 100644 --- a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt +++ b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt @@ -1,15 +1,11 @@ package io.sentry -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.argWhere -import com.nhaarman.mockitokotlin2.eq -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.whenever +import com.nhaarman.mockitokotlin2.* import io.sentry.cache.EnvelopeCache import io.sentry.hints.Retryable import io.sentry.protocol.SentryId +import io.sentry.protocol.SentryTransaction +import io.sentry.test.getProperty import java.io.File import java.io.FileNotFoundException import java.nio.file.Files @@ -24,6 +20,7 @@ import kotlin.test.assertTrue class OutboxSenderTest { private class Fixture { + val options = mock() val hub = mock() var envelopeReader = mock() val serializer = mock() @@ -73,6 +70,40 @@ class OutboxSenderTest { verify(fixture.logger, never()).log(eq(SentryLevel.ERROR), any(), any()) } + @Test + fun `when parser is EnvelopeReader and serializer return SentryTransaction, transaction captured, file is deleted`() { + fixture.envelopeReader = EnvelopeReader() + whenever(fixture.options.maxSpans).thenReturn(1000) + whenever(fixture.hub.options).thenReturn(fixture.options) + + val transactionContext = TransactionContext("fixture-name", "http") + transactionContext.description = "fixture-request" + transactionContext.status = SpanStatus.OK + transactionContext.setTag("fixture-tag", "fixture-value") + + val sentryTracer = SentryTracer(transactionContext, fixture.hub) + val span = sentryTracer.startChild("child") + span.finish(SpanStatus.OK) + sentryTracer.finish() + + val sentryTracerSpy = spy(sentryTracer) + whenever(sentryTracerSpy.eventId).thenReturn(SentryId("3367f5196c494acaae85bbbd535379ac")) + + val expected = SentryTransaction(sentryTracerSpy) + whenever(fixture.serializer.deserialize(any(), eq(SentryTransaction::class.java))).thenReturn(expected) + + val sut = fixture.getSut() + val path = getTempEnvelope(fileName = "envelope-transaction.txt") + assertTrue(File(path).exists()) + sut.processEnvelopeFile(path, mock()) + + verify(fixture.hub).captureTransaction(eq(expected), any()) + assertFalse(File(path).exists()) + // Additionally make sure we have no errors logged + verify(fixture.logger, never()).log(eq(SentryLevel.ERROR), any(), any()) + verify(fixture.logger, never()).log(eq(SentryLevel.ERROR), any(), any()) + } + @Test fun `when parser is EnvelopeReader and serializer returns SentryEnvelope, event captured, file is deleted `() { fixture.envelopeReader = EnvelopeReader() From 10646414030bb971ac9a2ecf33912f6dd3cf94e2 Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 10 May 2021 13:41:58 +0200 Subject: [PATCH 03/12] Add todo --- sentry/src/main/java/io/sentry/OutboxSender.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 7c09329390..babb6715e5 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -154,6 +154,9 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null logger.log(ERROR, "Item failed to process.", e); } } else if (SentryItemType.Transaction.equals(item.getHeader().getType())) { + + // TODO(denrase): DRY + try (final Reader eventReader = new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { From da8ce789ec387edbc73936e058c2cdc0bae7f519 Mon Sep 17 00:00:00 2001 From: denrase Date: Tue, 11 May 2021 16:47:43 +0200 Subject: [PATCH 04/12] Set sampled to true for testing purposes --- .../src/main/java/io/sentry/OutboxSender.java | 45 +++++++++++-------- .../test/java/io/sentry/OutboxSenderTest.kt | 12 +++-- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index babb6715e5..5a38675087 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -156,36 +156,45 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } else if (SentryItemType.Transaction.equals(item.getHeader().getType())) { // TODO(denrase): DRY - - try (final Reader eventReader = - new BufferedReader( - new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - SentryTransaction transaction = serializer.deserialize(eventReader, SentryTransaction.class); + + try (final Reader transactionReader = + new BufferedReader( + new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { + + SentryTransaction transaction = + serializer.deserialize(transactionReader, SentryTransaction.class); if (transaction == null) { logger.log( - SentryLevel.ERROR, - "Item %d of type %s returned null by the parser.", - items, - item.getHeader().getType()); + SentryLevel.ERROR, + "Item %d of type %s returned null by the parser.", + items, + item.getHeader().getType()); } else { if (envelope.getHeader().getEventId() != null - && !envelope.getHeader().getEventId().equals(transaction.getEventId())) { + && !envelope.getHeader().getEventId().equals(transaction.getEventId())) { logger.log( - SentryLevel.ERROR, - "Item %d of has a different event id (%s) to the envelope header (%s)", - items, - envelope.getHeader().getEventId(), - transaction.getEventId()); + SentryLevel.ERROR, + "Item %d of has a different event id (%s) to the envelope header (%s)", + items, + envelope.getHeader().getEventId(), + transaction.getEventId()); continue; } + + if (transaction.getContexts().getTrace() != null) { + // TODO(denrase): Testing. RN transactions are not set as sampled and also sampled is + // a + // transient property and therefore ignored by serialization/deserialization. + transaction.getContexts().getTrace().setSampled(true); + } hub.captureTransaction(transaction, hint); logger.log(SentryLevel.DEBUG, "Item %d is being captured.", items); if (!waitFlush(hint)) { logger.log( - SentryLevel.WARNING, - "Timed out waiting for event submission: %s", - transaction.getEventId()); + SentryLevel.WARNING, + "Timed out waiting for event submission: %s", + transaction.getEventId()); break; } } diff --git a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt index 9363b87997..577cc89b49 100644 --- a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt +++ b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt @@ -1,11 +1,17 @@ package io.sentry -import com.nhaarman.mockitokotlin2.* +import com.nhaarman.mockitokotlin2.any +import com.nhaarman.mockitokotlin2.argWhere +import com.nhaarman.mockitokotlin2.eq +import com.nhaarman.mockitokotlin2.mock +import com.nhaarman.mockitokotlin2.never +import com.nhaarman.mockitokotlin2.spy +import com.nhaarman.mockitokotlin2.verify +import com.nhaarman.mockitokotlin2.whenever import io.sentry.cache.EnvelopeCache import io.sentry.hints.Retryable import io.sentry.protocol.SentryId import io.sentry.protocol.SentryTransaction -import io.sentry.test.getProperty import java.io.File import java.io.FileNotFoundException import java.nio.file.Files @@ -86,7 +92,7 @@ class OutboxSenderTest { span.finish(SpanStatus.OK) sentryTracer.finish() - val sentryTracerSpy = spy(sentryTracer) + val sentryTracerSpy = spy(sentryTracer) whenever(sentryTracerSpy.eventId).thenReturn(SentryId("3367f5196c494acaae85bbbd535379ac")) val expected = SentryTransaction(sentryTracerSpy) From e316ff96e0197078c3e573fa54d2b7f2f8a456c1 Mon Sep 17 00:00:00 2001 From: denrase Date: Fri, 14 May 2021 13:57:04 +0200 Subject: [PATCH 05/12] Test if transaction is smapled --- sentry/src/main/java/io/sentry/OutboxSender.java | 11 ++++------- sentry/src/test/java/io/sentry/OutboxSenderTest.kt | 4 +++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 5a38675087..f12a55bbd1 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -118,10 +118,10 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null continue; } if (SentryItemType.Event.equals(item.getHeader().getType())) { - try (final Reader eventReader = + try (final Reader reader = new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - SentryEvent event = serializer.deserialize(eventReader, SentryEvent.class); + SentryEvent event = serializer.deserialize(reader, SentryEvent.class); if (event == null) { logger.log( SentryLevel.ERROR, @@ -154,9 +154,6 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null logger.log(ERROR, "Item failed to process.", e); } } else if (SentryItemType.Transaction.equals(item.getHeader().getType())) { - - // TODO(denrase): DRY - try (final Reader transactionReader = new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { @@ -182,9 +179,9 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } if (transaction.getContexts().getTrace() != null) { - // TODO(denrase): Testing. RN transactions are not set as sampled and also sampled is - // a // transient property and therefore ignored by serialization/deserialization. + // Workaround: We need to set sampled manually in order for the + // transaction not to be dropped, as this is a transient property. transaction.getContexts().getTrace().setSampled(true); } hub.captureTransaction(transaction, hint); diff --git a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt index 577cc89b49..495895c654 100644 --- a/sentry/src/test/java/io/sentry/OutboxSenderTest.kt +++ b/sentry/src/test/java/io/sentry/OutboxSenderTest.kt @@ -77,7 +77,7 @@ class OutboxSenderTest { } @Test - fun `when parser is EnvelopeReader and serializer return SentryTransaction, transaction captured, file is deleted`() { + fun `when parser is EnvelopeReader and serializer return SentryTransaction, transaction captured, transactions sampled, file is deleted`() { fixture.envelopeReader = EnvelopeReader() whenever(fixture.options.maxSpans).thenReturn(1000) whenever(fixture.hub.options).thenReturn(fixture.options) @@ -105,6 +105,8 @@ class OutboxSenderTest { verify(fixture.hub).captureTransaction(eq(expected), any()) assertFalse(File(path).exists()) + assertTrue(transactionContext.sampled ?: false) + // Additionally make sure we have no errors logged verify(fixture.logger, never()).log(eq(SentryLevel.ERROR), any(), any()) verify(fixture.logger, never()).log(eq(SentryLevel.ERROR), any(), any()) From acd5cd59a016dbe90c78e4324a266b6fd5f030c1 Mon Sep 17 00:00:00 2001 From: denrase Date: Fri, 14 May 2021 14:20:39 +0200 Subject: [PATCH 06/12] Extract logging to private mehods --- .../src/main/java/io/sentry/OutboxSender.java | 98 ++++++++++--------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index f12a55bbd1..14006a55fd 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -1,5 +1,7 @@ package io.sentry; +import com.sun.java.accessibility.util.EventID; + import static io.sentry.SentryLevel.ERROR; import static io.sentry.cache.EnvelopeCache.PREFIX_CURRENT_SESSION_FILE; @@ -7,6 +9,7 @@ import io.sentry.hints.Resettable; import io.sentry.hints.Retryable; import io.sentry.hints.SubmissionResult; +import io.sentry.protocol.SentryId; import io.sentry.protocol.SentryTransaction; import io.sentry.util.CollectionUtils; import io.sentry.util.LogUtils; @@ -108,45 +111,33 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null SentryLevel.DEBUG, "Processing Envelope with %d item(s)", CollectionUtils.size(envelope.getItems())); - int items = 0; + int currentItem = 0; for (final SentryEnvelopeItem item : envelope.getItems()) { - items++; + currentItem++; if (item.getHeader() == null) { - logger.log(SentryLevel.ERROR, "Item %d has no header", items); + logger.log(SentryLevel.ERROR, "Item %d has no header", currentItem); continue; } if (SentryItemType.Event.equals(item.getHeader().getType())) { - try (final Reader reader = + try (final Reader eventReader = new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - SentryEvent event = serializer.deserialize(reader, SentryEvent.class); + SentryEvent event = serializer.deserialize(eventReader, SentryEvent.class); if (event == null) { - logger.log( - SentryLevel.ERROR, - "Item %d of type %s returned null by the parser.", - items, - item.getHeader().getType()); + logEnvelopeItemNull(item, currentItem); } else { if (envelope.getHeader().getEventId() != null && !envelope.getHeader().getEventId().equals(event.getEventId())) { - logger.log( - SentryLevel.ERROR, - "Item %d of has a different event id (%s) to the envelope header (%s)", - items, - envelope.getHeader().getEventId(), - event.getEventId()); + logUnexpectedEventId(envelope, event.getEventId(), currentItem); continue; } hub.captureEvent(event, hint); - logger.log(SentryLevel.DEBUG, "Item %d is being captured.", items); + logItemCaptured(currentItem); if (!waitFlush(hint)) { - logger.log( - SentryLevel.WARNING, - "Timed out waiting for event submission: %s", - event.getEventId()); + logTimeout(event.getEventId()); break; } } @@ -154,44 +145,30 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null logger.log(ERROR, "Item failed to process.", e); } } else if (SentryItemType.Transaction.equals(item.getHeader().getType())) { - try (final Reader transactionReader = + try (final Reader reader = new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - SentryTransaction transaction = - serializer.deserialize(transactionReader, SentryTransaction.class); + SentryTransaction transaction = serializer.deserialize(reader, SentryTransaction.class); if (transaction == null) { - logger.log( - SentryLevel.ERROR, - "Item %d of type %s returned null by the parser.", - items, - item.getHeader().getType()); + logEnvelopeItemNull(item, currentItem); } else { if (envelope.getHeader().getEventId() != null && !envelope.getHeader().getEventId().equals(transaction.getEventId())) { - logger.log( - SentryLevel.ERROR, - "Item %d of has a different event id (%s) to the envelope header (%s)", - items, - envelope.getHeader().getEventId(), - transaction.getEventId()); + logUnexpectedEventId(envelope, transaction.getEventId(), currentItem); continue; } if (transaction.getContexts().getTrace() != null) { - // transient property and therefore ignored by serialization/deserialization. - // Workaround: We need to set sampled manually in order for the - // transaction not to be dropped, as this is a transient property. + // Hint: Set sampled in order for the transaction not to be dropped, as this is a + // transient property. transaction.getContexts().getTrace().setSampled(true); } hub.captureTransaction(transaction, hint); - logger.log(SentryLevel.DEBUG, "Item %d is being captured.", items); + logItemCaptured(currentItem); if (!waitFlush(hint)) { - logger.log( - SentryLevel.WARNING, - "Timed out waiting for event submission: %s", - transaction.getEventId()); + logTimeout(transaction.getEventId()); break; } } @@ -208,7 +185,7 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null SentryLevel.DEBUG, "%s item %d is being captured.", item.getHeader().getType().getItemType(), - items); + currentItem); if (!waitFlush(hint)) { logger.log( @@ -226,7 +203,7 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null logger.log( SentryLevel.WARNING, "Envelope had a failed capture at item %d. No more items will be sent.", - items); + currentItem); break; } } @@ -238,6 +215,37 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } } + private void logEnvelopeItemNull(SentryEnvelopeItem item, int itemIndex) { + logger.log( + SentryLevel.ERROR, + "Item %d of type %s returned null by the parser.", + itemIndex, + item.getHeader().getType() + ); + } + + private void logUnexpectedEventId(SentryEnvelope envelope, SentryId eventId, int itemIndex) { + logger.log( + SentryLevel.ERROR, + "Item %d of has a different event id (%s) to the envelope header (%s)", + itemIndex, + envelope.getHeader().getEventId(), + eventId + ); + } + + private void logItemCaptured(int itemIndex) { + logger.log(SentryLevel.DEBUG, "Item %d is being captured.", itemIndex); + } + + private void logTimeout(SentryId eventId) { + logger.log( + SentryLevel.WARNING, + "Timed out waiting for event id submission: %s", + eventId + ); + } + private boolean waitFlush(final @Nullable Object hint) { if (hint instanceof Flushable) { return ((Flushable) hint).waitFlush(); From 29b197e94beb5c429ee8109d6e64cf587ec88065 Mon Sep 17 00:00:00 2001 From: denrase Date: Fri, 14 May 2021 16:23:31 +0200 Subject: [PATCH 07/12] Format OutboxSender --- .../src/main/java/io/sentry/OutboxSender.java | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 14006a55fd..8e5237f1d8 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -1,7 +1,5 @@ package io.sentry; -import com.sun.java.accessibility.util.EventID; - import static io.sentry.SentryLevel.ERROR; import static io.sentry.cache.EnvelopeCache.PREFIX_CURRENT_SESSION_FILE; @@ -217,21 +215,19 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null private void logEnvelopeItemNull(SentryEnvelopeItem item, int itemIndex) { logger.log( - SentryLevel.ERROR, - "Item %d of type %s returned null by the parser.", - itemIndex, - item.getHeader().getType() - ); + SentryLevel.ERROR, + "Item %d of type %s returned null by the parser.", + itemIndex, + item.getHeader().getType()); } private void logUnexpectedEventId(SentryEnvelope envelope, SentryId eventId, int itemIndex) { logger.log( - SentryLevel.ERROR, - "Item %d of has a different event id (%s) to the envelope header (%s)", - itemIndex, - envelope.getHeader().getEventId(), - eventId - ); + SentryLevel.ERROR, + "Item %d of has a different event id (%s) to the envelope header (%s)", + itemIndex, + envelope.getHeader().getEventId(), + eventId); } private void logItemCaptured(int itemIndex) { @@ -239,11 +235,7 @@ private void logItemCaptured(int itemIndex) { } private void logTimeout(SentryId eventId) { - logger.log( - SentryLevel.WARNING, - "Timed out waiting for event id submission: %s", - eventId - ); + logger.log(SentryLevel.WARNING, "Timed out waiting for event id submission: %s", eventId); } private boolean waitFlush(final @Nullable Object hint) { From aa62b68a2ae3142b7f4cd152079f4768cb0e623f Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 17 May 2021 11:57:10 +0200 Subject: [PATCH 08/12] Mark params and varaibles as final and nonnull --- sentry/src/main/java/io/sentry/OutboxSender.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 8e5237f1d8..3cc80d63df 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -147,7 +147,7 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - SentryTransaction transaction = serializer.deserialize(reader, SentryTransaction.class); + final SentryTransaction transaction = serializer.deserialize(reader, SentryTransaction.class); if (transaction == null) { logEnvelopeItemNull(item, currentItem); } else { @@ -213,7 +213,7 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } } - private void logEnvelopeItemNull(SentryEnvelopeItem item, int itemIndex) { + private void logEnvelopeItemNull(final @NonNull SentryEnvelopeItem item, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of type %s returned null by the parser.", @@ -221,7 +221,7 @@ private void logEnvelopeItemNull(SentryEnvelopeItem item, int itemIndex) { item.getHeader().getType()); } - private void logUnexpectedEventId(SentryEnvelope envelope, SentryId eventId, int itemIndex) { + private void logUnexpectedEventId(final @NonNull SentryEnvelope envelope, SentryId eventId, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of has a different event id (%s) to the envelope header (%s)", @@ -234,7 +234,7 @@ private void logItemCaptured(int itemIndex) { logger.log(SentryLevel.DEBUG, "Item %d is being captured.", itemIndex); } - private void logTimeout(SentryId eventId) { + private void logTimeout(final @NonNull SentryId eventId) { logger.log(SentryLevel.WARNING, "Timed out waiting for event id submission: %s", eventId); } From 7c9afecb29ecf875f007791e730e43afa9c30a1f Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 17 May 2021 11:58:04 +0200 Subject: [PATCH 09/12] Fix typo --- sentry/src/main/java/io/sentry/OutboxSender.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 3cc80d63df..70eb542ae2 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -213,7 +213,7 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null } } - private void logEnvelopeItemNull(final @NonNull SentryEnvelopeItem item, int itemIndex) { + private void logEnvelopeItemNull(final @NotNull SentryEnvelopeItem item, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of type %s returned null by the parser.", @@ -221,7 +221,7 @@ private void logEnvelopeItemNull(final @NonNull SentryEnvelopeItem item, int ite item.getHeader().getType()); } - private void logUnexpectedEventId(final @NonNull SentryEnvelope envelope, SentryId eventId, int itemIndex) { + private void logUnexpectedEventId(final @NotNull SentryEnvelope envelope, SentryId eventId, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of has a different event id (%s) to the envelope header (%s)", @@ -234,7 +234,7 @@ private void logItemCaptured(int itemIndex) { logger.log(SentryLevel.DEBUG, "Item %d is being captured.", itemIndex); } - private void logTimeout(final @NonNull SentryId eventId) { + private void logTimeout(final @NotNull SentryId eventId) { logger.log(SentryLevel.WARNING, "Timed out waiting for event id submission: %s", eventId); } From a841f11de317b190e6b7b3ba060de9641f96d360 Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 17 May 2021 12:04:54 +0200 Subject: [PATCH 10/12] add entry to changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df6f44ec36..5070529cba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased +* Fix: Enrich Transactions with Context Data (#1469) + # 5.0.0-beta.2 * Fix: sentry-android-timber package sets sentry.java.android.timber as SDK name (#1456) @@ -7,7 +9,6 @@ * Bump: AGP to 4.2.0 (#1460) * Fix: NPE when adding Context Data with null values for log4j2 (#1465) - Breaking Changes: * Remove: Settings.Secure.ANDROID_ID in favor of generated installationId (#1455) From 3ca153b38dc464099e38a5b24f3180ce297387cd Mon Sep 17 00:00:00 2001 From: denrase Date: Mon, 17 May 2021 12:10:38 +0200 Subject: [PATCH 11/12] Update nullable annotations for event id --- sentry/src/main/java/io/sentry/OutboxSender.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index 70eb542ae2..ab5a2f7897 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -221,7 +221,7 @@ private void logEnvelopeItemNull(final @NotNull SentryEnvelopeItem item, int ite item.getHeader().getType()); } - private void logUnexpectedEventId(final @NotNull SentryEnvelope envelope, SentryId eventId, int itemIndex) { + private void logUnexpectedEventId(final @NotNull SentryEnvelope envelope, final @Nullable SentryId eventId, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of has a different event id (%s) to the envelope header (%s)", @@ -234,7 +234,7 @@ private void logItemCaptured(int itemIndex) { logger.log(SentryLevel.DEBUG, "Item %d is being captured.", itemIndex); } - private void logTimeout(final @NotNull SentryId eventId) { + private void logTimeout(final @Nullable SentryId eventId) { logger.log(SentryLevel.WARNING, "Timed out waiting for event id submission: %s", eventId); } From 21eb8f81b1d13ddb70baaac2d3cfaf29fd2430d4 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Mon, 17 May 2021 13:15:45 +0200 Subject: [PATCH 12/12] fix formatting --- sentry/src/main/java/io/sentry/OutboxSender.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sentry/src/main/java/io/sentry/OutboxSender.java b/sentry/src/main/java/io/sentry/OutboxSender.java index ab5a2f7897..5aeed261c6 100644 --- a/sentry/src/main/java/io/sentry/OutboxSender.java +++ b/sentry/src/main/java/io/sentry/OutboxSender.java @@ -147,7 +147,8 @@ private void processEnvelope(final @NotNull SentryEnvelope envelope, final @Null new BufferedReader( new InputStreamReader(new ByteArrayInputStream(item.getData()), UTF_8))) { - final SentryTransaction transaction = serializer.deserialize(reader, SentryTransaction.class); + final SentryTransaction transaction = + serializer.deserialize(reader, SentryTransaction.class); if (transaction == null) { logEnvelopeItemNull(item, currentItem); } else { @@ -221,7 +222,8 @@ private void logEnvelopeItemNull(final @NotNull SentryEnvelopeItem item, int ite item.getHeader().getType()); } - private void logUnexpectedEventId(final @NotNull SentryEnvelope envelope, final @Nullable SentryId eventId, int itemIndex) { + private void logUnexpectedEventId( + final @NotNull SentryEnvelope envelope, final @Nullable SentryId eventId, int itemIndex) { logger.log( SentryLevel.ERROR, "Item %d of has a different event id (%s) to the envelope header (%s)",