-
Notifications
You must be signed in to change notification settings - Fork 7
/
SessionPayloadSourceImpl.kt
38 lines (34 loc) · 1.92 KB
/
SessionPayloadSourceImpl.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package io.embrace.android.embracesdk.capture.envelope.session
import io.embrace.android.embracesdk.anr.ndk.NativeThreadSamplerService
import io.embrace.android.embracesdk.arch.schema.AppTerminationCause
import io.embrace.android.embracesdk.internal.payload.SessionPayload
import io.embrace.android.embracesdk.internal.payload.Span
import io.embrace.android.embracesdk.internal.payload.toNewPayload
import io.embrace.android.embracesdk.internal.spans.CurrentSessionSpan
import io.embrace.android.embracesdk.internal.spans.EmbraceSpanData
import io.embrace.android.embracesdk.internal.spans.SpanSink
import io.embrace.android.embracesdk.logging.InternalErrorService
import io.embrace.android.embracesdk.session.captureDataSafely
import io.embrace.android.embracesdk.session.orchestrator.SessionSnapshotType
internal class SessionPayloadSourceImpl(
private val internalErrorService: InternalErrorService,
private val nativeThreadSamplerService: NativeThreadSamplerService?,
private val spanSink: SpanSink,
private val currentSessionSpan: CurrentSessionSpan
) : SessionPayloadSource {
override fun getSessionPayload(endType: SessionSnapshotType): SessionPayload {
return SessionPayload(
spans = retrieveSpanData(endType),
spanSnapshots = null,
internalError = captureDataSafely { internalErrorService.currentExceptionError?.toNewPayload() },
sharedLibSymbolMapping = captureDataSafely { nativeThreadSamplerService?.getNativeSymbols() }
)
}
private fun retrieveSpanData(endType: SessionSnapshotType): List<Span>? = captureDataSafely {
when (endType) {
SessionSnapshotType.NORMAL_END -> currentSessionSpan.endSession(null)
SessionSnapshotType.PERIODIC_CACHE -> spanSink.completedSpans()
SessionSnapshotType.JVM_CRASH -> currentSessionSpan.endSession(AppTerminationCause.Crash)
}.map(EmbraceSpanData::toNewPayload)
}
}