Bug 1261181 - Remove telemetry probes set to expire in 48 from Sync and FxA. r=kitcambridge
authorMark Hammond <mhammond@skippinet.com.au>
Thu, 31 Mar 2016 20:35:00 -0400
changeset 291522 eaab4a3353618c192dbc9f3fa2ec3fc006034c30
parent 291496 d50240348923d829500a0284d832599804987e5c
child 291523 fc4a988ca8d61e809bb30ef635ad50e189f742b3
push id19656
push usergwagner@mozilla.com
push dateMon, 04 Apr 2016 13:43:23 +0000
treeherderb2g-inbound@e99061fde28a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskitcambridge
bugs1261181
milestone48.0a1
Bug 1261181 - Remove telemetry probes set to expire in 48 from Sync and FxA. r=kitcambridge
services/fxaccounts/FxAccountsClient.jsm
services/fxaccounts/FxAccountsStorage.jsm
services/fxaccounts/tests/xpcshell/test_client.js
services/sync/modules/browserid_identity.js
services/sync/modules/engines.js
services/sync/tests/unit/test_addons_store.js
services/sync/tests/unit/test_browserid_identity.js
services/sync/tests/unit/test_syncengine_sync.js
toolkit/components/telemetry/Histograms.json
--- a/services/fxaccounts/FxAccountsClient.jsm
+++ b/services/fxaccounts/FxAccountsClient.jsm
@@ -534,22 +534,16 @@ this.FxAccountsClient.prototype = {
           // Schedule clearing of cached-error-as-flag.
           CommonUtils.namedTimer(
             this._clearBackoff,
             error.retryAfter * 1000,
             this,
             "fxaBackoffTimer"
            );
         }
-        if (isInvalidTokenError(error)) {
-          // Use the endpoint path as the key, ignoring query params and
-          // fragments.
-          Services.telemetry.getKeyedHistogramById(
-            "FXA_HAWK_ERRORS").add(path.replace(/[?#].*/, ''));
-        }
         deferred.reject(error);
       }
     );
 
     return deferred.promise;
   },
 };
 
--- a/services/fxaccounts/FxAccountsStorage.jsm
+++ b/services/fxaccounts/FxAccountsStorage.jsm
@@ -528,17 +528,16 @@ LoginManagerStorage.prototype = {
     log.trace("starting write of user data to the login manager");
     try { // Services.logins might be third-party and broken...
       // and the stuff into the login manager.
       yield Services.logins.initializationPromise;
       // If MP is locked we silently fail - the user may need to re-auth
       // next startup.
       if (!this._isLoggedIn) {
         log.info("not saving credentials to login manager - not logged in");
-        Services.telemetry.getHistogramById("FXA_SECURE_CREDENTIALS_SAVE_WITH_MP_LOCKED").add(1);
         throw new this.STORAGE_LOCKED();
       }
       // write the data to the login manager.
       let loginInfo = new Components.Constructor(
          "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init");
       let login = new loginInfo(FXA_PWDMGR_HOST,
                                 null, // aFormSubmitURL,
                                 FXA_PWDMGR_REALM, // aHttpRealm,
--- a/services/fxaccounts/tests/xpcshell/test_client.js
+++ b/services/fxaccounts/tests/xpcshell/test_client.js
@@ -821,18 +821,16 @@ add_task(function* test_getDeviceList() 
   } catch(unexpectedError) {
     do_check_eq(unexpectedError.code, 500);
   }
 
   yield deferredStop(server);
 });
 
 add_task(function* test_client_metrics() {
-  Services.telemetry.getKeyedHistogramById("FXA_HAWK_ERRORS").clear();
-
   function writeResp(response, msg) {
     if (typeof msg === "object") {
       msg = JSON.stringify(msg);
     }
     response.bodyOutputStream.write(msg, msg.length);
   }
 
   let server = httpd_setup(
@@ -852,21 +850,16 @@ add_task(function* test_client_metrics()
   let client = new FxAccountsClient(server.baseURI);
 
   yield rejects(client.signOut(FAKE_SESSION_TOKEN, {
     service: "sync",
   }), function(err) {
     return err.errno == 111;
   });
 
-  let histogram = Services.telemetry.getKeyedHistogramById("FXA_HAWK_ERRORS");
-  let snapshot = histogram.snapshot("/session/destroy");
-  do_check_eq(snapshot.sum, 1, "Should report Hawk authentication errors");
-  histogram.clear();
-
   yield deferredStop(server);
 });
 
 add_task(function* test_email_case() {
   let canonicalEmail = "greta.garbo@gmail.com";
   let clientEmail = "Greta.Garbo@gmail.COM";
   let attempts = 0;
 
--- a/services/sync/modules/browserid_identity.js
+++ b/services/sync/modules/browserid_identity.js
@@ -491,17 +491,16 @@ this.BrowserIDManager.prototype = {
         // If we still can't get keys it probably means the user authenticated
         // without unlocking the MP or cleared the saved logins, so we've now
         // lost them - the user will need to reauth before continuing.
         let result;
         if (this._canFetchKeys()) {
           result = STATUS_OK;
         } else {
           result = LOGIN_FAILED_LOGIN_REJECTED;
-          Services.telemetry.getHistogramById("WEAVE_HAS_NO_KEYS_WHEN_UNLOCKED").add(1);
         }
         log.debug("unlockAndVerifyAuthState re-fetched credentials and is returning", result);
         return result;
       }
     );
   },
 
   /**
@@ -631,17 +630,16 @@ this.BrowserIDManager.prototype = {
 
         // TODO: write tests to make sure that different auth error cases are handled here
         // properly: auth error getting assertion, auth error getting token (invalid generation
         // and client-state error)
         if (err instanceof AuthenticationError) {
           this._log.error("Authentication error in _fetchTokenForUser", err);
           // set it to the "fatal" LOGIN_FAILED_LOGIN_REJECTED reason.
           this._authFailureReason = LOGIN_FAILED_LOGIN_REJECTED;
-          Services.telemetry.getHistogramById("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS").add(1);
         } else {
           this._log.error("Non-authentication error in _fetchTokenForUser", err);
           // for now assume it is just a transient network related problem
           // (although sadly, it might also be a regular unhandled exception)
           this._authFailureReason = LOGIN_FAILED_NETWORK_ERROR;
         }
         // this._authFailureReason being set to be non-null in the above if clause
         // ensures we are in the correct currentAuthState, and
--- a/services/sync/modules/engines.js
+++ b/services/sync/modules/engines.js
@@ -1224,23 +1224,21 @@ SyncEngine.prototype = {
                     count.succeeded, "successfully,",
                     count.failed, "failed to apply,",
                     count.newFailed, "newly failed to apply,",
                     count.reconciled, "reconciled."].join(" "));
     Observers.notify("weave:engine:sync:applied", count, this.name);
   },
 
   _noteApplyFailure: function () {
-    Services.telemetry.getKeyedHistogramById(
-      "WEAVE_ENGINE_APPLY_FAILURES").add(this.name);
+    // here would be a good place to record telemetry...
   },
 
   _noteApplyNewFailure: function () {
-    Services.telemetry.getKeyedHistogramById(
-      "WEAVE_ENGINE_APPLY_NEW_FAILURES").add(this.name);
+    // here would be a good place to record telemetry...
   },
 
   /**
    * Find a GUID of an item that is a duplicate of the incoming item but happens
    * to have a different GUID
    *
    * @return GUID of the similar item; falsy otherwise
    */
--- a/services/sync/tests/unit/test_addons_store.js
+++ b/services/sync/tests/unit/test_addons_store.js
@@ -391,17 +391,16 @@ add_test(function test_create_missing_se
   // The handler for this ID is not installed, so a search should 404.
   const id = "missing@tests.mozilla.org";
   let guid = Utils.makeGUID();
   let record = createRecordForThisApp(guid, id, true, false);
 
   let failed = store.applyIncomingBatch([record]);
   do_check_eq(1, failed.length);
   do_check_eq(guid, failed[0]);
-  do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_FAILURES", { key: "addons" }), 1);
 
   let addon = getAddonFromAddonManagerByID(id);
   do_check_eq(null, addon);
 
   server.stop(run_next_test);
 });
 
 add_test(function test_create_bad_install() {
@@ -413,17 +412,16 @@ add_test(function test_create_bad_instal
   const id = "missing-xpi@tests.mozilla.org";
   let guid = Utils.makeGUID();
   let record = createRecordForThisApp(guid, id, true, false);
 
   let failed = store.applyIncomingBatch([record]);
   // This addon had no source URI so was skipped - but it's not treated as
   // failure.
   do_check_eq(0, failed.length);
-  do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_FAILURES", { key: "addons" }), 0);
 
   let addon = getAddonFromAddonManagerByID(id);
   do_check_eq(null, addon);
 
   server.stop(run_next_test);
 });
 
 add_test(function test_wipe() {
--- a/services/sync/tests/unit/test_browserid_identity.js
+++ b/services/sync/tests/unit/test_browserid_identity.js
@@ -405,37 +405,31 @@ add_task(function* test_getTokenErrors()
   });
   let browseridManager = Service.identity;
 
   yield browseridManager.initializeWithCurrentIdentity();
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to 401");
   Assert.equal(Status.login, LOGIN_FAILED_LOGIN_REJECTED, "login was rejected");
 
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 1, "Should record key fetch error for rejected logins");
-
   // XXX - other interesting responses to return?
 
   // And for good measure, some totally "unexpected" errors - we generally
   // assume these problems are going to magically go away at some point.
   _("Arrange for an empty body with a 200 response - should reflect a network error.");
   initializeIdentityWithTokenServerResponse({
     status: 200,
     headers: [],
     body: "",
   });
   browseridManager = Service.identity;
   yield browseridManager.initializeWithCurrentIdentity();
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to non-JSON response");
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "login state is LOGIN_FAILED_NETWORK_ERROR");
-
-  keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for invalid responses");
 });
 
 add_task(function* test_getTokenErrorWithRetry() {
   _("tokenserver sends an observer notification on various backoff headers.");
 
   // Set Sync's backoffInterval to zero - after we simulated the backoff header
   // it should reflect the value we sent.
   Status.backoffInterval = 0;
@@ -452,38 +446,32 @@ add_task(function* test_getTokenErrorWit
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to 503");
 
   // The observer should have fired - check it got the value in the response.
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "login was rejected");
   // Sync will have the value in ms with some slop - so check it is at least that.
   Assert.ok(Status.backoffInterval >= 100000);
 
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for 503 from FxA");
-
   _("Arrange for a 200 with an X-Backoff header.");
   Status.backoffInterval = 0;
   initializeIdentityWithTokenServerResponse({
     status: 503,
     headers: {"content-type": "application/json",
               "x-backoff": "200"},
     body: JSON.stringify({}),
   });
   browseridManager = Service.identity;
 
   yield browseridManager.initializeWithCurrentIdentity();
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to no token in response");
 
   // The observer should have fired - check it got the value in the response.
   Assert.ok(Status.backoffInterval >= 200000);
-
-  keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for 503/backoff response from FxA");
 });
 
 add_task(function* test_getKeysErrorWithBackoff() {
   _("Auth server (via hawk) sends an observer notification on backoff headers.");
 
   // Set Sync's backoffInterval to zero - after we simulated the backoff header
   // it should reflect the value we sent.
   Status.backoffInterval = 0;
@@ -508,19 +496,16 @@ add_task(function* test_getKeysErrorWith
   let browseridManager = Service.identity;
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to 503");
 
   // The observer should have fired - check it got the value in the response.
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "login was rejected");
   // Sync will have the value in ms with some slop - so check it is at least that.
   Assert.ok(Status.backoffInterval >= 100000);
-
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for 503 from FxA");
 });
 
 add_task(function* test_getKeysErrorWithRetry() {
   _("Auth server (via hawk) sends an observer notification on retry headers.");
 
   // Set Sync's backoffInterval to zero - after we simulated the backoff header
   // it should reflect the value we sent.
   Status.backoffInterval = 0;
@@ -545,19 +530,16 @@ add_task(function* test_getKeysErrorWith
   let browseridManager = Service.identity;
   yield Assert.rejects(browseridManager.whenReadyToAuthenticate.promise,
                        "should reject due to 503");
 
   // The observer should have fired - check it got the value in the response.
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "login was rejected");
   // Sync will have the value in ms with some slop - so check it is at least that.
   Assert.ok(Status.backoffInterval >= 100000);
-
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for 503 from FxA");
 });
 
 add_task(function* test_getHAWKErrors() {
   _("BrowserIDManager correctly handles various HAWK failures.");
 
   _("Arrange for a 401 - Sync should reflect an auth error.");
   let config = makeIdentityConfig();
   yield initializeIdentityWithHAWKResponseFactory(config, function(method, data, uri) {
@@ -566,37 +548,31 @@ add_task(function* test_getHAWKErrors() 
     return {
       status: 401,
       headers: {"content-type": "application/json"},
       body: JSON.stringify({}),
     }
   });
   Assert.equal(Status.login, LOGIN_FAILED_LOGIN_REJECTED, "login was rejected");
 
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 1, "Should record key fetch errors for 401 from FxA");
-
   // XXX - other interesting responses to return?
 
   // And for good measure, some totally "unexpected" errors - we generally
   // assume these problems are going to magically go away at some point.
   _("Arrange for an empty body with a 200 response - should reflect a network error.");
   yield initializeIdentityWithHAWKResponseFactory(config, function(method, data, uri) {
     Assert.equal(method, "post");
     Assert.equal(uri, "http://mockedserver:9999/certificate/sign")
     return {
       status: 200,
       headers: [],
       body: "",
     }
   });
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "login state is LOGIN_FAILED_NETWORK_ERROR");
-
-  keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for invalid response from FxA");
 });
 
 add_task(function* test_getGetKeysFailing401() {
   _("BrowserIDManager correctly handles 401 responses fetching keys.");
 
   _("Arrange for a 401 - Sync should reflect an auth error.");
   let config = makeIdentityConfig();
   // We want no kA or kB so we attempt to fetch them.
@@ -608,19 +584,16 @@ add_task(function* test_getGetKeysFailin
     Assert.equal(uri, "http://mockedserver:9999/account/keys")
     return {
       status: 401,
       headers: {"content-type": "application/json"},
       body: "{}",
     }
   });
   Assert.equal(Status.login, LOGIN_FAILED_LOGIN_REJECTED, "login was rejected");
-
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 1, "Should record key fetch errors for 401 from FxA");
 });
 
 add_task(function* test_getGetKeysFailing503() {
   _("BrowserIDManager correctly handles 5XX responses fetching keys.");
 
   _("Arrange for a 503 - Sync should reflect a network error.");
   let config = makeIdentityConfig();
   // We want no kA or kB so we attempt to fetch them.
@@ -632,19 +605,16 @@ add_task(function* test_getGetKeysFailin
     Assert.equal(uri, "http://mockedserver:9999/account/keys")
     return {
       status: 503,
       headers: {"content-type": "application/json"},
       body: "{}",
     }
   });
   Assert.equal(Status.login, LOGIN_FAILED_NETWORK_ERROR, "state reflects network error");
-
-  let keyFetchErrorCount = sumHistogram("WEAVE_FXA_KEY_FETCH_AUTH_ERRORS");
-  Assert.equal(keyFetchErrorCount, 0, "Should not record key fetch errors for 503 from FxA");
 });
 
 add_task(function* test_getKeysMissing() {
   _("BrowserIDManager correctly handles getKeys succeeding but not returning keys.");
 
   let browseridManager = new BrowserIDManager();
   let identityConfig = makeIdentityConfig();
   // our mock identity config already has kA and kB - remove them or we never
@@ -724,18 +694,16 @@ add_task(function* test_signedInUserMiss
       return new AccountState(storageManager);
     },
   });
 
   browseridManager._fxaService = fxa;
 
   let status = yield browseridManager.unlockAndVerifyAuthState();
   Assert.equal(status, LOGIN_FAILED_LOGIN_REJECTED);
-
-  Assert.equal(sumHistogram("WEAVE_HAS_NO_KEYS_WHEN_UNLOCKED"), 1);
 });
 
 // End of tests
 // Utility functions follow
 
 // Create a new browserid_identity object and initialize it with a
 // hawk mock that simulates HTTP responses.
 // The callback function will be called each time the mocked hawk server wants
--- a/services/sync/tests/unit/test_syncengine_sync.js
+++ b/services/sync/tests/unit/test_syncengine_sync.js
@@ -847,17 +847,16 @@ add_test(function test_processIncoming_a
     engine._processIncoming();
 
     // Records have been applied and the expected failures have failed.
     do_check_attribute_count(engine._store.items, APPLY_BATCH_SIZE - 1 - 2);
     do_check_eq(engine.toFetch.length, 0);
     do_check_eq(engine.previousFailed.length, 2);
     do_check_eq(engine.previousFailed[0], "record-no-0");
     do_check_eq(engine.previousFailed[1], "record-no-8");
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), 2);
 
   } finally {
     cleanAndGo(server);
   }
 });
 
 
 add_test(function test_processIncoming_applyIncomingBatchSize_multiple() {
@@ -901,17 +900,16 @@ add_test(function test_processIncoming_a
     do_check_empty(engine._store.items);
 
     engine._syncStartup();
     engine._processIncoming();
 
     // Records have been applied in 3 batches.
     do_check_eq(batchCalls, 3);
     do_check_attribute_count(engine._store.items, APPLY_BATCH_SIZE * 3);
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), 3);
 
   } finally {
     cleanAndGo(server);
   }
 });
 
 
 add_test(function test_processIncoming_notify_count() {
@@ -977,35 +975,30 @@ add_test(function test_processIncoming_n
 
     // There are newly failed records and they are reported.
     do_check_eq(called, 1);
     do_check_eq(counts.failed, 3);
     do_check_eq(counts.applied, 15);
     do_check_eq(counts.newFailed, 3);
     do_check_eq(counts.succeeded, 12);
 
-    // Make sure we recorded telemetry for the failed records.
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), 3);
-
     // Sync again, 1 of the failed items are the same, the rest didn't fail.
     engine._processIncoming();
 
     // Confirming removed failures.
     do_check_attribute_count(engine._store.items, 14);
     do_check_eq(engine.previousFailed.length, 1);
     do_check_eq(engine.previousFailed[0], "record-no-0");
 
     do_check_eq(called, 2);
     do_check_eq(counts.failed, 1);
     do_check_eq(counts.applied, 3);
     do_check_eq(counts.newFailed, 0);
     do_check_eq(counts.succeeded, 2);
 
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), 0);
-
     Svc.Obs.remove("weave:engine:sync:applied", onApplied);
   } finally {
     cleanAndGo(server);
   }
 });
 
 
 add_test(function test_processIncoming_previousFailed() {
@@ -1077,17 +1070,16 @@ add_test(function test_processIncoming_p
     // A second sync with the same failed items should not add the same items again.
     // Items that did not fail a second time should no longer be in previousFailed.
     do_check_attribute_count(engine._store.items, 10);
     do_check_eq(engine.previousFailed.length, 4);
     do_check_eq(engine.previousFailed[0], "record-no-0");
     do_check_eq(engine.previousFailed[1], "record-no-1");
     do_check_eq(engine.previousFailed[2], "record-no-8");
     do_check_eq(engine.previousFailed[3], "record-no-9");
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), 8);
 
     // Refetched items that didn't fail the second time are in engine._store.items.
     do_check_eq(engine._store.items['record-no-4'], "Record No. 4");
     do_check_eq(engine._store.items['record-no-5'], "Record No. 5");
     do_check_eq(engine._store.items['record-no-12'], "Record No. 12");
     do_check_eq(engine._store.items['record-no-13'], "Record No. 13");
   } finally {
     cleanAndGo(server);
@@ -1191,17 +1183,16 @@ add_test(function test_processIncoming_f
     for (let i = 0; i < engine.previousFailed.length; i++) {
       do_check_eq(engine.previousFailed[i], BOGUS_RECORDS[i]);
     }
 
     // Ensure the observer was notified
     do_check_eq(observerData, engine.name);
     do_check_eq(observerSubject.failed, BOGUS_RECORDS.length);
     do_check_eq(observerSubject.newFailed, BOGUS_RECORDS.length);
-    do_check_eq(sumHistogram("WEAVE_ENGINE_APPLY_NEW_FAILURES", { key: "rotary" }), BOGUS_RECORDS.length);
 
     // Testing batching of failed item fetches.
     // Try to sync again. Ensure that we split the request into chunks to avoid
     // URI length limitations.
     function batchDownload(batchSize) {
       count = 0;
       uris  = [];
       engine.guidFetchBatchSize = batchSize;
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -10014,33 +10014,16 @@
   "FXA_CONFIGURED": {
     "alert_emails": ["fx-team@mozilla.com"],
     "bug_numbers": [1236383],
     "expires_in_version": "never",
     "kind": "flag",
     "releaseChannelCollection": "opt-out",
     "description": "If the user is signed in to a Firefox Account on this device. Recorded once per session just after startup as Sync is initialized."
   },
-  "FXA_SECURE_CREDENTIALS_SAVE_WITH_MP_LOCKED": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "releaseChannelCollection": "opt-out",
-    "description": "The number of times FxA had credentials to save in the login manager but the master-password was locked, implying they may lose those credentials after a restart."
-  },
-  "FXA_HAWK_ERRORS": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "keyed": true,
-    "releaseChannelCollection": "opt-out",
-    "description": "FxA error responses caused by invalid Hawk credentials. Keyed on the FxA auth server endpoint."
-  },
   "WEAVE_DEVICE_COUNT_DESKTOP": {
     "alert_emails": ["fx-team@mozilla.com"],
     "bug_numbers": [1232050],
     "expires_in_version": "never",
     "kind": "enumerated",
     "n_values": 10,
     "releaseChannelCollection": "opt-out",
     "description": "Number of desktop devices (including this device) associated with this Sync account. Recorded each time Sync successfully completes the 'clients' engine."
@@ -10049,59 +10032,25 @@
     "alert_emails": ["fx-team@mozilla.com"],
     "bug_numbers": [1232050],
     "expires_in_version": "never",
     "kind": "enumerated",
     "n_values": 10,
     "releaseChannelCollection": "opt-out",
     "description": "Number of mobile devices associated with this Sync account. Recorded each time Sync successfully completes the 'clients' engine."
   },
-  "WEAVE_ENGINE_APPLY_NEW_FAILURES": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "keyed": true,
-    "releaseChannelCollection": "opt-out",
-    "description": "Number of records that a Sync engine failed to apply. Keyed on the engine name."
-  },
-  "WEAVE_ENGINE_APPLY_FAILURES": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "keyed": true,
-    "releaseChannelCollection": "opt-out",
-    "description": "Failures encountered applying incoming records. Keyed on the engine name."
-  },
   "WEAVE_ENGINE_SYNC_ERRORS": {
     "alert_emails": ["fx-team@mozilla.com"],
     "bug_numbers": [1236383],
     "expires_in_version": "never",
     "kind": "count",
     "keyed": true,
     "releaseChannelCollection": "opt-out",
     "description": "Exceptions thrown by a Sync engine. Keyed on the engine name."
   },
-  "WEAVE_HAS_NO_KEYS_WHEN_UNLOCKED": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "releaseChannelCollection": "opt-out",
-    "description": "Records how often Sync doesn't have the necessary keys when the master-password is unlocked."
-  },
-  "WEAVE_FXA_KEY_FETCH_AUTH_ERRORS": {
-    "alert_emails": ["fx-team@mozilla.com"],
-    "bug_numbers": [1236383],
-    "expires_in_version": "49",
-    "kind": "count",
-    "releaseChannelCollection": "opt-out",
-    "description": "Authentication errors encountered fetching Sync keys."
-  },
   "CONTENT_DOCUMENTS_DESTROYED": {
     "expires_in_version": "never",
     "kind": "count",
     "description": "Number of content documents destroyed; used in conjunction with use counter histograms"
   },
   "TOP_LEVEL_CONTENT_DOCUMENTS_DESTROYED": {
     "expires_in_version": "never",
     "kind": "count",