From 948d1ddd81ff03d16ef457cde20ffe08c93c14a7 Mon Sep 17 00:00:00 2001 From: Rui <102453770+ruixhuang@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:09:04 -0400 Subject: [PATCH] Correlate x-request-id to correlate route requests from Squid transactions (#23) --- v4/build.gradle | 2 +- .../status/DydxTransferStatusViewModel.kt | 1 + .../utils/DydxTransferInstanceStore.kt | 1 + .../dydxstatemanager/AbacusStateManager.kt | 6 +++--- .../transfers/DydxTransferState.kt | 1 + .../protocolImplementations/AbacusRestImp.kt | 19 +++++++++++-------- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/v4/build.gradle b/v4/build.gradle index 08b0620e..9bee6233 100644 --- a/v4/build.gradle +++ b/v4/build.gradle @@ -89,7 +89,7 @@ ext { compileSdkVersion = 34 // App dependencies - abacusVersion = '1.4.14' + abacusVersion = '1.6.1' carteraVersion = '0.1.12' kollectionsVersion = '2.0.16' diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/status/DydxTransferStatusViewModel.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/status/DydxTransferStatusViewModel.kt index c31be2a6..d6ed2813 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/status/DydxTransferStatusViewModel.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/status/DydxTransferStatusViewModel.kt @@ -96,6 +96,7 @@ class DydxTransferStatusViewModel @Inject constructor( fromChainId = transfer.fromChainId, toChainId = transfer.toChainId, isCctp = transfer.isCctp ?: false, + requestId = transfer.requestId, ) } } diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/utils/DydxTransferInstanceStore.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/utils/DydxTransferInstanceStore.kt index f47dac52..a845f513 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/utils/DydxTransferInstanceStore.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/utils/DydxTransferInstanceStore.kt @@ -37,6 +37,7 @@ class DydxTransferInstanceStore( usdcSize = parser.asDouble(transferInput.size?.usdcSize), size = parser.asDouble(transferInput.size?.size), isCctp = transferInput.isCctp, + requestId = transferInput.requestPayload?.requestId, ) abacusStateManager.addTransferInstance(transfer) } diff --git a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/AbacusStateManager.kt b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/AbacusStateManager.kt index 2ca1f9d8..729fdff7 100644 --- a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/AbacusStateManager.kt +++ b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/AbacusStateManager.kt @@ -97,7 +97,7 @@ interface AbacusStateManagerProtocol { fun addTransferInstance(transfer: DydxTransferInstance) fun removeTransferInstance(transfer: DydxTransferInstance) - fun transferStatus(hash: String, fromChainId: String?, toChainId: String?, isCctp: Boolean) + fun transferStatus(hash: String, fromChainId: String?, toChainId: String?, isCctp: Boolean, requestId: String?) fun screen(address: String, callback: ((Restriction) -> Unit)) fun commitCCTPWithdraw(callback: (Boolean, ParsingError?, Any?) -> Unit) @@ -347,8 +347,8 @@ class AbacusStateManager @Inject constructor( transferStateManager.remove(transfer) } - override fun transferStatus(hash: String, fromChainId: String?, toChainId: String?, isCctp: Boolean) { - asyncStateManager.transferStatus(hash, fromChainId, toChainId, isCctp) + override fun transferStatus(hash: String, fromChainId: String?, toChainId: String?, isCctp: Boolean, requestId: String?) { + asyncStateManager.transferStatus(hash, fromChainId, toChainId, isCctp, requestId) } override fun screen(address: String, callback: ((Restriction) -> Unit)) { diff --git a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/clientState/transfers/DydxTransferState.kt b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/clientState/transfers/DydxTransferState.kt index e15a8469..f7940e71 100644 --- a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/clientState/transfers/DydxTransferState.kt +++ b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/clientState/transfers/DydxTransferState.kt @@ -81,6 +81,7 @@ data class DydxTransferInstance( val usdcSize: Double? = null, val size: Double? = null, val isCctp: Boolean? = null, + val requestId: String? = null, ) { enum class TransferType { DEPOSIT, WITHDRAWAL, TRANSFER_OUT diff --git a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/protocolImplementations/AbacusRestImp.kt b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/protocolImplementations/AbacusRestImp.kt index 6e183c33..932f20bb 100644 --- a/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/protocolImplementations/AbacusRestImp.kt +++ b/v4/integration/dydxStateManager/src/main/java/exchange/dydx/dydxstatemanager/protocolImplementations/AbacusRestImp.kt @@ -2,8 +2,10 @@ package exchange.dydx.dydxstatemanager.protocolImplementations import android.os.AsyncTask import android.util.Log +import exchange.dydx.abacus.protocols.RestCallback import exchange.dydx.abacus.protocols.RestProtocol import exchange.dydx.abacus.utils.IMap +import exchange.dydx.abacus.utils.toJson import okhttp3.CacheControl import okhttp3.Callback import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -31,7 +33,7 @@ class AbacusRestImp @Inject constructor() : RestProtocol { override fun delete( url: String, headers: IMap?, - callback: (response: String?, httpCode: Int) -> Unit, + callback: RestCallback, ) { processRest(url, headers, null, "DELETE", callback) } @@ -39,7 +41,7 @@ class AbacusRestImp @Inject constructor() : RestProtocol { override fun get( url: String, headers: IMap?, - callback: (response: String?, httpCode: Int) -> Unit, + callback: RestCallback, ) { processRest(url, headers, null, "GET", callback) } @@ -48,7 +50,7 @@ class AbacusRestImp @Inject constructor() : RestProtocol { url: String, headers: IMap?, body: String?, - callback: (response: String?, httpCode: Int) -> Unit, + callback: RestCallback, ) { processRest(url, headers, body, "POST", callback) } @@ -57,7 +59,7 @@ class AbacusRestImp @Inject constructor() : RestProtocol { url: String, headers: IMap?, body: String?, - callback: (response: String?, httpCode: Int) -> Unit, + callback: RestCallback, ) { processRest(url, headers, body, "PUT", callback) } @@ -67,7 +69,7 @@ class AbacusRestImp @Inject constructor() : RestProtocol { headers: IMap?, body: String?, verb: String, - callback: (String?, Int) -> Unit, + callback: RestCallback, ) { var requestBuilder = Request.Builder() @@ -97,21 +99,22 @@ class AbacusRestImp @Inject constructor() : RestProtocol { run(request, callback) } - private fun run(request: Request, callback: (String?, Int) -> Unit) { + private fun run(request: Request, callback: RestCallback) { beginBackgroundTask() // Log.d(TAG, "AbacusRestImp Requesting ${request.url}") client.newCall(request).enqueue(object : Callback { override fun onFailure(call: okhttp3.Call, e: IOException) { Log.e(TAG, "AbacusRestImp Request Failed ${request.url}, ${e.message}") endBackgroundTask() - callback(null, 0) + callback(null, 0, null) } override fun onResponse(call: okhttp3.Call, response: Response) { endBackgroundTask() val code = response.code val body = response.body?.string() - callback(body, code) + val headersJsonString = response.headers.toMap().toJson() + callback(body, code, headersJsonString) } }) }