asset-s/RFQT: log each maker resp. time, not agg.

Log each maker's individual response times, rather than logging them in
aggregate.

Addresses review comment https://github.com/0xProject/0x-monorepo/pull/2574#discussion_r419769846
This commit is contained in:
F. Eugene Aumson
2020-05-06 13:22:51 -04:00
parent 352b1b43f2
commit e42701599a

View File

@@ -102,12 +102,12 @@ export class QuoteRequestor {
// create an array of promises for quote responses, using "undefined" // create an array of promises for quote responses, using "undefined"
// as a placeholder for failed requests. // as a placeholder for failed requests.
const timeBeforeAwait = Date.now();
const responsesIfDefined: Array<undefined | AxiosResponse<SignedOrder>> = await Promise.all( const responsesIfDefined: Array<undefined | AxiosResponse<SignedOrder>> = await Promise.all(
Object.keys(this._rfqtAssetOfferings).map(async url => { Object.keys(this._rfqtAssetOfferings).map(async url => {
if (this._makerSupportsPair(url, makerAssetData, takerAssetData)) { if (this._makerSupportsPair(url, makerAssetData, takerAssetData)) {
try { try {
return await Axios.get<SignedOrder>(`${url}/quote`, { const timeBeforeAwait = Date.now();
const response = await Axios.get<SignedOrder>(`${url}/quote`, {
headers: { '0x-api-key': _opts.apiKey }, headers: { '0x-api-key': _opts.apiKey },
params: { params: {
takerAddress: _opts.takerAddress, takerAddress: _opts.takerAddress,
@@ -115,6 +115,13 @@ export class QuoteRequestor {
}, },
timeout: _opts.makerEndpointMaxResponseTimeMs, timeout: _opts.makerEndpointMaxResponseTimeMs,
}); });
this._infoLogger({
rfqtFirmQuoteMakerResponseTime: {
makerEndpoint: url,
responseTimeMs: Date.now() - timeBeforeAwait,
},
});
return response;
} catch (err) { } catch (err) {
this._warningLogger( this._warningLogger(
`Failed to get RFQ-T firm quote from market maker endpoint ${url} for API key ${ `Failed to get RFQ-T firm quote from market maker endpoint ${url} for API key ${
@@ -128,7 +135,6 @@ export class QuoteRequestor {
return undefined; return undefined;
}), }),
); );
this._infoLogger({ aggregatedRfqtLatencyMs: Date.now() - timeBeforeAwait });
const responses = responsesIfDefined.filter( const responses = responsesIfDefined.filter(
(respIfDefd): respIfDefd is AxiosResponse<SignedOrder> => respIfDefd !== undefined, (respIfDefd): respIfDefd is AxiosResponse<SignedOrder> => respIfDefd !== undefined,
@@ -196,14 +202,14 @@ export class QuoteRequestor {
const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options }; const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options };
assertTakerAddressOrThrow(_opts.takerAddress); assertTakerAddressOrThrow(_opts.takerAddress);
const timeBeforeAwait = Date.now();
const axiosResponsesIfDefined: Array< const axiosResponsesIfDefined: Array<
undefined | AxiosResponse<RfqtIndicativeQuoteResponse> undefined | AxiosResponse<RfqtIndicativeQuoteResponse>
> = await Promise.all( > = await Promise.all(
Object.keys(this._rfqtAssetOfferings).map(async url => { Object.keys(this._rfqtAssetOfferings).map(async url => {
if (this._makerSupportsPair(url, makerAssetData, takerAssetData)) { if (this._makerSupportsPair(url, makerAssetData, takerAssetData)) {
try { try {
return await Axios.get<RfqtIndicativeQuoteResponse>(`${url}/price`, { const timeBeforeAwait = Date.now();
const response = await Axios.get<RfqtIndicativeQuoteResponse>(`${url}/price`, {
headers: { '0x-api-key': options.apiKey }, headers: { '0x-api-key': options.apiKey },
params: { params: {
takerAddress: options.takerAddress, takerAddress: options.takerAddress,
@@ -211,6 +217,13 @@ export class QuoteRequestor {
}, },
timeout: options.makerEndpointMaxResponseTimeMs, timeout: options.makerEndpointMaxResponseTimeMs,
}); });
this._infoLogger({
rfqtIndicativeQuoteMakerResponseTime: {
makerEndpoint: url,
responseTimeMs: Date.now() - timeBeforeAwait,
},
});
return response;
} catch (err) { } catch (err) {
this._warningLogger( this._warningLogger(
`Failed to get RFQ-T indicative quote from market maker endpoint ${url} for API key ${ `Failed to get RFQ-T indicative quote from market maker endpoint ${url} for API key ${
@@ -224,7 +237,6 @@ export class QuoteRequestor {
return undefined; return undefined;
}), }),
); );
this._infoLogger({ aggregatedRfqtLatencyMs: Date.now() - timeBeforeAwait });
const axiosResponses = axiosResponsesIfDefined.filter( const axiosResponses = axiosResponsesIfDefined.filter(
(respIfDefd): respIfDefd is AxiosResponse<RfqtIndicativeQuoteResponse> => respIfDefd !== undefined, (respIfDefd): respIfDefd is AxiosResponse<RfqtIndicativeQuoteResponse> => respIfDefd !== undefined,