1
0
Fork 0

No Issue - Adds a debug metric controller

master
Jeff Boek 2019-04-09 10:29:09 -07:00
parent 61e99ea476
commit 76033f3f20
3 changed files with 48 additions and 17 deletions

View File

@ -17,7 +17,7 @@ import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.GleanMetricsService
import org.mozilla.fenix.components.metrics.LeanplumMetricsService
import org.mozilla.fenix.components.metrics.Metrics
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.utils.Settings
import org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID
import org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION
@ -68,8 +68,8 @@ class Analytics(
)
}
val metrics: Metrics by lazy {
Metrics(
val metrics: MetricController by lazy {
MetricController.create(
listOf(
GleanMetricsService(context),
LeanplumMetricsService(context as Application)

View File

@ -7,14 +7,12 @@ import android.content.Context
import mozilla.components.service.glean.Glean
import mozilla.components.service.glean.private.NoExtraKeys
import mozilla.components.support.utils.Browsers
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.GleanMetrics.CrashReporter
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.FindInPage
import org.mozilla.fenix.GleanMetrics.ContextMenu
import org.mozilla.fenix.GleanMetrics.QuickActionSheet
import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.utils.Settings
private class EventWrapper<T : Enum<T>>(
private val recorder: ((Map<T, String>?) -> Unit),
@ -109,13 +107,19 @@ private val Event.wrapper
}
class GleanMetricsService(private val context: Context) : MetricsService {
private var initialized = false
override fun start() {
Glean.setUploadEnabled(true)
if (initialized) return
Glean.initialize(context)
Glean.setUploadEnabled(IsGleanEnabled)
Metrics.apply {
defaultBrowser.set(Browsers.all(context).isDefaultBrowser)
}
initialized = true
}
override fun stop() {
@ -127,10 +131,6 @@ class GleanMetricsService(private val context: Context) : MetricsService {
}
override fun shouldTrack(event: Event): Boolean {
return Settings.getInstance(context).isTelemetryEnabled && event.wrapper != null
}
companion object {
private const val IsGleanEnabled = BuildConfig.TELEMETRY
return event.wrapper != null
}
}

View File

@ -7,6 +7,7 @@ import mozilla.components.support.base.Component
import mozilla.components.support.base.facts.Fact
import mozilla.components.support.base.facts.FactProcessor
import mozilla.components.support.base.facts.Facts
import mozilla.components.support.base.log.logger.Logger
import org.mozilla.fenix.BuildConfig
sealed class Event {
@ -144,7 +145,37 @@ interface MetricsService {
fun shouldTrack(event: Event): Boolean
}
class Metrics(private val services: List<MetricsService>, private val isTelemetryEnabled: () -> Boolean) {
interface MetricController {
fun start()
fun stop()
fun track(event: Event)
companion object {
fun create(services: List<MetricsService>, isTelemetryEnabled: () -> Boolean): MetricController {
return if (BuildConfig.TELEMETRY) return ReleaseMetricController(services, isTelemetryEnabled)
else DebugMetricController()
}
}
}
private class DebugMetricController : MetricController {
override fun start() {
Logger.debug("DebugMetricController: start")
}
override fun stop() {
Logger.debug("DebugMetricController: stop")
}
override fun track(event: Event) {
Logger.debug("DebugMetricController: track event: $event")
}
}
private class ReleaseMetricController(
private val services: List<MetricsService>,
private val isTelemetryEnabled: () -> Boolean
) : MetricController {
private var initialized = false
init {
@ -157,22 +188,22 @@ class Metrics(private val services: List<MetricsService>, private val isTelemetr
})
}
fun start() {
if (BuildConfig.TELEMETRY && !isTelemetryEnabled.invoke() || initialized) { return }
override fun start() {
if (!isTelemetryEnabled.invoke() || initialized) { return }
services.forEach { it.start() }
initialized = true
}
fun stop() {
override fun stop() {
if (!initialized) { return }
services.forEach { it.stop() }
initialized = false
}
fun track(event: Event) {
if (BuildConfig.TELEMETRY && !isTelemetryEnabled.invoke() && !initialized) { return }
override fun track(event: Event) {
if (!isTelemetryEnabled.invoke() && !initialized) { return }
services
.filter { it.shouldTrack(event) }