diff --git a/devtools/client/netmonitor/src/middleware/event-telemetry.js b/devtools/client/netmonitor/src/middleware/event-telemetry.js index e1f3fe13345e..432b40236a06 100644 --- a/devtools/client/netmonitor/src/middleware/event-telemetry.js +++ b/devtools/client/netmonitor/src/middleware/event-telemetry.js @@ -10,13 +10,12 @@ const { TOGGLE_REQUEST_FILTER_TYPE, ENABLE_REQUEST_FILTER_TYPE_ONLY, SET_REQUEST_FILTER_TEXT, - SELECT_DETAILS_PANEL_TAB, } = require("../constants"); /** * Event telemetry middleware is responsible for logging - * various events to telemetry. This helps to track Network - * panel usage. + * specific filter events to telemetry. This telemetry + * helps to track Net panel filtering usage. */ function eventTelemetryMiddleware(connector, telemetry) { return store => next => action => { @@ -28,7 +27,6 @@ function eventTelemetryMiddleware(connector, telemetry) { } const state = store.getState(); - const sessionId = toolbox.sessionId; const filterChangeActions = [ TOGGLE_REQUEST_FILTER_TYPE, @@ -36,36 +34,20 @@ function eventTelemetryMiddleware(connector, telemetry) { SET_REQUEST_FILTER_TEXT, ]; - // Record telemetry event when filter changes. if (filterChangeActions.includes(action.type)) { filterChange({ action, state, oldState, telemetry, - sessionId, + sessionId: toolbox.sessionId, }); } - // Record telemetry event when side panel is selected. - if (action.type == SELECT_DETAILS_PANEL_TAB) { - sidePanelChange({ - action, - state, - oldState, - telemetry, - sessionId, - }) - } - return res; }; } -/** - * This helper function is executed when filter related action is fired. - * It's responsible for recording "filters_changed" telemetry event. - */ function filterChange({action, state, oldState, telemetry, sessionId}) { const oldFilterState = oldState.filters; const filterState = state.filters; @@ -97,20 +79,7 @@ function filterChange({action, state, oldState, telemetry, sessionId}) { "trigger": trigger, "active": activeFilters.join(","), "inactive": inactiveFilters.join(","), - "session_id": sessionId, - }); -} - -/** - * This helper function is executed when side panel is selected. - * It's responsible for recording "sidepanel_tool_changed" - * telemetry event. - */ -function sidePanelChange({action, state, oldState, telemetry, sessionId}) { - telemetry.recordEvent("devtools.main", "sidepanel_changed", "netmonitor", null, { - "oldpanel": oldState.ui.detailsPanelSelectedTab, - "newpanel": state.ui.detailsPanelSelectedTab, - "session_id": sessionId, + "session_id": sessionId }); } diff --git a/devtools/client/netmonitor/test/browser.ini b/devtools/client/netmonitor/test/browser.ini index 60def13dbb9d..e390d2bf5ce8 100644 --- a/devtools/client/netmonitor/test/browser.ini +++ b/devtools/client/netmonitor/test/browser.ini @@ -186,7 +186,6 @@ skip-if = true # Bug 1373558 [browser_net_status-codes.js] [browser_net_streaming-response.js] [browser_net_telemetry_filters_changed.js] -[browser_net_telemetry_sidepanel_changed.js] [browser_net_throttle.js] [browser_net_timeline_ticks.js] skip-if = true # TODO: fix the test diff --git a/devtools/client/netmonitor/test/browser_net_telemetry_filters_changed.js b/devtools/client/netmonitor/test/browser_net_telemetry_filters_changed.js index d10e2b69e6ea..2c9c2ab17b98 100644 --- a/devtools/client/netmonitor/test/browser_net_telemetry_filters_changed.js +++ b/devtools/client/netmonitor/test/browser_net_telemetry_filters_changed.js @@ -42,8 +42,6 @@ add_task(async function() { trigger: "html", active: "html", inactive: "all,css,js,xhr,fonts,images,media,ws,other", - }, { - method: "filters_changed" }); info("Click on the 'CSS' filter"); @@ -54,8 +52,6 @@ add_task(async function() { trigger: "css", active: "html,css", inactive: "all,js,xhr,fonts,images,media,ws,other", - }, { - method: "filters_changed" }); info("Filter the output using the text filter input"); @@ -68,8 +64,6 @@ add_task(async function() { trigger: "text", active: "html,css", inactive: "all,js,xhr,fonts,images,media,ws,other", - }, { - method: "filters_changed" }); return teardown(monitor); @@ -86,3 +80,30 @@ function setFreetextFilter(monitor, value) { EventUtils.synthesizeKey(ch, {}, monitor.panelWin); } } + +function checkTelemetryEvent(expectedEvent) { + const events = getFiltersChangedEventsExtra(); + is(events.length, 1, "There was only 1 event logged"); + const [event] = events; + ok(event.session_id > 0, "There is a valid session_id in the logged event"); + const f = e => JSON.stringify(e, null, 2); + is(f(event), f({ + ...expectedEvent, + "session_id": event.session_id + }), "The event has the expected data"); +} + +function getFiltersChangedEventsExtra() { + // Retrieve and clear telemetry events. + const snapshot = Services.telemetry.snapshotEvents(OPTOUT, true); + + const filtersChangedEvents = snapshot.parent.filter(event => + event[1] === "devtools.main" && + event[2] === "filters_changed" && + event[3] === "netmonitor" + ); + + // Since we already know we have the correct event, we only return the `extra` field + // that was passed to it (which is event[5] here). + return filtersChangedEvents.map(event => event[5]); +} diff --git a/devtools/client/netmonitor/test/browser_net_telemetry_sidepanel_changed.js b/devtools/client/netmonitor/test/browser_net_telemetry_sidepanel_changed.js deleted file mode 100644 index 69696fced2ac..000000000000 --- a/devtools/client/netmonitor/test/browser_net_telemetry_sidepanel_changed.js +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -const OPTOUT = Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT; - -/** - * Test the sidepanel_changed telemetry event. - */ -add_task(async function() { - const { tab, monitor } = await initNetMonitor(SIMPLE_URL); - info("Starting test... "); - - const { document, store, windowRequire } = monitor.panelWin; - const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); - store.dispatch(Actions.batchEnable(false)); - - // Remove all telemetry events (you can check about:telemetry). - Services.telemetry.clearEvents(); - - // Ensure no events have been logged - const snapshot = Services.telemetry.snapshotEvents(OPTOUT, true); - ok(!snapshot.parent, "No events have been logged for the main process"); - - // Reload to have one request in the list. - const waitForEvents = waitForNetworkEvents(monitor, 1); - tab.linkedBrowser.loadURI(SIMPLE_URL); - await waitForEvents; - - // Click on a request and wait till the default "Headers" side panel is opened. - info("Click on a request"); - const waitForHeaders = waitUntil(() => document.querySelector(".headers-overview")); - EventUtils.sendMouseEvent({ type: "mousedown" }, - document.querySelectorAll(".request-list-item")[0]); - await waitForHeaders; - await waitForRequestData(store, ["requestHeaders", "responseHeaders"]); - - // Click on the Cookies panel and wait till it's opened. - info("Click on the Cookies panel"); - EventUtils.sendMouseEvent({ type: "click" }, - document.querySelector("#cookies-tab")); - await waitForRequestData(store, ["requestCookies", "responseCookies"]); - - checkTelemetryEvent({ - oldpanel: "headers", - newpanel: "cookies", - }, { - method: "sidepanel_changed" - }); - - return teardown(monitor); -}); diff --git a/devtools/client/netmonitor/test/head.js b/devtools/client/netmonitor/test/head.js index a3ac3405a519..7e8218429812 100644 --- a/devtools/client/netmonitor/test/head.js +++ b/devtools/client/netmonitor/test/head.js @@ -799,42 +799,3 @@ function waitForRequestData(store, fields, id) { return true; }); } - -// Telemetry - -/** - * Helper for verifying telemetry event. - * - * @param Object expectedEvent object representing expected event data. - * @param Object query fields specifying category, method and object - * of the target telemetry event. - */ -function checkTelemetryEvent(expectedEvent, query) { - const events = queryTelemetryEvents(query); - is(events.length, 1, "There was only 1 event logged"); - - const [event] = events; - ok(event.session_id > 0, "There is a valid session_id in the logged event"); - - const f = e => JSON.stringify(e, null, 2); - is(f(event), f({ - ...expectedEvent, - "session_id": event.session_id - }), "The event has the expected data"); -} - -function queryTelemetryEvents(query) { - const OPTOUT = Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT; - const snapshot = Services.telemetry.snapshotEvents(OPTOUT, true); - const category = query.category || "devtools.main"; - const object = query.object || "netmonitor"; - - const filtersChangedEvents = snapshot.parent.filter(event => - event[1] === category && - event[2] === query.method && - event[3] === object - ); - - // Return the `extra` field (which is event[5]e). - return filtersChangedEvents.map(event => event[5]); -} diff --git a/toolkit/components/telemetry/Events.yaml b/toolkit/components/telemetry/Events.yaml index bbc2f37a8440..9d568a2db381 100644 --- a/toolkit/components/telemetry/Events.yaml +++ b/toolkit/components/telemetry/Events.yaml @@ -526,8 +526,8 @@ devtools.main: extra_keys: session_id: The start time of the session in milliseconds since epoch (Unix Timestamp) e.g. 1396381378123. sidepanel_changed: - objects: ["inspector", "netmonitor"] - bug_numbers: [1463083, 1463169] + objects: ["inspector"] + bug_numbers: [1463083] notification_emails: ["dev-developer-tools@lists.mozilla.org", "hkirschner@mozilla.com"] record_in_processes: ["main"] description: User has switched sidepanel tabs.