Skip to content

Populate DataCollectionStatus for Crashlytics and Perf in Sessions #5205

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

Merged
merged 3 commits into from
Jul 28, 2023
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
1 change: 1 addition & 0 deletions firebase-sessions/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

* [fixed] Fixed NPE when no version name is
set ([#5195](//github.com/firebase/firebase-android-sdk/issues/5195)).
* [fixed] Populate DataCollectionStatus fields for Crashlytics and Perf.

# 1.0.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ internal constructor(
}

sessionCoordinator.attemptLoggingSessionEvent(
SessionEvents.startSession(firebaseApp, sessionDetails, sessionSettings)
SessionEvents.startSession(firebaseApp, sessionDetails, sessionSettings, subscribers)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ internal data class SessionInfo(

/** Contains the data collection state for all dependent SDKs and sampling info */
internal data class DataCollectionStatus(
val performance: DataCollectionState = DataCollectionState.COLLECTION_ENABLED,
val crashlytics: DataCollectionState = DataCollectionState.COLLECTION_ENABLED,
val performance: DataCollectionState = DataCollectionState.COLLECTION_SDK_NOT_INSTALLED,
val crashlytics: DataCollectionState = DataCollectionState.COLLECTION_SDK_NOT_INSTALLED,
val sessionSamplingRate: Double = 1.0,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.os.Build
import com.google.firebase.FirebaseApp
import com.google.firebase.encoders.DataEncoder
import com.google.firebase.encoders.json.JsonDataEncoderBuilder
import com.google.firebase.sessions.api.SessionSubscriber
import com.google.firebase.sessions.settings.SessionsSettings

/** Contains functions for [SessionEvent]s. */
Expand All @@ -40,6 +41,7 @@ internal object SessionEvents {
firebaseApp: FirebaseApp,
sessionDetails: SessionDetails,
sessionsSettings: SessionsSettings,
subscribers: Map<SessionSubscriber.Name, SessionSubscriber> = emptyMap(),
) =
SessionEvent(
eventType = EventType.SESSION_START,
Expand All @@ -49,7 +51,11 @@ internal object SessionEvents {
sessionDetails.firstSessionId,
sessionDetails.sessionIndex,
eventTimestampUs = sessionDetails.sessionStartTimestampUs,
DataCollectionStatus(sessionSamplingRate = sessionsSettings.samplingRate),
DataCollectionStatus(
performance = toDataCollectionState(subscribers[SessionSubscriber.Name.PERFORMANCE]),
crashlytics = toDataCollectionState(subscribers[SessionSubscriber.Name.CRASHLYTICS]),
sessionSamplingRate = sessionsSettings.samplingRate,
),
),
applicationInfo = getApplicationInfo(firebaseApp)
)
Expand Down Expand Up @@ -81,4 +87,13 @@ internal object SessionEvents {
)
)
}

private fun toDataCollectionState(subscriber: SessionSubscriber?): DataCollectionState =
if (subscriber == null) {
DataCollectionState.COLLECTION_SDK_NOT_INSTALLED
} else if (subscriber.isDataCollectionEnabled) {
DataCollectionState.COLLECTION_ENABLED
} else {
DataCollectionState.COLLECTION_DISABLED
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import com.google.firebase.FirebaseApp
import com.google.firebase.sessions.SessionEvents.SESSION_EVENT_ENCODER
import com.google.firebase.sessions.api.SessionSubscriber
import com.google.firebase.sessions.settings.SessionsSettings
import com.google.firebase.sessions.testing.FakeFirebaseApp
import com.google.firebase.sessions.testing.FakeSessionSubscriber
import com.google.firebase.sessions.testing.FakeSettingsProvider
import com.google.firebase.sessions.testing.TestSessionEventData
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand Down Expand Up @@ -51,6 +53,15 @@ class SessionEventEncoderTest {
localOverrideSettings = FakeSettingsProvider(),
remoteSettings = FakeSettingsProvider(),
),
subscribers =
mapOf(
SessionSubscriber.Name.CRASHLYTICS to FakeSessionSubscriber(),
SessionSubscriber.Name.PERFORMANCE to
FakeSessionSubscriber(
isDataCollectionEnabled = false,
sessionSubscriberName = SessionSubscriber.Name.PERFORMANCE,
),
),
)

val json = SESSION_EVENT_ENCODER.encode(sessionEvent)
Expand All @@ -66,7 +77,7 @@ class SessionEventEncoderTest {
"sessionIndex":3,
"eventTimestampUs":12340000,
"dataCollectionStatus":{
"performance":2,
"performance":3,
"crashlytics":2,
"sessionSamplingRate":1.0
},
Expand Down Expand Up @@ -133,8 +144,8 @@ class SessionEventEncoderTest {
"sessionIndex":0,
"eventTimestampUs":0,
"dataCollectionStatus":{
"performance":2,
"crashlytics":2,
"performance":1,
"crashlytics":1,
"sessionSamplingRate":1.0
},
"firebaseInstallationId":""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ internal object TestSessionEventData {

val TEST_DATA_COLLECTION_STATUS =
DataCollectionStatus(
performance = DataCollectionState.COLLECTION_ENABLED,
crashlytics = DataCollectionState.COLLECTION_ENABLED,
performance = DataCollectionState.COLLECTION_SDK_NOT_INSTALLED,
crashlytics = DataCollectionState.COLLECTION_SDK_NOT_INSTALLED,
sessionSamplingRate = 1.0
)

Expand Down