@@ -18,7 +18,6 @@ import com.datadog.android.core.internal.persistence.file.existsSafe
18
18
import com.datadog.android.core.internal.persistence.file.listFilesSafe
19
19
import com.datadog.android.core.internal.persistence.file.readTextSafe
20
20
import com.datadog.android.core.internal.utils.executeSafe
21
- import com.datadog.android.log.LogAttributes
22
21
import com.google.gson.JsonObject
23
22
import java.io.File
24
23
import java.util.Locale
@@ -44,9 +43,6 @@ internal class DatadogNdkCrashHandler(
44
43
internal var lastNetworkInfo: NetworkInfo ? = null
45
44
internal var lastNdkCrashLog: NdkCrashLog ? = null
46
45
47
- internal var processedForLogs = false
48
- internal var processedForRum = false
49
-
50
46
// region NdkCrashHandler
51
47
52
48
override fun prepareData () {
@@ -55,12 +51,9 @@ internal class DatadogNdkCrashHandler(
55
51
}
56
52
}
57
53
58
- override fun handleNdkCrash (
59
- sdkCore : FeatureSdkCore ,
60
- reportTarget : NdkCrashHandler .ReportTarget
61
- ) {
54
+ override fun handleNdkCrash (sdkCore : FeatureSdkCore ) {
62
55
dataPersistenceExecutorService.executeSafe(" NDK crash report " , internalLogger) {
63
- checkAndHandleNdkCrashReport(sdkCore, reportTarget )
56
+ checkAndHandleNdkCrashReport(sdkCore)
64
57
}
65
58
}
66
59
@@ -136,27 +129,13 @@ internal class DatadogNdkCrashHandler(
136
129
}
137
130
138
131
@WorkerThread
139
- private fun checkAndHandleNdkCrashReport (
140
- sdkCore : FeatureSdkCore ,
141
- reportTarget : NdkCrashHandler .ReportTarget
142
- ) {
132
+ private fun checkAndHandleNdkCrashReport (sdkCore : FeatureSdkCore ) {
143
133
if (lastNdkCrashLog != null ) {
144
134
handleNdkCrashLog(
145
135
sdkCore,
146
136
lastNdkCrashLog,
147
- lastRumViewEvent,
148
- lastUserInfo,
149
- lastNetworkInfo,
150
- reportTarget
137
+ lastRumViewEvent
151
138
)
152
- }
153
-
154
- when (reportTarget) {
155
- NdkCrashHandler .ReportTarget .RUM -> processedForRum = true
156
- NdkCrashHandler .ReportTarget .LOGS -> processedForLogs = true
157
- }
158
-
159
- if (processedForRum && processedForLogs) {
160
139
clearAllReferences()
161
140
}
162
141
}
@@ -172,86 +151,21 @@ internal class DatadogNdkCrashHandler(
172
151
private fun handleNdkCrashLog (
173
152
sdkCore : FeatureSdkCore ,
174
153
ndkCrashLog : NdkCrashLog ? ,
175
- lastViewEvent : JsonObject ? ,
176
- lastUserInfo : UserInfo ? ,
177
- lastNetworkInfo : NetworkInfo ? ,
178
- reportTarget : NdkCrashHandler .ReportTarget
154
+ lastViewEvent : JsonObject ?
179
155
) {
180
156
if (ndkCrashLog == null ) {
181
157
return
182
158
}
183
159
val errorLogMessage = LOG_CRASH_MSG .format(Locale .US , ndkCrashLog.signalName)
184
160
185
- when (reportTarget) {
186
- NdkCrashHandler .ReportTarget .RUM -> {
187
- if (lastViewEvent != null ) {
188
- sendCrashRumEvent(
189
- sdkCore,
190
- errorLogMessage,
191
- ndkCrashLog,
192
- lastViewEvent
193
- )
194
- }
195
- }
196
-
197
- NdkCrashHandler .ReportTarget .LOGS -> {
198
- sendCrashLogEvent(
199
- sdkCore,
200
- errorLogMessage,
201
- generateLogAttributes(lastViewEvent, ndkCrashLog),
202
- ndkCrashLog,
203
- lastNetworkInfo,
204
- lastUserInfo
205
- )
206
- }
207
- }
208
- }
209
-
210
- private fun generateLogAttributes (
211
- lastRumViewEvent : JsonObject ? ,
212
- ndkCrashLog : NdkCrashLog
213
- ): Map <String , String > {
214
- val logAttributes = if (lastRumViewEvent != null ) {
215
- val (applicationId, sessionId, viewId) = try {
216
- val extractId = { property: String ->
217
- lastRumViewEvent.getAsJsonObject(property)
218
- .getAsJsonPrimitive(" id" )
219
- .asString
220
- }
221
- val applicationId = extractId(" application" )
222
- val sessionId = extractId(" session" )
223
- val viewId = extractId(" view" )
224
- Triple (applicationId, sessionId, viewId)
225
- } catch (@Suppress(" TooGenericExceptionCaught" ) e: Exception ) {
226
- internalLogger.log(
227
- InternalLogger .Level .WARN ,
228
- InternalLogger .Target .MAINTAINER ,
229
- { WARN_CANNOT_READ_VIEW_INFO_DATA },
230
- e
231
- )
232
- Triple (null , null , null )
233
- }
234
- if (applicationId != null && sessionId != null && viewId != null ) {
235
- mapOf (
236
- LogAttributes .RUM_SESSION_ID to sessionId,
237
- LogAttributes .RUM_APPLICATION_ID to applicationId,
238
- LogAttributes .RUM_VIEW_ID to viewId,
239
- LogAttributes .ERROR_STACK to ndkCrashLog.stacktrace,
240
- LogAttributes .ERROR_SOURCE_TYPE to nativeCrashSourceType
241
- )
242
- } else {
243
- mapOf (
244
- LogAttributes .ERROR_STACK to ndkCrashLog.stacktrace,
245
- LogAttributes .ERROR_SOURCE_TYPE to nativeCrashSourceType
246
- )
247
- }
248
- } else {
249
- mapOf (
250
- LogAttributes .ERROR_STACK to ndkCrashLog.stacktrace,
251
- LogAttributes .ERROR_SOURCE_TYPE to nativeCrashSourceType
161
+ if (lastViewEvent != null ) {
162
+ sendCrashRumEvent(
163
+ sdkCore,
164
+ errorLogMessage,
165
+ ndkCrashLog,
166
+ lastViewEvent
252
167
)
253
168
}
254
- return logAttributes
255
169
}
256
170
257
171
@Suppress(" StringLiteralDuplication" )
@@ -285,38 +199,6 @@ internal class DatadogNdkCrashHandler(
285
199
}
286
200
}
287
201
288
- @Suppress(" StringLiteralDuplication" )
289
- @WorkerThread
290
- private fun sendCrashLogEvent (
291
- sdkCore : FeatureSdkCore ,
292
- errorLogMessage : String ,
293
- logAttributes : Map <String , String >,
294
- ndkCrashLog : NdkCrashLog ,
295
- lastNetworkInfo : NetworkInfo ? ,
296
- lastUserInfo : UserInfo ?
297
- ) {
298
- val logsFeature = sdkCore.getFeature(Feature .LOGS_FEATURE_NAME )
299
- if (logsFeature != null ) {
300
- logsFeature.sendEvent(
301
- mapOf (
302
- " loggerName" to LOGGER_NAME ,
303
- " type" to " ndk_crash" ,
304
- " message" to errorLogMessage,
305
- " attributes" to logAttributes,
306
- " timestamp" to ndkCrashLog.timestamp,
307
- " networkInfo" to lastNetworkInfo,
308
- " userInfo" to lastUserInfo
309
- )
310
- )
311
- } else {
312
- internalLogger.log(
313
- InternalLogger .Level .INFO ,
314
- InternalLogger .Target .USER ,
315
- { INFO_LOGS_FEATURE_NOT_REGISTERED }
316
- )
317
- }
318
- }
319
-
320
202
@SuppressWarnings(" TooGenericExceptionCaught" )
321
203
private fun clearCrashLog () {
322
204
if (ndkCrashDataDirectory.existsSafe(internalLogger)) {
@@ -349,16 +231,9 @@ internal class DatadogNdkCrashHandler(
349
231
internal const val USER_INFO_FILE_NAME = " user_information"
350
232
internal const val NETWORK_INFO_FILE_NAME = " network_information"
351
233
352
- internal const val LOGGER_NAME = " ndk_crash"
353
-
354
234
internal const val LOG_CRASH_MSG = " NDK crash detected with signal: %s"
355
235
internal const val ERROR_READ_NDK_DIR = " Error while trying to read the NDK crash directory"
356
236
357
- internal const val WARN_CANNOT_READ_VIEW_INFO_DATA =
358
- " Cannot read application, session, view IDs data from view event."
359
-
360
- internal const val INFO_LOGS_FEATURE_NOT_REGISTERED =
361
- " Logs feature is not registered, won't report NDK crash info as log."
362
237
internal const val INFO_RUM_FEATURE_NOT_REGISTERED =
363
238
" RUM feature is not registered, won't report NDK crash info as RUM error."
364
239
0 commit comments