gecko-dev/toolkit/components/normandy/lib/LegacyHeartbeat.sys.mjs
Barret Rennie b0e77811a6 Bug 1884039 - Include a surveyVersion for Nimbus legacyHeartbeat r=emcminn
The surveyVersion field is included in telemetry and is required by the
ingestion schema. Because that field has been omitted for Nimbus
legacyHeartbeat experiments, no heartbeat pings have been submitted. We now
hardcode the surveyVersion for all Heartbeats coming from Nimbus.

A test has been added to ensure that Nimbus-triggered Heartbeats submit a
payload that matches the Telemetry schema.

Differential Revision: https://phabricator.services.mozilla.com/D205239
2024-03-20 18:35:35 +00:00

49 lines
1.4 KiB
JavaScript

/* 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/. */
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
ExperimentAPI: "resource://nimbus/ExperimentAPI.sys.mjs",
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
});
const FEATURE_ID = "legacyHeartbeat";
/**
* A bridge between Nimbus and Normandy's Heartbeat implementation.
*/
export const LegacyHeartbeat = {
getHeartbeatRecipe() {
const survey = lazy.NimbusFeatures.legacyHeartbeat.getVariable("survey");
if (typeof survey == "undefined") {
return null;
}
let isRollout = false;
let enrollmentData = lazy.ExperimentAPI.getExperimentMetaData({
featureId: FEATURE_ID,
});
if (!enrollmentData) {
enrollmentData = lazy.ExperimentAPI.getRolloutMetaData({
featureId: FEATURE_ID,
});
isRollout = true;
}
return {
id: `nimbus:${enrollmentData.slug}`,
name: `Nimbus legacyHeartbeat ${isRollout ? "rollout" : "experiment"} ${
enrollmentData.slug
}`,
action: "show-heartbeat",
arguments: survey,
capabilities: ["action.show-heartbeat"],
filter_expression: "true",
use_only_baseline_capabilities: true,
revision_id: "1", // Required for the Heartbeat telemetry ping.
};
},
};