From da433854ac4e3f02768c6ff3ef0170eef3d932ba Mon Sep 17 00:00:00 2001 From: Daniel Pyrathon Date: Mon, 23 Aug 2021 13:59:49 -0700 Subject: [PATCH] fix: added prometheus changes on expiration (#308) * added prometheus changes on expiration * added unit tests * prettier * addressed comments * remove unused tests * fix lint: * Update quote_requestor_test.ts --- .../src/utils/quote_requestor.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/asset-swapper/src/utils/quote_requestor.ts b/packages/asset-swapper/src/utils/quote_requestor.ts index a6b80fc658..b2e9f1123b 100644 --- a/packages/asset-swapper/src/utils/quote_requestor.ts +++ b/packages/asset-swapper/src/utils/quote_requestor.ts @@ -25,6 +25,7 @@ import { } from '../types'; import { returnQuoteFromAltMMAsync } from './alt_mm_implementation_utils'; +import { ONE_SECOND_MS } from './market_operation_utils/constants'; import { RfqMakerBlacklist } from './rfq_maker_blacklist'; const MAKER_TIMEOUT_STREAK_LENGTH = 10; @@ -177,6 +178,12 @@ export class QuoteRequestor { } } + public static getDurationUntilExpirationMs(expirationTimeSeconds: BigNumber): BigNumber { + const expirationTimeMs = expirationTimeSeconds.times(constants.ONE_SECOND_MS); + const currentTimeMs = new BigNumber(Date.now()); + return BigNumber.max(expirationTimeMs.minus(currentTimeMs), 0); + } + private static _makerSupportsPair( typedMakerUrl: TypedMakerUrl, makerToken: string, @@ -361,12 +368,6 @@ export class QuoteRequestor { return true; } - private _isExpirationTooSoon(expirationTimeSeconds: BigNumber): boolean { - const expirationTimeMs = expirationTimeSeconds.times(constants.ONE_SECOND_MS); - const currentTimeMs = new BigNumber(Date.now()); - return expirationTimeMs.isLessThan(currentTimeMs.plus(this._expiryBufferMs)); - } - private async _getQuotesAsync( makerToken: string, takerToken: string, @@ -587,12 +588,15 @@ export class QuoteRequestor { return false; } const isLastLook = Boolean(options.isLastLook); - if (this._isExpirationTooSoon(new BigNumber(order.expiry))) { + const msRemainingUntilExpiration = QuoteRequestor.getDurationUntilExpirationMs(new BigNumber(order.expiry)); + const isExpirationTooSoon = msRemainingUntilExpiration.lt(this._expiryBufferMs); + if (isExpirationTooSoon) { this._warningLogger(order, 'Expiry too soon in RFQ-T firm quote, filtering out'); this._metrics?.incrementExpirationToSoonCounter(isLastLook, order.maker); return false; } else { - this._metrics?.measureExpirationForValidOrder(isLastLook, order.maker, order.expiry); + const secondsRemaining = msRemainingUntilExpiration.div(ONE_SECOND_MS); + this._metrics?.measureExpirationForValidOrder(isLastLook, order.maker, secondsRemaining); const takerAmount = new BigNumber(order.takerAmount); const fillRatio = takerAmount.div(assetFillAmount); @@ -673,7 +677,9 @@ export class QuoteRequestor { this._warningLogger(order, 'Unexpected token or taker address in RFQ order, filtering out'); return false; } - if (this._isExpirationTooSoon(new BigNumber(order.expiry))) { + const msRemainingUntilExpiration = QuoteRequestor.getDurationUntilExpirationMs(new BigNumber(order.expiry)); + const isExpirationTooSoon = msRemainingUntilExpiration.lt(this._expiryBufferMs); + if (isExpirationTooSoon) { this._warningLogger(order, 'Expiry too soon in RFQ indicative quote, filtering out'); return false; } else {