Prompt user for debug logs with slow notifications.

This commit is contained in:
Clark
2023-08-09 12:18:25 -04:00
committed by Alex Hart
parent b51ec53e33
commit bb83ddfe28
11 changed files with 372 additions and 2 deletions

View File

@@ -5,10 +5,18 @@
package org.thoughtcrime.securesms.notifications
import android.text.TextUtils
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.LocalMetricsDatabase
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.LocaleFeatureFlags
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.hours
/**
* Heuristic for estimating if a user has been experiencing issues with delayed notifications.
@@ -22,6 +30,44 @@ object SlowNotificationHeuristics {
private val TAG = Log.tag(SlowNotificationHeuristics::class.java)
fun getConfiguration(): Configuration {
val json = FeatureFlags.delayedNotificationsPromptConfig()
return if (TextUtils.isEmpty(json)) {
getDefaultConfiguration()
} else {
try {
JsonUtils.fromJson(json, Configuration::class.java)
} catch (exception: Exception) {
getDefaultConfiguration()
}
}
}
private fun getDefaultConfiguration(): Configuration {
return Configuration(
minimumEventAgeMs = 3.days.inWholeMilliseconds,
minimumServiceEventCount = 10,
serviceStartFailurePercentage = 0.5f,
messageLatencyPercentage = 75,
messageLatencyThreshold = 6.hours.inWholeMilliseconds,
minimumMessageLatencyEvents = 50,
weeklyFailedQueueDrains = 5
)
}
@JvmStatic
fun shouldPromptUserForLogs(): Boolean {
if (!LocaleFeatureFlags.isDelayedNotificationPromptEnabled() || SignalStore.uiHints().hasDeclinedToShareNotificationLogs()) {
return false
}
if (System.currentTimeMillis() - SignalStore.uiHints().lastNotificationLogsPrompt < TimeUnit.DAYS.toMillis(7)) {
return false
}
val configuration = getConfiguration()
return isHavingDelayedNotifications(configuration)
}
fun isHavingDelayedNotifications(configuration: Configuration): Boolean {
val db = LocalMetricsDatabase.getInstance(ApplicationDependencies.getApplication())