Skip to content

Commit a61e2bc

Browse files
committed
fix: error handling around models
Models can throw if something goes wrong initializing them.
1 parent f7ab8a0 commit a61e2bc

File tree

3 files changed

+45
-17
lines changed

3 files changed

+45
-17
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/debug/internal/logging/otel/OneSignalOpenTelemetry.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.annotation.RequiresApi
55
import com.onesignal.core.internal.config.ConfigModelStore
66
import com.onesignal.core.internal.http.impl.HTTP_SDK_VERSION_HEADER_KEY
77
import com.onesignal.core.internal.http.impl.HTTP_SDK_VERSION_HEADER_VALUE
8+
import com.onesignal.debug.internal.logging.Logging
89
import com.onesignal.debug.internal.logging.otel.attributes.OneSignalOtelFieldsPerEvent
910
import com.onesignal.debug.internal.logging.otel.attributes.OneSignalOtelFieldsTopLevel
1011
import com.onesignal.debug.internal.logging.otel.config.OtelConfigCrashFile
@@ -71,9 +72,17 @@ internal class OneSignalOpenTelemetryRemote(
7172
_osPerEventFields: OneSignalOtelFieldsPerEvent,
7273
) : OneSignalOpenTelemetryBase(_osTopLevelFields, _osPerEventFields),
7374
IOneSignalOpenTelemetryRemote {
74-
val extraHttpHeaders by lazy {
75+
private val appId: String get() =
76+
try {
77+
_configModelStore.model.appId
78+
} catch (_: NullPointerException) {
79+
Logging.error("Auth missing for crash log reporting!")
80+
""
81+
}
82+
83+
val extraHttpHeaders: Map<String, String> by lazy {
7584
mapOf(
76-
"X-OneSignal-App-Id" to _configModelStore.model.appId,
85+
"X-OneSignal-App-Id" to appId,
7786
HTTP_SDK_VERSION_HEADER_KEY to HTTP_SDK_VERSION_HEADER_VALUE,
7887
"x-honeycomb-team" to "", // TODO: REMOVE
7988
)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/debug/internal/logging/otel/attributes/OneSignalOtelFieldsPerEvent.kt

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.onesignal.common.IDManager
44
import com.onesignal.core.internal.application.IApplicationService
55
import com.onesignal.core.internal.config.ConfigModelStore
66
import com.onesignal.core.internal.time.ITime
7+
import com.onesignal.debug.internal.logging.Logging
78
import com.onesignal.user.internal.identity.IdentityModelStore
89
import com.squareup.wire.internal.toUnmodifiableMap
910
import java.util.UUID
@@ -17,39 +18,61 @@ internal class OneSignalOtelFieldsPerEvent(
1718
fun getAttributes(): Map<String, String> {
1819
val attributes: MutableMap<String, String> = mutableMapOf()
1920

20-
attributes.put("log.record.uid", recordId.toString())
21+
attributes["log.record.uid"] = recordId.toString()
2122

2223
attributes
2324
.putIfValueNotNull(
25+
"$OS_OTEL_NAMESPACE.app_id",
26+
appId
27+
).putIfValueNotNull(
2428
"$OS_OTEL_NAMESPACE.onesignal_id",
2529
onesignalId
2630
).putIfValueNotNull(
2731
"$OS_OTEL_NAMESPACE.push_subscription_id",
2832
subscriptionId
2933
)
3034

31-
attributes.put("android.app.state", appState)
32-
attributes.put("process.uptime", processUptime.toString())
33-
attributes.put("thread.name", currentThreadName)
35+
attributes["android.app.state"] = appState
36+
attributes["process.uptime"] = processUptime.toString()
37+
attributes["thread.name"] = currentThreadName
3438

3539
return attributes.toUnmodifiableMap()
3640
}
3741

42+
private val appId: String? get() {
43+
try {
44+
return _configModelStore.model.appId
45+
} catch (_: NullPointerException) {
46+
Logging.warn("app_id not available to add to crash log")
47+
return null
48+
}
49+
}
50+
3851
private val onesignalId: String? get() {
39-
val onesignalId = _identityModelStore.model.onesignalId
40-
if (IDManager.isLocalId(onesignalId)) {
52+
try {
53+
val onesignalId = _identityModelStore.model.onesignalId
54+
if (IDManager.isLocalId(onesignalId)) {
55+
return null
56+
}
57+
return onesignalId
58+
} catch (_: NullPointerException) {
59+
Logging.warn("onesignalId not available to add to crash log")
4160
return null
4261
}
43-
return onesignalId
4462
}
4563

4664
private val subscriptionId: String? get() {
47-
val pushSubscriptionId = _configModelStore.model.pushSubscriptionId
48-
if (pushSubscriptionId == null ||
49-
IDManager.isLocalId(pushSubscriptionId)) {
65+
try {
66+
val pushSubscriptionId = _configModelStore.model.pushSubscriptionId
67+
if (pushSubscriptionId == null ||
68+
IDManager.isLocalId(pushSubscriptionId)) {
69+
return null
70+
}
71+
return pushSubscriptionId
72+
} catch (_: NullPointerException) {
73+
Logging.warn("subscriptionId not available to add to crash log")
5074
return null
5175
}
52-
return pushSubscriptionId
5376
}
5477

5578
// https://opentelemetry.io/docs/specs/semconv/registry/attributes/android/

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/debug/internal/logging/otel/attributes/OneSignalOtelFieldsTopLevel.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.onesignal.common.AndroidUtils
55
import com.onesignal.common.OneSignalUtils
66
import com.onesignal.common.OneSignalWrapper
77
import com.onesignal.core.internal.application.IApplicationService
8-
import com.onesignal.core.internal.config.ConfigModelStore
98
import com.onesignal.core.internal.device.IInstallIdService
109
import com.squareup.wire.internal.toUnmodifiableMap
1110

@@ -20,14 +19,11 @@ internal const val OS_OTEL_NAMESPACE: String = "ossdk"
2019
*/
2120
internal class OneSignalOtelFieldsTopLevel(
2221
private val _applicationService: IApplicationService,
23-
private val _configModelStore: ConfigModelStore,
2422
private val _installIdService: IInstallIdService,
2523
) {
2624
suspend fun getAttributes(): Map<String, String> {
2725
val attributes: MutableMap<String, String> =
2826
mutableMapOf(
29-
"$OS_OTEL_NAMESPACE.app_id" to
30-
_configModelStore.model.appId,
3127
"$OS_OTEL_NAMESPACE.install_id" to
3228
_installIdService.getId().toString(),
3329
"$OS_OTEL_NAMESPACE.sdk_base"

0 commit comments

Comments
 (0)