diff --git a/app/metrics.yaml b/app/metrics.yaml index 50acb00db1b3..97b04b3740f9 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/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index e57afbfef162..507d35f4f8d3 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,24 @@ 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 +44,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 152d8eed8517..19dd840a11ae 100644 --- a/docs/telemetry.md +++ b/docs/telemetry.md @@ -12,16 +12,4 @@ 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. - -| 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**** | - -* `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 +Fenix sends event pings that allows us to measure feature performance. These are defined inside the It is defined inside the [`metrics.yaml`](https://github.com/mozilla-mobile/fenix/blob/master/app/metrics.yaml) file.