Skip to content

Commit 4f240d4

Browse files
committed
Address PR review
1 parent 4c562fb commit 4f240d4

File tree

5 files changed

+41
-30
lines changed

5 files changed

+41
-30
lines changed

sentry-android-replay/src/main/java/io/sentry/android/replay/capture/BaseCaptureStrategy.kt

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.sentry.SentryOptions
99
import io.sentry.SentryReplayEvent
1010
import io.sentry.SentryReplayEvent.ReplayType
1111
import io.sentry.SentryReplayEvent.ReplayType.SESSION
12+
import io.sentry.SpanDataConvention
1213
import io.sentry.android.replay.ReplayCache
1314
import io.sentry.android.replay.ScreenshotRecorderConfig
1415
import io.sentry.android.replay.util.gracefullyShutdown
@@ -41,6 +42,7 @@ internal abstract class BaseCaptureStrategy(
4142

4243
internal companion object {
4344
private const val TAG = "CaptureStrategy"
45+
private val snakecasePattern = "_[a-z]".toRegex()
4446
private val supportedNetworkData = setOf(
4547
"status_code",
4648
"method",
@@ -192,28 +194,8 @@ internal abstract class BaseCaptureStrategy(
192194
val breadcrumbData = mutableMapOf<String, Any?>()
193195
when {
194196
breadcrumb.category == "http" -> {
195-
if (!breadcrumb.isValidForRRWebSpan()) {
196-
return@forEach
197-
}
198-
recordingPayload += RRWebSpanEvent().apply {
199-
timestamp = breadcrumb.timestamp.time
200-
op = "resource.http"
201-
description = breadcrumb.data["url"] as String
202-
startTimestamp =
203-
(breadcrumb.data["start_timestamp"] as Long) / 1000.0
204-
this.endTimestamp =
205-
(breadcrumb.data["end_timestamp"] as Long) / 1000.0
206-
for ((key, value) in breadcrumb.data) {
207-
if (key in supportedNetworkData) {
208-
breadcrumbData[
209-
key
210-
.replace("content_length", "body_size")
211-
.substringAfter(".")
212-
.snakeToCamelCase()
213-
] = value
214-
}
215-
}
216-
data = breadcrumbData
197+
if (breadcrumb.isValidForRRWebSpan()) {
198+
recordingPayload += breadcrumb.toRRWebSpanEvent()
217199
}
218200
return@forEach
219201
}
@@ -320,12 +302,37 @@ internal abstract class BaseCaptureStrategy(
320302

321303
private fun Breadcrumb.isValidForRRWebSpan(): Boolean {
322304
return !(data["url"] as? String).isNullOrEmpty() &&
323-
"start_timestamp" in data &&
324-
"end_timestamp" in data
305+
SpanDataConvention.HTTP_START_TIMESTAMP in data &&
306+
SpanDataConvention.HTTP_END_TIMESTAMP in data
325307
}
326308

327309
private fun String.snakeToCamelCase(): String {
328-
val pattern = "_[a-z]".toRegex()
329-
return replace(pattern) { it.value.last().uppercase() }
310+
return replace(snakecasePattern) { it.value.last().uppercase() }
311+
}
312+
313+
private fun Breadcrumb.toRRWebSpanEvent(): RRWebSpanEvent {
314+
val breadcrumb = this
315+
return RRWebSpanEvent().apply {
316+
timestamp = breadcrumb.timestamp.time
317+
op = "resource.http"
318+
description = breadcrumb.data["url"] as String
319+
startTimestamp =
320+
(breadcrumb.data[SpanDataConvention.HTTP_START_TIMESTAMP] as Long) / 1000.0
321+
endTimestamp =
322+
(breadcrumb.data[SpanDataConvention.HTTP_END_TIMESTAMP] as Long) / 1000.0
323+
324+
val breadcrumbData = mutableMapOf<String, Any?>()
325+
for ((key, value) in breadcrumb.data) {
326+
if (key in supportedNetworkData) {
327+
breadcrumbData[
328+
key
329+
.replace("content_length", "body_size")
330+
.substringAfter(".")
331+
.snakeToCamelCase()
332+
] = value
333+
}
334+
}
335+
data = breadcrumbData
336+
}
330337
}
331338
}

sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpEvent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ internal class SentryOkHttpEvent(private val hub: IHub, private val request: Req
6060
breadcrumb.setData("host", host)
6161
breadcrumb.setData("path", encodedPath)
6262
// needs this as unix timestamp for rrweb
63-
breadcrumb.setData("start_timestamp", CurrentDateProvider.getInstance().currentTimeMillis)
63+
breadcrumb.setData(SpanDataConvention.HTTP_START_TIMESTAMP, CurrentDateProvider.getInstance().currentTimeMillis)
6464

6565
// We add the same data to the root call span
6666
callRootSpan?.setData("url", url)
@@ -154,7 +154,7 @@ internal class SentryOkHttpEvent(private val hub: IHub, private val request: Req
154154
response?.let { hint.set(TypeCheckHint.OKHTTP_RESPONSE, it) }
155155

156156
// needs this as unix timestamp for rrweb
157-
breadcrumb.setData("end_timestamp", CurrentDateProvider.getInstance().currentTimeMillis)
157+
breadcrumb.setData(SpanDataConvention.HTTP_END_TIMESTAMP, CurrentDateProvider.getInstance().currentTimeMillis)
158158
// We send the breadcrumb even without spans.
159159
hub.addBreadcrumb(breadcrumb, hint)
160160

sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ public open class SentryOkHttpInterceptor(
164164
hint[OKHTTP_RESPONSE] = it
165165
}
166166
// needs this as unix timestamp for rrweb
167-
breadcrumb.setData("start_timestamp", startTimestamp)
168-
breadcrumb.setData("end_timestamp", CurrentDateProvider.getInstance().currentTimeMillis)
167+
breadcrumb.setData(SpanDataConvention.HTTP_START_TIMESTAMP, startTimestamp)
168+
breadcrumb.setData(SpanDataConvention.HTTP_END_TIMESTAMP, CurrentDateProvider.getInstance().currentTimeMillis)
169169

170170
hub.addBreadcrumb(breadcrumb, hint)
171171
}

sentry/api/sentry.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2961,10 +2961,12 @@ public abstract interface class io/sentry/SpanDataConvention {
29612961
public static final field FRAMES_FROZEN Ljava/lang/String;
29622962
public static final field FRAMES_SLOW Ljava/lang/String;
29632963
public static final field FRAMES_TOTAL Ljava/lang/String;
2964+
public static final field HTTP_END_TIMESTAMP Ljava/lang/String;
29642965
public static final field HTTP_FRAGMENT_KEY Ljava/lang/String;
29652966
public static final field HTTP_METHOD_KEY Ljava/lang/String;
29662967
public static final field HTTP_QUERY_KEY Ljava/lang/String;
29672968
public static final field HTTP_RESPONSE_CONTENT_LENGTH_KEY Ljava/lang/String;
2969+
public static final field HTTP_START_TIMESTAMP Ljava/lang/String;
29682970
public static final field HTTP_STATUS_CODE_KEY Ljava/lang/String;
29692971
public static final field THREAD_ID Ljava/lang/String;
29702972
public static final field THREAD_NAME Ljava/lang/String;

sentry/src/main/java/io/sentry/SpanDataConvention.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ public interface SpanDataConvention {
2121
String FRAMES_SLOW = "frames.slow";
2222
String FRAMES_FROZEN = "frames.frozen";
2323
String FRAMES_DELAY = "frames.delay";
24+
String HTTP_START_TIMESTAMP = "http.start_timestamp";
25+
String HTTP_END_TIMESTAMP = "http.end_timestamp";
2426
}

0 commit comments

Comments
 (0)