diff --git a/src/app/hooks/useGlean.ts b/src/app/hooks/useGlean.ts index 309fdbd7e35..1897997ffe9 100644 --- a/src/app/hooks/useGlean.ts +++ b/src/app/hooks/useGlean.ts @@ -13,7 +13,7 @@ import { useExperiments } from "../../contextProviders/experiments"; export const useGlean = () => { const session = useSession(); - const experimentData = useExperiments(); + const experiments = useExperiments(); // Telemetry recording is mocked in our unit tests, therefore we // do not have test coverage for this method. /* c8 ignore start */ @@ -44,31 +44,19 @@ export const useGlean = () => { // Record the `nimbus_*` keys on all events. // `nimbus_*` is set on every metric, but it's too much work for TypeScript // to infer that — hence the type assertion. - - if ( - experimentData && - typeof experimentData["Enrollments"] !== "undefined" - ) { - (data as GleanMetricMap["button"]["click"]).nimbus_user_id = - experimentData["Enrollments"]["nimbus_user_id"]; - (data as GleanMetricMap["button"]["click"]).nimbus_app_id = - experimentData["Enrollments"]["app_id"]; - (data as GleanMetricMap["button"]["click"]).nimbus_experiment = - experimentData["Enrollments"]["experiment"]; - (data as GleanMetricMap["button"]["click"]).nimbus_branch = - experimentData["Enrollments"]["branch"]; - (data as GleanMetricMap["button"]["click"]).nimbus_experiment_type = - experimentData["Enrollments"]["experiment_type"]; - (data as GleanMetricMap["button"]["click"]).nimbus_is_preview = - experimentData["Enrollments"]["is_preview"].toString(); + if (experiments === null) { + console.warn( + "`useGlean` is used in a component that is not a (grand)child of ", + ); } else { - console.warn("No experiment data available for Glean"); + (data as GleanMetricMap["button"]["click"]).nimbus_user_id = + experiments.experimentationId; } // eslint-disable-next-line @typescript-eslint/no-explicit-any mod[event].record(data as any); }, - [isPremiumUser, experimentData], + [isPremiumUser, experiments], ); /* c8 ignore end */ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 5f1302fc72d..053f11cbef7 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -78,13 +78,12 @@ export default async function RootLayout({ previewMode: nimbusPreviewMode === "true", }); - const nimbus_user_id = experimentData["Enrollments"]?.nimbus_user_id; - if ( - typeof nimbus_user_id !== "undefined" && - nimbus_user_id !== experimentationId - ) { + const enrollmentWithConflictingUserId = ( + experimentData.Enrollments ?? [] + ).find((enrollment) => enrollment.nimbus_user_id !== experimentationId); + if (typeof enrollmentWithConflictingUserId !== "undefined") { Sentry.captureMessage( - `Nimbus user ID from Cirrus: [${nimbus_user_id}] did not match experimentationId: [${experimentationId}]`, + `Nimbus user ID from Cirrus: [${enrollmentWithConflictingUserId.nimbus_user_id}] did not match experimentationId: [${experimentationId}]`, ); } @@ -97,7 +96,10 @@ export default async function RootLayout({ data-ga4-measurement-id={CONST_GA4_MEASUREMENT_ID} data-node-env={process.env.NODE_ENV} > - + {children} diff --git a/src/contextProviders/experiments.test.tsx b/src/contextProviders/experiments.test.tsx index d26fe044f3a..bd029d114b2 100644 --- a/src/contextProviders/experiments.test.tsx +++ b/src/contextProviders/experiments.test.tsx @@ -14,7 +14,10 @@ describe("Experiment context provider", () => { return
; }; const { container } = render( - + , ); diff --git a/src/contextProviders/experiments.tsx b/src/contextProviders/experiments.tsx index 875dd555c17..ae11b8008bc 100644 --- a/src/contextProviders/experiments.tsx +++ b/src/contextProviders/experiments.tsx @@ -10,18 +10,23 @@ import { ExperimentData_V2_Or_V2LikeV1 } from "../app/functions/server/getExperi interface ExperimentsProviderProps { children: ReactNode; experimentData: ExperimentData_V2_Or_V2LikeV1; + experimentationId: string; } -export const ExperimentsContext = - createContext(null); +export const ExperimentsContext = createContext<{ + experimentData: ExperimentData_V2_Or_V2LikeV1; + experimentationId: string; +} | null>(null); -export const ExperimentsProvider = ({ - children, - experimentData, -}: ExperimentsProviderProps) => { +export const ExperimentsProvider = (props: ExperimentsProviderProps) => { return ( - - {children} + + {props.children} ); }; diff --git a/src/scripts/build/nimbusTypes.js b/src/scripts/build/nimbusTypes.js index b5bdbde5d94..2e6b9ab9abc 100644 --- a/src/scripts/build/nimbusTypes.js +++ b/src/scripts/build/nimbusTypes.js @@ -96,17 +96,19 @@ function getFallbackObject(nimbusConfig) { ); const defaultExperimentData = ` - "Features": { + Features: { ${featureFallbackDefs.join("\n")} }, - "Enrollments": { - "nimbus_user_id": "-1", - "app_id": "-1", - "experiment": "-1", - "branch": "-1", - "experiment_type": "-1", - "is_preview": false - }`; + Enrollments: [ + { + nimbus_user_id: "-1", + app_id: "-1", + experiment: "-1", + branch: "-1", + experiment_type: "-1", + is_preview: false + } + ]`; return `export const defaultExperimentData: ExperimentData = {\n${defaultExperimentData}};\n`; } @@ -129,17 +131,19 @@ function getLocalOverrides(nimbusConfig) { ); const localExperimentData = ` - "Features": { + Features: { ${featureLocalOverridesDefs.join("\n")} }, - "Enrollments": { - "nimbus_user_id": "-1", - "app_id": "-1", - "experiment": "-1", - "branch": "-1", - "experiment_type": "-1", - "is_preview": false - }`; + Enrollments: [ + { + nimbus_user_id: "-1", + app_id: "-1", + experiment: "-1", + branch: "-1", + experiment_type: "-1", + is_preview: false + } + ]`; return `export const localExperimentData: ExperimentData = {\n${localExperimentData}};\n`; } @@ -160,15 +164,15 @@ function getFeaturesTypeDef(nimbusConfig) { }); const experimentDataType = `{ - "Features": {${featureDefs.join("")}}; - "Enrollments": { - "nimbus_user_id": string, - "app_id": string, - "experiment": string, - "branch": string, - "experiment_type": string, - "is_preview": boolean - }; + Features: {${featureDefs.join("")}}; + Enrollments: Array<{ + nimbus_user_id: string, + app_id: string, + experiment: string, + branch: string, + experiment_type: string, + is_preview: boolean + }>; };`; const experimentDataTypeDef = `/** Status of experiments, as setup in Experimenter */\nexport type ExperimentData = ${experimentDataType}`; diff --git a/src/telemetry/metrics.yaml b/src/telemetry/metrics.yaml index e7755eb247d..d6d709d3cc1 100644 --- a/src/telemetry/metrics.yaml +++ b/src/telemetry/metrics.yaml @@ -59,21 +59,6 @@ page: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string dashboard: view: @@ -123,21 +108,6 @@ dashboard: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string popup: view: @@ -174,21 +144,6 @@ popup: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string exit: type: event @@ -224,21 +179,6 @@ popup: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string banner: view: @@ -275,21 +215,6 @@ banner: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string button: click: @@ -326,21 +251,6 @@ button: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string field: focus: @@ -377,21 +287,6 @@ field: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string link: click: @@ -428,21 +323,6 @@ link: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string upgrade_intent: click: @@ -479,21 +359,6 @@ upgrade_intent: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string success: type: event @@ -527,21 +392,6 @@ upgrade_intent: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string expand: click: @@ -578,21 +428,6 @@ expand: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string collapse: click: @@ -629,21 +464,6 @@ collapse: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string cta_button: click: @@ -680,21 +500,6 @@ cta_button: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string view: type: event @@ -730,21 +535,6 @@ cta_button: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string csat_survey: view: @@ -781,21 +571,6 @@ csat_survey: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string dismiss: type: event @@ -831,21 +606,6 @@ csat_survey: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string click: type: event @@ -884,18 +644,3 @@ csat_survey: nimbus_user_id: description: Nimbus user ID type: string - nimbus_app_id: - description: Nimbus application ID - type: string - nimbus_experiment: - description: Nimbus experiment name - type: string - nimbus_branch: - description: Nimbus branch - type: string - nimbus_experiment_type: - description: Nimbus experiment type - type: string - nimbus_is_preview: - description: Nimbus preview mode enabled - type: string