From cdd101840741dbb95f03dfeab5aec4541f0ea570 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 24 Jan 2024 04:15:21 +0400 Subject: [PATCH] feat(dashmate): set tenderdash syncing when it is catching up --- packages/dashmate/docker-compose.yml | 9 ++- .../dashmate/src/status/scopes/platform.js | 4 ++ .../test/unit/status/scopes/platform.spec.js | 66 +++++++++++++++++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/packages/dashmate/docker-compose.yml b/packages/dashmate/docker-compose.yml index 8ecff50b5b5..31ef6504cae 100644 --- a/packages/dashmate/docker-compose.yml +++ b/packages/dashmate/docker-compose.yml @@ -120,7 +120,7 @@ services: - TENDERMINT_RPC_HOST=drive_tenderdash - TENDERMINT_RPC_PORT=${PLATFORM_DRIVE_TENDERDASH_RPC_PORT:?err} - NODE_ENV=${ENVIRONMENT:?err} - command: --only api + command: yarn run core-streams stop_grace_period: 10s profiles: - platform @@ -130,6 +130,9 @@ services: labels: org.dashmate.service.title: "DAPI Transactions Filter Stream" restart: unless-stopped + deploy: + mode: replicated + replicas: ${PLATFORM_DAPI_API_DOCKER_DEPLOY_REPLICAS:-1} environment: - TX_FILTER_STREAM_GRPC_PORT=3006 - DASHCORE_RPC_HOST=core @@ -144,10 +147,12 @@ services: - NETWORK=devnet - TENDERMINT_RPC_HOST=drive_tenderdash - TENDERMINT_RPC_PORT=26657 - command: --only core-streams + command: yarn run core-streams stop_grace_period: 10s profiles: - platform + expose: + - 3006 dapi_envoy: image: ${PLATFORM_DAPI_ENVOY_DOCKER_IMAGE:?err} diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 74d961e63c4..ad640a3076a 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -115,6 +115,10 @@ export default function getPlatformScopeFactory( const platformPeers = parseInt(tenderdashNetInfo.n_peers, 10); const { listening } = tenderdashNetInfo; + if (catchingUp) { + info.serviceStatus = ServiceStatusEnum.syncing; + } + info.version = version; info.listening = listening; info.latestBlockHeight = latestBlockHeight; diff --git a/packages/dashmate/test/unit/status/scopes/platform.spec.js b/packages/dashmate/test/unit/status/scopes/platform.spec.js index 59053d5ae97..985ff18fa32 100644 --- a/packages/dashmate/test/unit/status/scopes/platform.spec.js +++ b/packages/dashmate/test/unit/status/scopes/platform.spec.js @@ -126,6 +126,72 @@ describe('getPlatformScopeFactory', () => { expect(scope).to.deep.equal(expectedScope); }); + it('should return platform syncing when it is catching up', async () => { + mockDetermineDockerStatus.returns(DockerStatusEnum.running); + mockRpcClient.mnsync.withArgs('status').returns({ result: { IsSynced: true } }); + mockDockerCompose.isServiceRunning.returns(true); + mockDockerCompose.execCommand.returns({ exitCode: 0, out: '' }); + mockMNOWatchProvider.returns(Promise.resolve('OPEN')); + + const mockStatus = { + node_info: { + version: '0', + network: 'test', + moniker: 'test', + }, + sync_info: { + catching_up: true, + latest_app_hash: 'DEADBEEF', + latest_block_height: 1337, + latest_block_hash: 'DEADBEEF', + latest_block_time: 1337, + }, + }; + const mockNetInfo = { n_peers: 6, listening: true }; + + const expectedScope = { + coreIsSynced: true, + httpPort, + httpService, + p2pPort, + p2pService, + rpcService, + httpPortState: PortStateEnum.OPEN, + p2pPortState: PortStateEnum.OPEN, + tenderdash: { + httpPortState: PortStateEnum.OPEN, + p2pPortState: PortStateEnum.OPEN, + dockerStatus: DockerStatusEnum.running, + serviceStatus: ServiceStatusEnum.syncing, + version: '0', + listening: true, + catchingUp: true, + latestBlockHash: 'DEADBEEF', + latestBlockHeight: 1337, + latestBlockTime: 1337, + latestAppHash: 'DEADBEEF', + peers: 6, + moniker: 'test', + network: 'test', + }, + drive: { + dockerStatus: DockerStatusEnum.running, + serviceStatus: ServiceStatusEnum.up, + }, + }; + + mockFetch + .onFirstCall() + .returns(Promise.resolve({ json: () => Promise.resolve(mockStatus) })) + .onSecondCall() + .returns(Promise.resolve({ json: () => Promise.resolve(mockNetInfo) })); + mockMNOWatchProvider.returns(Promise.resolve('OPEN')); + + const scope = await getPlatformScope(config); + + expect(scope).to.deep.equal(expectedScope); + }); + it('should return empty scope if error during request to core', async () => { mockRpcClient.mnsync.withArgs('status').throws(new Error()); mockDockerCompose.execCommand.returns({ exitCode: 0, out: '' });