Backed out changeset 6181783d973c (bug 1463169) for eslint failure at builds/worker/checkouts/gecko/devtools/client/netmonitor/src/middleware/event-telemetry.js on a CLOSED TREE

This commit is contained in:
Tiberius Oros 2018-08-14 16:07:04 +03:00
Родитель f08b92470c
Коммит 48a72108c4
6 изменённых файлов: 33 добавлений и 138 удалений

Просмотреть файл

@ -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
});
}

Просмотреть файл

@ -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

Просмотреть файл

@ -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]);
}

Просмотреть файл

@ -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);
});

Просмотреть файл

@ -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]);
}

Просмотреть файл

@ -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.