mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 10:45:42 +00:00
Bug 1308337 - Part 6: Instrument FetchInfoConfiguration stage r=nalexander
MozReview-Commit-ID: HvDWBVBxb5I --HG-- extra : rebase_source : 5e884830eaf1004e98ec1f6bca923fc4c84d1068
This commit is contained in:
parent
31f9e82f6f
commit
77bca8c547
@ -4,12 +4,16 @@
|
|||||||
|
|
||||||
package org.mozilla.gecko.sync.stage;
|
package org.mozilla.gecko.sync.stage;
|
||||||
|
|
||||||
|
import android.os.SystemClock;
|
||||||
|
|
||||||
import org.mozilla.gecko.sync.ExtendedJSONObject;
|
import org.mozilla.gecko.sync.ExtendedJSONObject;
|
||||||
|
import org.mozilla.gecko.sync.HTTPFailureException;
|
||||||
import org.mozilla.gecko.sync.InfoConfiguration;
|
import org.mozilla.gecko.sync.InfoConfiguration;
|
||||||
import org.mozilla.gecko.sync.JSONRecordFetcher;
|
import org.mozilla.gecko.sync.JSONRecordFetcher;
|
||||||
import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate;
|
import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate;
|
||||||
import org.mozilla.gecko.sync.net.AuthHeaderProvider;
|
import org.mozilla.gecko.sync.net.AuthHeaderProvider;
|
||||||
import org.mozilla.gecko.sync.net.SyncStorageResponse;
|
import org.mozilla.gecko.sync.net.SyncStorageResponse;
|
||||||
|
import org.mozilla.gecko.sync.telemetry.TelemetryCollector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches configuration data from info/configurations endpoint.
|
* Fetches configuration data from info/configurations endpoint.
|
||||||
@ -18,6 +22,9 @@ public class FetchInfoConfigurationStage extends AbstractNonRepositorySyncStage
|
|||||||
private final String configurationURL;
|
private final String configurationURL;
|
||||||
private final AuthHeaderProvider authHeaderProvider;
|
private final AuthHeaderProvider authHeaderProvider;
|
||||||
|
|
||||||
|
private static final String TELEMETRY_ERROR_NAME = "infoconfig";
|
||||||
|
private static final String TELEMETRY_ERROR_MISSING = "missing";
|
||||||
|
|
||||||
public FetchInfoConfigurationStage(final String configurationURL, final AuthHeaderProvider authHeaderProvider) {
|
public FetchInfoConfigurationStage(final String configurationURL, final AuthHeaderProvider authHeaderProvider) {
|
||||||
super();
|
super();
|
||||||
this.configurationURL = configurationURL;
|
this.configurationURL = configurationURL;
|
||||||
@ -28,25 +35,41 @@ public class FetchInfoConfigurationStage extends AbstractNonRepositorySyncStage
|
|||||||
@Override
|
@Override
|
||||||
public void handleSuccess(final ExtendedJSONObject result) {
|
public void handleSuccess(final ExtendedJSONObject result) {
|
||||||
session.config.infoConfiguration = new InfoConfiguration(result);
|
session.config.infoConfiguration = new InfoConfiguration(result);
|
||||||
|
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
|
||||||
session.advance();
|
session.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleFailure(final SyncStorageResponse response) {
|
public void handleFailure(final SyncStorageResponse response) {
|
||||||
|
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
|
||||||
|
|
||||||
// Handle all non-404 failures upstream.
|
// Handle all non-404 failures upstream.
|
||||||
if (response.getStatusCode() != 404) {
|
if (response.getStatusCode() != 404) {
|
||||||
|
telemetryStageCollector.error = new TelemetryCollector.StageErrorBuilder()
|
||||||
|
.setLastException(new HTTPFailureException(response))
|
||||||
|
.build();
|
||||||
session.handleHTTPError(response, "Failure fetching info/configuration");
|
session.handleHTTPError(response, "Failure fetching info/configuration");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// End-point might not be available (404) if server is running an older version.
|
// End-point might not be available (404) if server is running an older version.
|
||||||
// We will use default config values in this case.
|
// We will use default config values in this case.
|
||||||
|
// While this is not strictly an error in a sense that it's recoverable, going forward the
|
||||||
|
// expectation of having info/config endpoint will solidify, and it should be easy enough
|
||||||
|
// to interpret this error by correlating it to the current state of deployed servers.
|
||||||
|
telemetryStageCollector.error = new TelemetryCollector
|
||||||
|
.StageErrorBuilder(TELEMETRY_ERROR_NAME, TELEMETRY_ERROR_MISSING)
|
||||||
|
.build();
|
||||||
session.config.infoConfiguration = new InfoConfiguration();
|
session.config.infoConfiguration = new InfoConfiguration();
|
||||||
session.advance();
|
session.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleError(final Exception e) {
|
public void handleError(final Exception e) {
|
||||||
|
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
|
||||||
|
telemetryStageCollector.error = new TelemetryCollector.StageErrorBuilder()
|
||||||
|
.setLastException(e)
|
||||||
|
.build();
|
||||||
session.abort(e, "Failure fetching info/configuration");
|
session.abort(e, "Failure fetching info/configuration");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user