From ea01ae43beba9bf1d193452792e67c399033ac60 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Thu, 21 Mar 2019 23:05:28 -0700 Subject: [PATCH] Addresses metrics nits --- app/metrics.yaml | 29 +++++++++++-------- .../java/org/mozilla/fenix/HomeActivity.kt | 2 +- .../components/metrics/GleanMetricsService.kt | 29 ++++++++++++++----- docs/telemetry.md | 18 +++++------- 4 files changed, 47 insertions(+), 31 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 50acb00db..97b04b374 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1,6 +1,7 @@ -# This file defines the metrics that are recorded by glean telemetry. They are -# automatically converted to Kotlin code at build time using the `glean_parser` -# PyPI package. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + $schema: moz://mozilla.org/schemas/glean/metrics/1-0-0 @@ -10,53 +11,57 @@ events: description: > A user opened the app extra_keys: - source: "The source from which the app was opened" + source: + description: "The method used to open Fenix. Possible values are: `app_icon`, `custom_tab` or `link`" bugs: - 968 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - telemetry-client-dev@mozilla.com - expires: never + expires: "2020-03-01" search_bar_tapped: type: event description: > A user tapped the search bar extra_keys: - source: "The source from which the search bar was tapped" + source: + description: "The view the user was on when they initiated the search (For example: `Home` or `Browser`)" bugs: - 959 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - telemetry-client-dev@mozilla.com - expires: never + expires: "2020-03-01" entered_url: type: event description: > A user entered a url extra_keys: - autocomplete: "The url was filled by the autocomplete" + autocomplete: + description: "A boolean that tells us whether the URL was autofilled by an Autocomplete suggestion" bugs: - 959 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - telemetry-client-dev@mozilla.com - expires: never + expires: "2020-03-01" performed_search: type: event description: > A user performed a search extra_keys: - search_suggestion: "The search was initiated from a search suggestion" + search_suggestion: + description: "A boolean that tells us whether or not the search term was suggested by the Awesomebar" bugs: - 959 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - telemetry-client-dev@mozilla.com - expires: never + expires: "2020-03-01" metrics: default_browser: @@ -71,4 +76,4 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - telemetry-client-dev@mozilla.com - expires: never \ No newline at end of file + expires: "2020-03-01" \ No newline at end of file diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 9d2489b0b..1506a3aa3 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -76,7 +76,7 @@ open class HomeActivity : AppCompatActivity() { handleOpenedFromExternalSourceIfNecessary(intent) } - + override fun onResume() { super.onResume() // There is no session, or it has timed out; we should pop everything to home diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index e57afbfef..81190eb27 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -12,12 +12,27 @@ import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.debug.GleanMetrics.Metrics import org.mozilla.fenix.debug.GleanMetrics.Events -private val Event.metricType: EventMetricType? +private class EventWrapper>( + private val event: EventMetricType, + private val keyMapper: ((String) -> T)? = null +) { + fun track(event: Event) { + val extras = if (keyMapper != null) { + event.extras?.mapKeys { keyMapper.invoke(it.key) } + } else { + null + } + + this.event.record(extras) + } +} + +private val Event.wrapper get() = when (this) { - is Event.OpenedApp -> Events.appOpened - is Event.SearchBarTapped -> Events.searchBarTapped - is Event.EnteredUrl -> Events.enteredUrl - is Event.PerformedSearch -> Events.performedSearch + is Event.OpenedApp -> EventWrapper(Events.appOpened) { Events.appOpenedKeys.valueOf(it) } + is Event.SearchBarTapped -> EventWrapper(Events.searchBarTapped) { Events.searchBarTappedKeys.valueOf(it) } + is Event.EnteredUrl -> EventWrapper(Events.enteredUrl) { Events.enteredUrlKeys.valueOf(it) } + is Event.PerformedSearch -> EventWrapper(Events.performedSearch) { Events.performedSearchKeys.valueOf(it) } else -> null } @@ -32,11 +47,11 @@ class GleanMetricsService(private val context: Context) : MetricsService { } override fun track(event: Event) { - event.metricType?.record(event.extras) + event.wrapper?.track(event) } override fun shouldTrack(event: Event): Boolean { - return Settings.getInstance(context).isTelemetryEnabled && event.metricType != null + return Settings.getInstance(context).isTelemetryEnabled && event.wrapper != null } companion object { diff --git a/docs/telemetry.md b/docs/telemetry.md index 152d8eed8..121cb95ed 100644 --- a/docs/telemetry.md +++ b/docs/telemetry.md @@ -12,16 +12,12 @@ Fenix creates and tries to send a "baseline" ping. It is defined inside the [`me ## Events -Fenix sends event pings that allows us to measure feature performance. +Fenix sends event pings that allows us to measure feature performance. These are defined inside the [`metrics.yaml`](https://github.com/mozilla-mobile/fenix/blob/master/app/metrics.yaml) file. -| Event | Glean Key | Leanplum Key | extras | -|-----------------|-------------------|--------------|-----------------------| -| OpenedApp | app_opened | E_Opened_App | source* | -| SearchBarTapped | search_bar_tapped | | source** | -| EnteredUrl | entered_url | | autocomplete*** | -| PerformedSearch | performed_search | | search_suggestion**** | +## Leanplum Events -* `source`: The method used to open Fenix (For exmaple: `app_icon` or `link`) -** `source`: The view the user was on when they initiated the search (For example: `Home` or `Browser`) -*** `autocomplete`: A boolean that tells us wether the URL was autofilled by an Autocomplete suggestion -**** `search_suggestion`: A boolean that tells us wether or not the search term was suggested by the Awesomebar \ No newline at end of file +| Event | Leanplum Key | extras | +|-----------------|---------------|-----------------------| +| OpenedApp | E_Opened_App | source* | + +* `source`: The method used to open Fenix (For exmaple: `app_icon`, `custom_tab` or `link`) \ No newline at end of file