Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RUM-7643 Correctly handle TTNS when resource was stopped with error #2444

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ internal sealed class RumRawEvent {

internal data class ErrorSent(
val viewId: String,
val resourceId: String? = null,
val resourceEndTimestampInNanos: Long? = null,
override val eventTime: Time = Time()
) : RumRawEvent()

Expand All @@ -151,6 +153,7 @@ internal sealed class RumRawEvent {

internal data class ErrorDropped(
val viewId: String,
val resourceId: String? = null,
override val eventTime: Time = Time()
) : RumRawEvent()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,15 +139,15 @@ internal class RumResourceScope(
) {
if (key != event.key) return
attributes.putAll(event.attributes)
reportResourceStoppedMetric(event.eventTime.nanoTime)
sendError(
event.message,
event.source,
event.statusCode,
event.throwable.loggableStackTrace(),
event.throwable.javaClass.canonicalName,
ErrorEvent.Category.EXCEPTION,
writer
writer,
event.eventTime.nanoTime
)
}

Expand All @@ -157,7 +157,6 @@ internal class RumResourceScope(
writer: DataWriter<Any>
) {
if (key != event.key) return
reportResourceStoppedMetric(event.eventTime.nanoTime)
attributes.putAll(event.attributes)

val errorCategory =
Expand All @@ -170,13 +169,8 @@ internal class RumResourceScope(
event.stackTrace,
event.errorType,
errorCategory,
writer
)
}

private fun reportResourceStoppedMetric(eventTimeStamp: Long) {
networkSettledMetricResolver.resourceWasStopped(
InternalResourceContext(resourceId, eventTimeStamp)
writer,
event.eventTime.nanoTime
)
}

Expand Down Expand Up @@ -345,7 +339,8 @@ internal class RumResourceScope(
stackTrace: String?,
errorType: String?,
errorCategory: ErrorEvent.Category?,
writer: DataWriter<Any>
writer: DataWriter<Any>,
resourceStopTimestampInNanos: Long
) {
attributes.putAll(GlobalRumMonitor.get(sdkCore).getAttributes())
val errorFingerprint = attributes.remove(RumAttributes.ERROR_FINGERPRINT) as? String
Expand Down Expand Up @@ -446,10 +441,13 @@ internal class RumResourceScope(
)
}
.onError {
it.eventDropped(rumContext.viewId.orEmpty(), StorageEvent.Error)
it.eventDropped(
rumContext.viewId.orEmpty(),
StorageEvent.Error(resourceId, resourceStopTimestampInNanos)
)
}
.onSuccess {
it.eventSent(rumContext.viewId.orEmpty(), StorageEvent.Error)
it.eventSent(rumContext.viewId.orEmpty(), StorageEvent.Error(resourceId, resourceStopTimestampInNanos))
}
.submit()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -575,8 +575,8 @@ internal open class RumViewScope(
.apply {
if (!isFatal) {
// if fatal, then we don't have time for the notification, app is crashing
onError { it.eventDropped(rumContext.viewId.orEmpty(), StorageEvent.Error) }
onSuccess { it.eventSent(rumContext.viewId.orEmpty(), StorageEvent.Error) }
onError { it.eventDropped(rumContext.viewId.orEmpty(), StorageEvent.Error()) }
onSuccess { it.eventSent(rumContext.viewId.orEmpty(), StorageEvent.Error()) }
}
}
.submit()
Expand Down Expand Up @@ -774,6 +774,14 @@ internal open class RumViewScope(
if (event.viewId == viewId || event.viewId in oldViewIds) {
pendingErrorCount--
errorCount++
if (event.resourceId != null && event.resourceEndTimestampInNanos != null) {
networkSettledMetricResolver.resourceWasStopped(
InternalResourceContext(
event.resourceId,
event.resourceEndTimestampInNanos
)
)
}
sendViewUpdate(event, writer)
}
}
Expand All @@ -794,6 +802,9 @@ internal open class RumViewScope(
private fun onErrorDropped(event: RumRawEvent.ErrorDropped) {
if (event.viewId == viewId || event.viewId in oldViewIds) {
pendingErrorCount--
if (event.resourceId != null) {
networkSettledMetricResolver.resourceWasDropped(event.resourceId)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,14 @@ internal class DatadogRumMonitor(
)
)

is StorageEvent.Error -> handleEvent(RumRawEvent.ErrorSent(viewId))
is StorageEvent.Error -> handleEvent(
RumRawEvent.ErrorSent(
viewId,
event.resourceId,
event.resourceStopTimestampInNanos
)
)

is StorageEvent.LongTask -> handleEvent(RumRawEvent.LongTaskSent(viewId, false))
is StorageEvent.FrozenFrame -> handleEvent(RumRawEvent.LongTaskSent(viewId, true))
is StorageEvent.View -> {
Expand All @@ -587,7 +594,7 @@ internal class DatadogRumMonitor(
when (event) {
is StorageEvent.Action -> handleEvent(RumRawEvent.ActionDropped(viewId))
is StorageEvent.Resource -> handleEvent(RumRawEvent.ResourceDropped(viewId, event.resourceId))
is StorageEvent.Error -> handleEvent(RumRawEvent.ErrorDropped(viewId))
is StorageEvent.Error -> handleEvent(RumRawEvent.ErrorDropped(viewId, event.resourceId))
is StorageEvent.LongTask -> handleEvent(RumRawEvent.LongTaskDropped(viewId, false))
is StorageEvent.FrozenFrame -> handleEvent(RumRawEvent.LongTaskDropped(viewId, true))
is StorageEvent.View -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ internal sealed class StorageEvent {
val type: ActionEvent.ActionEventActionType,
val eventEndTimestampInNanos: Long
) : StorageEvent()

data class Resource(val resourceId: String, val resourceStopTimestampInNanos: Long) : StorageEvent()
object Error : StorageEvent()
data class Error(val resourceId: String? = null, val resourceStopTimestampInNanos: Long? = null) : StorageEvent()
object LongTask : StorageEvent()
object FrozenFrame : StorageEvent()
}
Original file line number Diff line number Diff line change
Expand Up @@ -1235,9 +1235,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1316,9 +1313,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1395,9 +1389,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1493,9 +1484,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1592,9 +1580,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1688,9 +1673,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1785,9 +1767,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1867,9 +1846,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -1949,9 +1925,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -2030,9 +2003,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -2112,9 +2082,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -2199,9 +2166,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -2286,9 +2250,6 @@ internal class RumResourceScopeTest {
}
verify(mockParentScope, never()).handleEvent(any(), any())
verifyNoMoreInteractions(mockWriter)
verify(mockNetworkSettledMetricResolver).resourceWasStopped(
InternalResourceContext(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
assertThat(result).isEqualTo(null)
}

Expand Down Expand Up @@ -2920,7 +2881,10 @@ internal class RumResourceScopeTest {

// Then
verify(rumMonitor.mockInstance as AdvancedRumMonitor)
.eventSent(fakeParentContext.viewId.orEmpty(), StorageEvent.Error)
.eventSent(
fakeParentContext.viewId.orEmpty(),
StorageEvent.Error(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
}

@Test
Expand Down Expand Up @@ -2949,7 +2913,10 @@ internal class RumResourceScopeTest {

// Then
verify(rumMonitor.mockInstance as AdvancedRumMonitor)
.eventDropped(fakeParentContext.viewId.orEmpty(), StorageEvent.Error)
.eventDropped(
fakeParentContext.viewId.orEmpty(),
StorageEvent.Error(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
}

@Test
Expand Down Expand Up @@ -2980,7 +2947,10 @@ internal class RumResourceScopeTest {

// Then
verify(rumMonitor.mockInstance as AdvancedRumMonitor)
.eventDropped(fakeParentContext.viewId.orEmpty(), StorageEvent.Error)
.eventDropped(
fakeParentContext.viewId.orEmpty(),
StorageEvent.Error(testedScope.resourceId, mockEvent.eventTime.nanoTime)
)
}

// endregion
Expand Down
Loading