diff --git a/toolkit/content/aboutTelemetry.js b/toolkit/content/aboutTelemetry.js index db6e839c90e8..9a530ab93385 100644 --- a/toolkit/content/aboutTelemetry.js +++ b/toolkit/content/aboutTelemetry.js @@ -379,10 +379,19 @@ var PingPicker = { _updateCurrentPingData() { const subsession = document.getElementById("show-subsession-data").checked; - const ping = TelemetryController.getCurrentPingData(subsession); + let ping = TelemetryController.getCurrentPingData(subsession); if (!ping) { return; } + + // augment ping payload with event telemetry + let eventSnapshot = Telemetry.snapshotEvents(Telemetry.DATASET_RELEASE_CHANNEL_OPTIN, false); + for (let process of Object.keys(eventSnapshot)) { + if (process in ping.payload.processes) { + ping.payload.processes[process].events = eventSnapshot[process].filter(e => !e[1].startsWith("telemetry.test")); + } + } + displayPingData(ping, true); }, @@ -1708,6 +1717,47 @@ var KeyedScalars = { }, }; +var Events = { + /** + * Render the event data - if present - from the payload in a simple table. + * @param aPayload A payload object to render the data from. + */ + render(aPayload) { + let eventsSection = document.getElementById("events"); + removeAllChildNodes(eventsSection); + + let processesSelect = document.getElementById("processes"); + let selectedProcess = processesSelect.selectedOptions.item(0).getAttribute("value"); + + if (!aPayload.processes || + !selectedProcess || + !(selectedProcess in aPayload.processes)) { + return; + } + + let events = aPayload.processes[selectedProcess].events || {}; + let hasData = Array.from(processesSelect.options).some((option) => { + let value = option.getAttribute("value"); + let evts = aPayload.processes[value].events; + return evts && Object.keys(evts).length > 0; + }); + setHasData("events-section", hasData); + if (Object.keys(events).length > 0) { + const headings = [ + "timestampHeader", + "categoryHeader", + "methodHeader", + "objectHeader", + "valuesHeader", + "extraHeader", + ].map(h => bundle.GetStringFromName(h)); + + const table = GenericTable.render(events, headings); + eventsSection.appendChild(table); + } + }, +}; + /** * Helper function for showing either the toggle element or "No data collected" message for a section * @@ -2306,6 +2356,9 @@ function displayRichPingData(ping, updatePayloadList) { // Show keyed histogram data KeyedHistogramSection.render(payload); + // Show event data. + Events.render(payload); + // Show captured stacks. CapturedStacks.render(payload); diff --git a/toolkit/content/aboutTelemetry.xhtml b/toolkit/content/aboutTelemetry.xhtml index b78c49386880..c078f31dc95d 100644 --- a/toolkit/content/aboutTelemetry.xhtml +++ b/toolkit/content/aboutTelemetry.xhtml @@ -57,6 +57,9 @@
&aboutTelemetry.keyedHistogramsSection;
+
+ &aboutTelemetry.eventsSection; +
&aboutTelemetry.simpleMeasurementsSection;
diff --git a/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd b/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd index 59f392d26aeb..d94a93db4761 100644 --- a/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd +++ b/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd @@ -34,6 +34,7 @@ + diff --git a/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties b/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties index 14669e921c8e..90b1df2496fd 100644 --- a/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties +++ b/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties @@ -94,3 +94,8 @@ memoryMapTitle = Memory map: errorFetchingSymbols = An error occurred while fetching symbols. Check that you are connected to the Internet and try again. +timestampHeader = timestamp +categoryHeader = category +methodHeader = method +objectHeader = object +extraHeader = extra