forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.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/. */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const { UptakeTelemetry } = ChromeUtils.import(
 | |
|   "resource://services-common/uptake-telemetry.js"
 | |
| );
 | |
| 
 | |
| var EXPORTED_SYMBOLS = ["Uptake"];
 | |
| 
 | |
| const COMPONENT = "normandy";
 | |
| 
 | |
| var Uptake = {
 | |
|   // Action uptake
 | |
|   ACTION_NETWORK_ERROR: UptakeTelemetry.STATUS.NETWORK_ERROR,
 | |
|   ACTION_PRE_EXECUTION_ERROR: UptakeTelemetry.STATUS.CUSTOM_1_ERROR,
 | |
|   ACTION_POST_EXECUTION_ERROR: UptakeTelemetry.STATUS.CUSTOM_2_ERROR,
 | |
|   ACTION_SERVER_ERROR: UptakeTelemetry.STATUS.SERVER_ERROR,
 | |
|   ACTION_SUCCESS: UptakeTelemetry.STATUS.SUCCESS,
 | |
| 
 | |
|   // Per-recipe uptake
 | |
|   RECIPE_ACTION_DISABLED: UptakeTelemetry.STATUS.CUSTOM_1_ERROR,
 | |
|   RECIPE_DIDNT_MATCH_FILTER: UptakeTelemetry.STATUS.BACKOFF,
 | |
|   RECIPE_INCOMPATIBLE_CAPABILITIES: UptakeTelemetry.STATUS.BACKOFF,
 | |
|   RECIPE_EXECUTION_ERROR: UptakeTelemetry.STATUS.APPLY_ERROR,
 | |
|   RECIPE_FILTER_BROKEN: UptakeTelemetry.STATUS.CONTENT_ERROR,
 | |
|   RECIPE_ARGUMENTS_INVALID: UptakeTelemetry.STATUS.CONTENT_ERROR,
 | |
|   RECIPE_INVALID_ACTION: UptakeTelemetry.STATUS.DOWNLOAD_ERROR,
 | |
|   RECIPE_SUCCESS: UptakeTelemetry.STATUS.SUCCESS,
 | |
|   RECIPE_INVALID_SIGNATURE: UptakeTelemetry.STATUS.SIGNATURE_ERROR,
 | |
| 
 | |
|   // Uptake for the runner as a whole
 | |
|   RUNNER_NETWORK_ERROR: UptakeTelemetry.STATUS.NETWORK_ERROR,
 | |
|   RUNNER_SERVER_ERROR: UptakeTelemetry.STATUS.SERVER_ERROR,
 | |
|   RUNNER_SUCCESS: UptakeTelemetry.STATUS.SUCCESS,
 | |
| 
 | |
|   async _report(status, source) {
 | |
|     // Telemetry doesn't help us much with error detection, so do some here.
 | |
|     if (!status) {
 | |
|       throw new Error(
 | |
|         `Uptake status is required (got "${JSON.stringify(status)}"`
 | |
|       );
 | |
|     }
 | |
|     if (!source) {
 | |
|       throw new Error(
 | |
|         `Uptake source is required (got "${JSON.stringify(status)}`
 | |
|       );
 | |
|     }
 | |
|     await UptakeTelemetry.report(COMPONENT, status, {
 | |
|       source: `${COMPONENT}/${source}`,
 | |
|     });
 | |
|   },
 | |
| 
 | |
|   async reportRunner(status) {
 | |
|     await Uptake._report(status, "runner");
 | |
|   },
 | |
| 
 | |
|   async reportRecipe(recipe, status) {
 | |
|     await Uptake._report(status, `recipe/${recipe.id}`);
 | |
|     const revisionId = parseInt(recipe.revision_id, 10);
 | |
|     Services.telemetry.keyedScalarSet(
 | |
|       "normandy.recipe_freshness",
 | |
|       recipe.id,
 | |
|       revisionId
 | |
|     );
 | |
|   },
 | |
| 
 | |
|   async reportAction(actionName, status) {
 | |
|     await Uptake._report(status, `action/${actionName}`);
 | |
|   },
 | |
| };
 | 
