зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
f08b92470c
Коммит
48a72108c4
|
@ -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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче