From 09e51b8e0a62bb78c3d14806acfebaf561af9068 Mon Sep 17 00:00:00 2001 From: DZariusz Date: Tue, 30 Jan 2024 18:41:09 +0100 Subject: [PATCH 1/4] fix: in `testBalanceThreshold` support case where `balance` is null/undefined --- CHANGELOG.md | 2 ++ src/services/ForeignChainReplicator.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24275263..4b1b059f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## Unreleased +### Fixed +- in `testBalanceThreshold` support case where `balance` is null/undefined (solana case) ## [5.8.0] - 2023-05-29 ### Removed diff --git a/src/services/ForeignChainReplicator.ts b/src/services/ForeignChainReplicator.ts index ab6fca23..a32be16f 100644 --- a/src/services/ForeignChainReplicator.ts +++ b/src/services/ForeignChainReplicator.ts @@ -134,7 +134,7 @@ export class ForeignChainReplicator { ) => { const { errorLimit, warningLimit } = this.settings.blockchain.multiChains[chainId].transactions.mintBalance; - if (balance.lt(toCurrency(errorLimit))) { + if (!balance || balance.lt(toCurrency(errorLimit))) { throw new Error(`[${chainId}] Balance (${address.slice(0, 10)}) is lower than ${errorLimit}`); } From 6d6c7bd08be61f3dcfa06a01c27e1d228b487153 Mon Sep 17 00:00:00 2001 From: DZariusz Date: Wed, 31 Jan 2024 13:46:08 +0100 Subject: [PATCH 2/4] remove newrelic --- Dockerfile | 1 - newrelic.js | 61 ------------------ package.json | 2 - src/boot.ts | 1 - src/config/settings.ts | 2 +- src/config/setupNewrelic.ts | 2 - src/scheduler.ts | 3 - src/services/BalanceReporter.ts | 52 ---------------- src/services/BlockSynchronizer.ts | 2 - src/services/ChainInstanceResolver.ts | 2 - src/services/ForeignChainBalanceReporter.ts | 62 ------------------- src/services/ForeignChainReplicator.ts | 2 - src/services/HomechainBalanceReporter.ts | 49 --------------- src/services/LeavesSynchronizer.ts | 2 - src/services/Migrations.ts | 2 - src/services/NewBlocksResolver.ts | 2 - .../foreign-chain/ForeignBlockReplicator.ts | 3 - src/worker-scheduler-server.ts | 3 - src/workers/BlockResolverWorker.ts | 2 - src/workers/BlockSynchronizerWorker.ts | 2 - src/workers/MetricsWorker.ts | 7 --- 21 files changed, 1 insertion(+), 263 deletions(-) delete mode 100644 newrelic.js delete mode 100644 src/config/setupNewrelic.ts delete mode 100644 src/services/BalanceReporter.ts delete mode 100644 src/services/ForeignChainBalanceReporter.ts delete mode 100644 src/services/HomechainBalanceReporter.ts diff --git a/Dockerfile b/Dockerfile index ecd4265d..6c88acf2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,6 @@ RUN mkdir -p /home/runner/app WORKDIR /home/runner/app COPY package*.json ./ COPY tsconfig.json ./ -COPY newrelic.js ./ RUN npm install -g typescript rimraf cpx RUN chown -R runner:runner /home/runner diff --git a/newrelic.js b/newrelic.js deleted file mode 100644 index e1c27d30..00000000 --- a/newrelic.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; -/** - * New Relic agent configuration. - * - * See lib/config/default.js in the agent distribution for a more complete - * description of configuration variables and their potential values. - */ -exports.config = { - /** - * This setting controls distributed tracing. - * Distributed tracing lets you see the path that a request takes through your - * distributed system. Enabling distributed tracing changes the behavior of some - * New Relic features, so carefully consult the transition guide before you enable - * this feature: https://docs.newrelic.com/docs/transition-guide-distributed-tracing - * Default is true. - */ - distributed_tracing: { - /** - * Enables/disables distributed tracing. - * - * @env NEW_RELIC_DISTRIBUTED_TRACING_ENABLED - */ - enabled: true - }, - logging: { - /** - * Level at which to log. 'trace' is most useful to New Relic when diagnosing - * issues with the agent, 'info' and higher will impose the least overhead on - * production applications. - */ - level: 'info' - }, - /** - * When true, all request headers except for those listed in attributes.exclude - * will be captured for all traces, unless otherwise specified in a destination's - * attributes include/exclude lists. - */ - allow_all_headers: true, - attributes: { - /** - * Prefix of attributes to exclude from all destinations. Allows * as wildcard - * at end. - * - * NOTE: If excluding headers, they must be in camelCase form to be filtered. - * - * @env NEW_RELIC_ATTRIBUTES_EXCLUDE - */ - exclude: [ - 'request.headers.cookie', - 'request.headers.authorization', - 'request.headers.proxyAuthorization', - 'request.headers.setCookie*', - 'request.headers.x*', - 'response.headers.cookie', - 'response.headers.authorization', - 'response.headers.proxyAuthorization', - 'response.headers.setCookie*', - 'response.headers.x*' - ] - } -}; diff --git a/package.json b/package.json index 2f001418..5cf42bb2 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "@types/mocha": "~8.2.0", "@types/mongodb": "^3.5.28", "@types/moxios": "~0.4.9", - "@types/newrelic": "~7.0.0", "@types/node": "~14.11.2", "@types/rosie": "^0.0.40", "@types/sinon": "^10.0.2", @@ -107,7 +106,6 @@ "jwks-rsa": "^2.0.5", "lodash": "^4.17.21", "mongoose": "5.13.12", - "newrelic": "~7.2.0", "reflect-metadata": "~0.1.13", "rimraf": "~3.0.2", "statsd-client": "~0.4.5", diff --git a/src/boot.ts b/src/boot.ts index 5e7d82fd..ee9b9bfe 100644 --- a/src/boot.ts +++ b/src/boot.ts @@ -1,6 +1,5 @@ import 'reflect-metadata'; import './config/setupDotenv'; -import './config/setupNewrelic'; import initMongoDB from './config/initMongoDB'; import logger from './lib/logger'; diff --git a/src/config/settings.ts b/src/config/settings.ts index 31a6d8d4..5a56bd35 100644 --- a/src/config/settings.ts +++ b/src/config/settings.ts @@ -162,7 +162,7 @@ const settings: Settings = { maxSearchRange: parseInt(process.env.MAX_SIGNATURE_SEARCH_RANGE || '8', 10), maxSearchRangeInSeconds: parseInt(process.env.MAX_SIGNATURE_SEARCH_RANGE || '8', 10) * 24 * 60 * 60, }, - name: process.env.NEW_RELIC_APP_NAME || process.env.NAME || 'default', + name: process.env.NAME || 'default', }; export default settings; diff --git a/src/config/setupNewrelic.ts b/src/config/setupNewrelic.ts deleted file mode 100644 index b491ff7e..00000000 --- a/src/config/setupNewrelic.ts +++ /dev/null @@ -1,2 +0,0 @@ -process.env['NEW_RELIC_ENABLED'] ||= 'false'; -import 'newrelic'; diff --git a/src/scheduler.ts b/src/scheduler.ts index 57476d45..6083f59a 100644 --- a/src/scheduler.ts +++ b/src/scheduler.ts @@ -1,6 +1,5 @@ import './boot'; import { Logger } from 'winston'; -import newrelic from 'newrelic'; import Application from './lib/Application'; import BlockSynchronizerWorker from './workers/BlockSynchronizerWorker'; @@ -39,7 +38,6 @@ logger.info('Starting Scheduler...'); } ); } catch (e) { - newrelic.noticeError(e); logger.error(e); } }; @@ -92,7 +90,6 @@ logger.info('Starting Scheduler...'); } ); } catch (e) { - newrelic.noticeError(e); logger.error(e); } }, settings.jobs.blockCreation.interval); diff --git a/src/services/BalanceReporter.ts b/src/services/BalanceReporter.ts deleted file mode 100644 index ec045b61..00000000 --- a/src/services/BalanceReporter.ts +++ /dev/null @@ -1,52 +0,0 @@ -import newrelic from 'newrelic'; -import { inject, injectable } from 'inversify'; -import { Logger } from 'winston'; -import { BlockchainRepository } from '../repositories/BlockchainRepository'; -import { BigNumber } from '@ethersproject/bignumber'; -import Settings from '../types/Settings'; - -export type BlockReport = { - address: string; - chain: string; - balance: number; - currency: string; - location?: string; -}; - -@injectable() -abstract class BalanceReporter { - @inject('Logger') logger!: Logger; - @inject('Settings') settings!: Settings; - @inject(BlockchainRepository) blockchainRepository!: BlockchainRepository; - - protected bigNumberToBalance(n: BigNumber): number { - return n.div('10000000000000000').toNumber() / 100; - } - - protected reportBalances(blockchains: BlockReport[]): void { - blockchains.forEach(this.logReport); - blockchains.forEach(this.recordEvent); - } - - private logReport = ({ chain, balance, currency, address }: BlockReport): void => { - const className = this.constructor.name; - this.logger.info(`[${className}] ChainID: ${chain}, Balance: ${balance} ${currency}, Address: ${address}`); - }; - - protected recordEvent = ({ address, balance, chain, currency, location }: BlockReport): void => { - try { - newrelic.recordCustomEvent('WalletBalanceReport', { - balance, - address, - chain, - currency, - env: this.settings.environment, - location, - }); - } catch (e) { - this.logger.error(`[BalanceReporter] Failed to report balances to NewRelic. ${e.toString()}`); - } - }; -} - -export default BalanceReporter; diff --git a/src/services/BlockSynchronizer.ts b/src/services/BlockSynchronizer.ts index 2474b4b1..057a71a3 100644 --- a/src/services/BlockSynchronizer.ts +++ b/src/services/BlockSynchronizer.ts @@ -1,6 +1,5 @@ import { Logger } from 'winston'; import { inject, injectable } from 'inversify'; -import newrelic from 'newrelic'; import { ChainContract } from '../contracts/ChainContract'; import Block, { IBlock } from '../models/Block'; @@ -341,7 +340,6 @@ class BlockSynchronizer { private noticeError = (err: string): void => { this.logger.error(err); - newrelic.noticeError(Error(err)); }; } diff --git a/src/services/ChainInstanceResolver.ts b/src/services/ChainInstanceResolver.ts index 05e3b13f..fab72c00 100644 --- a/src/services/ChainInstanceResolver.ts +++ b/src/services/ChainInstanceResolver.ts @@ -1,7 +1,6 @@ import { inject, injectable } from 'inversify'; import { Logger } from 'winston'; import ChainInstance, { IChainInstance } from '../models/ChainInstance'; -import newrelic from 'newrelic'; import { ChainsIds } from '../types/ChainsIds'; @injectable() @@ -48,7 +47,6 @@ export class ChainInstanceResolver { a.anchor === b.anchor ? b.blocksCountOffset - a.blocksCountOffset : b.anchor - a.anchor; private noticeError = (err: string): void => { - newrelic.noticeError(Error(err)); this.logger.error(err); }; } diff --git a/src/services/ForeignChainBalanceReporter.ts b/src/services/ForeignChainBalanceReporter.ts deleted file mode 100644 index 1b8e80ac..00000000 --- a/src/services/ForeignChainBalanceReporter.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { injectable } from 'inversify'; -import { ChainCurrencyEnum } from '../types/ChainCurrency'; -import { ChainsIds as ChainId, ForeignChainsIds, NonEvmChainsIds } from '../types/ChainsIds'; -import BalanceReporter, { BlockReport } from './BalanceReporter'; -import { PromiseResultStatus, SETTLED_FULFILLED, SETTLED_REJECTED } from '../types/custom'; - -interface PromiseResult { - status: PromiseResultStatus; - value?: BlockReport; - reason?: string; -} - -@injectable() -class ForeignChainBalanceReporter extends BalanceReporter { - async call(chainsIds: ChainId[] = ForeignChainsIds): Promise { - const replicatorsBalances = await Promise.allSettled(chainsIds.map(this.fetchBalanceOfReplicator)); - const { resolved, rejected } = this.filterResults(replicatorsBalances); - this.reportBalances(resolved); - this.logRejectedResults(rejected); - } - - private fetchBalanceOfReplicator = async (chainId: ChainId): Promise => { - let blockchain, address, balance; - - if (NonEvmChainsIds.includes(chainId)) { - blockchain = this.blockchainRepository.getGeneric(chainId); - address = blockchain.wallet.address; - balance = blockchain.fromBaseCurrency(await blockchain.getWalletBalance()); - } else { - blockchain = this.blockchainRepository.get(chainId); - address = blockchain.wallet.address; - balance = this.bigNumberToBalance(await blockchain.balanceOf(address)); - } - - return { - balance, - address, - chain: chainId.replace('ethereum', 'eth'), - currency: ChainCurrencyEnum[chainId], - }; - }; - - private filterResults(results: PromiseResult[]) { - const successful = results.filter(({ status }) => status === SETTLED_FULFILLED).map(({ value }) => value); - const rejected = results - .filter(({ status }) => status === SETTLED_REJECTED) - .map(({ reason }) => reason) - .join(','); - return { - resolved: successful as BlockReport[], - rejected: rejected as string, - }; - } - - private logRejectedResults(rejectionMessages: string): void { - if (rejectionMessages) { - this.logger.error(`[ForeignChainBalanceReporter] failed to fetch data from foreign chains ${rejectionMessages}`); - } - } -} - -export default ForeignChainBalanceReporter; diff --git a/src/services/ForeignChainReplicator.ts b/src/services/ForeignChainReplicator.ts index a32be16f..947185b9 100644 --- a/src/services/ForeignChainReplicator.ts +++ b/src/services/ForeignChainReplicator.ts @@ -1,6 +1,5 @@ import { inject, injectable } from 'inversify'; import { Logger } from 'winston'; -import newrelic from 'newrelic'; import { BlockChainDataFactory } from '../factories/BlockChainDataFactory'; import { IForeignBlockReplicator, SolanaBlockReplicator } from './foreign-chain'; @@ -144,7 +143,6 @@ export class ForeignChainReplicator { }; private noticeError = (err: string): void => { - newrelic.noticeError(Error(err)); this.logger.error(err); }; } diff --git a/src/services/HomechainBalanceReporter.ts b/src/services/HomechainBalanceReporter.ts deleted file mode 100644 index 01600ed8..00000000 --- a/src/services/HomechainBalanceReporter.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { inject, injectable, postConstruct } from 'inversify'; -import { ChainStatus } from '../types/ChainStatus'; -import { ChainContract } from '../contracts/ChainContract'; -import { ChainContractRepository } from '../repositories/ChainContractRepository'; -import { Blockchain } from '../lib/Blockchain'; -import BalanceReporter, { BlockReport } from './BalanceReporter'; -import { ChainCurrencyEnum } from '../types/ChainCurrency'; - -@injectable() -class HomechainBalanceReporter extends BalanceReporter { - private homechainId: string; - private homechain: Blockchain; - private chainContract: ChainContract; - - @inject(ChainContractRepository) chainContractRepository!: ChainContractRepository; - - @postConstruct() - setup(): void { - this.homechainId = this.settings.blockchain.homeChain.chainId; - this.homechain = this.blockchainRepository.get(this.homechainId); - this.chainContract = this.chainContractRepository.get(this.homechainId); - } - - async call(): Promise { - const validators = await this.fetchValidators(); - this.reportBalances(validators); - } - - private async fetchValidators(): Promise { - const { validators: validatorsIds, locations } = await this.chainContract.resolveStatus(); - const validators = await Promise.all( - validatorsIds.map((validatorId, index) => this.fetchValidator(validatorId, locations[index])) - ); - return validators; - } - - private fetchValidator = async (validatorId: string, validatorUrl: string): Promise => { - const balance = await this.homechain.balanceOf(validatorId); - return { - address: validatorId, - balance: this.bigNumberToBalance(balance), - chain: this.homechainId, - location: validatorUrl, - currency: ChainCurrencyEnum.bsc, - }; - }; -} - -export default HomechainBalanceReporter; diff --git a/src/services/LeavesSynchronizer.ts b/src/services/LeavesSynchronizer.ts index ed632af3..2e30c7e6 100644 --- a/src/services/LeavesSynchronizer.ts +++ b/src/services/LeavesSynchronizer.ts @@ -1,6 +1,5 @@ import { Logger } from 'winston'; import { inject, injectable } from 'inversify'; -import newrelic from 'newrelic'; import * as url from 'url'; import { SortedMerkleTree } from '@umb-network/toolbox'; @@ -193,7 +192,6 @@ class LeavesSynchronizer { }; private noticeError = (err: string): void => { - newrelic.noticeError(Error(err)); this.logger.error(err); }; } diff --git a/src/services/Migrations.ts b/src/services/Migrations.ts index 91a89c92..08eac6a2 100644 --- a/src/services/Migrations.ts +++ b/src/services/Migrations.ts @@ -1,4 +1,3 @@ -import newrelic from 'newrelic'; import Block from '../models/Block'; import Migration from '../models/Migration'; import BlockChainData, { IBlockChainData } from '../models/BlockChainData'; @@ -33,7 +32,6 @@ class Migrations { await Migrations.saveMigration(migrationId); } } catch (e) { - newrelic.noticeError(e); console.error(e); if (callbackError) { diff --git a/src/services/NewBlocksResolver.ts b/src/services/NewBlocksResolver.ts index 1e7d9cf9..2c697f30 100644 --- a/src/services/NewBlocksResolver.ts +++ b/src/services/NewBlocksResolver.ts @@ -1,6 +1,5 @@ import { Logger } from 'winston'; import { inject, injectable } from 'inversify'; -import newrelic from 'newrelic'; import { ABI, LeafValueCoder, loadFeeds } from '@umb-network/toolbox'; import { ChainContract } from '../contracts/ChainContract'; @@ -343,7 +342,6 @@ class NewBlocksResolver { }; private noticeError = (err: string, meta?: Record): void => { - newrelic.noticeError(Error(err)); const msg = err + (meta ? `${err}\n${JSON.stringify(meta)}` : ''); this.logger.error(msg); }; diff --git a/src/services/foreign-chain/ForeignBlockReplicator.ts b/src/services/foreign-chain/ForeignBlockReplicator.ts index 39485695..1cb22236 100644 --- a/src/services/foreign-chain/ForeignBlockReplicator.ts +++ b/src/services/foreign-chain/ForeignBlockReplicator.ts @@ -1,6 +1,5 @@ import { inject, injectable, postConstruct } from 'inversify'; import { Logger } from 'winston'; -import newrelic from 'newrelic'; import { FeedValue } from '@umb-network/toolbox/dist/types/Feed'; import { LeafKeyCoder, LeafValueCoder, TxSender } from '@umb-network/toolbox'; @@ -147,7 +146,6 @@ export abstract class ForeignBlockReplicator implements IForeignBlockReplicator }; } - newrelic.recordCustomEvent(FailedTransactionEvent, { transactionHash: receipt.transactionHash }); return { errors: [`[${this.chainId}] Tx for blockId ${block.blockId} failed`] }; }; @@ -309,7 +307,6 @@ export abstract class ForeignBlockReplicator implements IForeignBlockReplicator } private noticeError = (err: string): void => { - newrelic.noticeError(Error(err)); this.logger.error(err); }; } diff --git a/src/worker-scheduler-server.ts b/src/worker-scheduler-server.ts index 7eefed30..2e16991c 100644 --- a/src/worker-scheduler-server.ts +++ b/src/worker-scheduler-server.ts @@ -5,7 +5,6 @@ import BlockResolverWorker from './workers/BlockResolverWorker'; import Settings from './types/Settings'; import Server from './lib/Server'; import { Logger } from 'winston'; -import newrelic from 'newrelic'; (async (): Promise => { const settings: Settings = Application.get('Settings'); @@ -17,7 +16,6 @@ import newrelic from 'newrelic'; try { await blockSynchronizerWorker.enqueue({}); } catch (e) { - newrelic.noticeError(e); logger.error(e); } }, settings.jobs.blockCreation.interval); @@ -26,7 +24,6 @@ import newrelic from 'newrelic'; try { await blockResolverWorker.enqueue({}); } catch (e) { - newrelic.noticeError(e); logger.error(e); } }, settings.jobs.blockCreation.interval); diff --git a/src/workers/BlockResolverWorker.ts b/src/workers/BlockResolverWorker.ts index 357b5d87..ba81d4b7 100644 --- a/src/workers/BlockResolverWorker.ts +++ b/src/workers/BlockResolverWorker.ts @@ -2,7 +2,6 @@ import Bull from 'bullmq'; import { inject, injectable } from 'inversify'; import NewBlocksResolver from '../services/NewBlocksResolver'; import ChainSynchronizer from '../services/ChainSynchronizer'; -import newrelic from 'newrelic'; import { ChainsIds } from '../types/ChainsIds'; import { sleep } from '../utils/sleep'; import { DispatcherDetector } from '../services/DispatcherDetector'; @@ -34,7 +33,6 @@ class BlockResolverWorker extends BasicWorker { await this.chainSynchronizer.apply(chainId); await this.newBlocksResolver.apply(chainId); } catch (e) { - newrelic.noticeError(e); this.logger.error(e); } diff --git a/src/workers/BlockSynchronizerWorker.ts b/src/workers/BlockSynchronizerWorker.ts index 6d3c1042..bca62239 100644 --- a/src/workers/BlockSynchronizerWorker.ts +++ b/src/workers/BlockSynchronizerWorker.ts @@ -1,6 +1,5 @@ import Bull from 'bullmq'; import { Logger } from 'winston'; -import newrelic from 'newrelic'; import { inject, injectable } from 'inversify'; import BlockSynchronizer from '../services/BlockSynchronizer'; import Settings from '../types/Settings'; @@ -25,7 +24,6 @@ class BlockSynchronizerWorker extends SingletonWorker { try { await this.blockSynchronizer.apply(); } catch (e) { - newrelic.noticeError(e); this.logger.error(e); } diff --git a/src/workers/MetricsWorker.ts b/src/workers/MetricsWorker.ts index e0fc8e50..61c6ead8 100644 --- a/src/workers/MetricsWorker.ts +++ b/src/workers/MetricsWorker.ts @@ -6,26 +6,19 @@ import BlockMintedReporter from '../services/BlockMintedReporter'; import BlockLeafCountReporter from '../services/BlockLeafCountReporter'; import BasicWorker from './BasicWorker'; import { ChainsIds } from '../types/ChainsIds'; -import HomechainBalanceReporter from '../services/HomechainBalanceReporter'; -import ForeignChainBalanceReporter from '../services/ForeignChainBalanceReporter'; @injectable() class MetricsWorker extends BasicWorker { @inject('Logger') logger!: Logger; @inject(BlockMintedReporter) blockMintedReporter!: BlockMintedReporter; @inject(BlockLeafCountReporter) blockLeafCountReporter!: BlockLeafCountReporter; - @inject(HomechainBalanceReporter) homechainBalanceReporter!: HomechainBalanceReporter; - @inject(ForeignChainBalanceReporter) foreignChainBalanceReporter!: ForeignChainBalanceReporter; apply = async (job: Bull.Job): Promise => { try { - this.logger.debug(`Sending metrics to NewRelic ${job.data}`); const chains = Object.values(ChainsIds); await Promise.all(chains.map((chainId) => this.blockMintedReporter.call(chainId))); await this.blockLeafCountReporter.call(); - await this.homechainBalanceReporter.call(); - await this.foreignChainBalanceReporter.call([ChainsIds.SOLANA]); } catch (e) { this.logger.error(e); } From 20bcfe16fdc11c25e7d3828061526bf28b9ae6c2 Mon Sep 17 00:00:00 2001 From: DZariusz Date: Wed, 31 Jan 2024 14:39:17 +0100 Subject: [PATCH 3/4] remove statsD --- CHANGELOG.md | 3 + package-lock.json | 603 +------------------------ package.json | 2 - src/controllers/BlocksController.ts | 15 - src/controllers/L2DController.ts | 8 - src/controllers/ProfileController.ts | 7 +- src/controllers/ProofsController.ts | 8 - src/lib/getContainer.ts | 7 - src/lib/getStatsdClient.ts | 17 - src/lib/statsDClient.ts | 19 - src/middleware/MetricsMiddleware.ts | 34 -- src/services/BlockLeafCountReporter.ts | 19 - src/services/BlockMintedReporter.ts | 63 --- src/workers/MetricsWorker.ts | 10 +- 14 files changed, 11 insertions(+), 804 deletions(-) delete mode 100644 src/lib/getStatsdClient.ts delete mode 100644 src/lib/statsDClient.ts delete mode 100644 src/middleware/MetricsMiddleware.ts delete mode 100644 src/services/BlockLeafCountReporter.ts delete mode 100644 src/services/BlockMintedReporter.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b1b059f..521bc9cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - in `testBalanceThreshold` support case where `balance` is null/undefined (solana case) +### Removed +- remove `newrelic` and `statsd` + ## [5.8.0] - 2023-05-29 ### Removed - replicatin for: Eth, Avax, Polygon, Arbitrum diff --git a/package-lock.json b/package-lock.json index 4546c8b4..74fe8845 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sanctuary", - "version": "5.3.0", + "version": "5.8.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "sanctuary", - "version": "5.3.0", + "version": "5.8.0", "license": "MIT", "dependencies": { "@influxdata/influxdb-client": "^1.14.0", @@ -38,10 +38,8 @@ "jwks-rsa": "^2.0.5", "lodash": "^4.17.21", "mongoose": "5.13.12", - "newrelic": "~7.2.0", "reflect-metadata": "~0.1.13", "rimraf": "~3.0.2", - "statsd-client": "~0.4.5", "uuid": "~8.3.0", "uuidv4": "~6.2.4", "winston": "~3.3.3", @@ -64,11 +62,9 @@ "@types/mocha": "~8.2.0", "@types/mongodb": "^3.5.28", "@types/moxios": "~0.4.9", - "@types/newrelic": "~7.0.0", "@types/node": "~14.11.2", "@types/rosie": "^0.0.40", "@types/sinon": "^10.0.2", - "@types/statsd-client": "^0.4.3", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "~8.3.0", @@ -916,70 +912,6 @@ "@ethersproject/strings": "^5.5.0" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.3.tgz", - "integrity": "sha512-q0xgaZ3ymUM+ZOhe1hdocVSdKHCnJ6llLSXcP+MqMXMyYPUZ3mzQOCxZ3Zkg+QZ7sZ950sn7hvueQrIJZumPZg==", - "dependencies": { - "@grpc/proto-loader": "^0.6.4", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" - }, - "node_modules/@grpc/grpc-js/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@hapi/hoek": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", @@ -1134,60 +1066,6 @@ "win32" ] }, - "node_modules/@newrelic/aws-sdk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@newrelic/aws-sdk/-/aws-sdk-3.1.0.tgz", - "integrity": "sha512-SBFqCz1Hhn2HQvlFCEm2VwfHCGpemeokJ+NH7XphlfQ211OVVANQf49DOQCCS0uhnLHGbKMLmir8Layx57y48A==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "newrelic": ">=6.11.0" - } - }, - "node_modules/@newrelic/koa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-5.0.0.tgz", - "integrity": "sha512-4jzRXnUe38gQkZI8K4tWQ6CNdCNTi5uKILf1dTkyT6LpGxzDSLPwVyJ6xtMSMzr8SjIPG7lyNoWe42q8wFA7jg==", - "dependencies": { - "methods": "^1.1.2" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "newrelic": ">=6.11.0" - } - }, - "node_modules/@newrelic/native-metrics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-6.0.2.tgz", - "integrity": "sha512-MYJnPyR2lJAH0B5yKkHaBL+ui3ZLWViKNCAIXAeMmrNzEC/wlM6Yyl0Ryo6THX3E3Hq3ArXE4uQTXVn7x8ijKQ==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.2", - "semver": "^5.5.1" - }, - "engines": { - "node": ">=10", - "npm": ">=3" - } - }, - "node_modules/@newrelic/superagent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@newrelic/superagent/-/superagent-4.0.0.tgz", - "integrity": "sha512-n4iNrsV0908yHNZPNof7rm/mffclHaIxprCCWk15b4IRJik2VrtuIrK3mboUgNdv5pX4P7EZytY/D6kJgFkDGw==", - "dependencies": { - "methods": "^1.1.2" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "newrelic": ">=6.11.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1304,60 +1182,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, "node_modules/@sideway/address": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", @@ -1722,11 +1546,6 @@ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -1770,12 +1589,6 @@ "follow-redirects": "^1.14.4" } }, - "node_modules/@types/newrelic": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/newrelic/-/newrelic-7.0.3.tgz", - "integrity": "sha512-MAaZYpJ9HEumg8MR4OFNDu8Cy4LnNc89aZ4pqXcBiQyo8SaQVv0sPj2JzzR1rQ/Rk86WL9vLjrDjuEg2vDMimg==", - "dev": true - }, "node_modules/@types/node": { "version": "14.11.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.11.tgz", @@ -1836,15 +1649,6 @@ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", "dev": true }, - "node_modules/@types/statsd-client": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@types/statsd-client/-/statsd-client-0.4.3.tgz", - "integrity": "sha512-MHPv/Y+PXlx3o6ZrWjvjweQTd25UEb8jhvD7Y3FSDsqUhUVsatAcc6MKCHCeBVwY2bufgTJ8X0m6OkCbaWji3Q==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, "node_modules/@types/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", @@ -2158,11 +1962,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "node_modules/@umb-network/toolbox": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/@umb-network/toolbox/-/toolbox-5.10.0.tgz", @@ -2890,7 +2689,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-layout": { "version": "1.2.2", @@ -3481,20 +3281,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -6116,11 +5902,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -6222,11 +6003,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "node_modules/loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -7339,12 +7115,6 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": "2.1.2" } }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, "node_modules/nanoid": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", @@ -7416,60 +7186,6 @@ "node": ">= 0.6" } }, - "node_modules/newrelic": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-7.2.1.tgz", - "integrity": "sha512-m4Uhnf7sKKQ/JcQvHZ+ieMc4teFzHCQnKXsd/AmwFQIIdVkXPdFWIKDzbh2RzH5SY5/SV+7M9p0eDTCdTvHECA==", - "dependencies": { - "@grpc/grpc-js": "^1.2.11", - "@grpc/proto-loader": "^0.5.6", - "@newrelic/aws-sdk": "^3.1.0", - "@newrelic/koa": "^5.0.0", - "@newrelic/superagent": "^4.0.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^3.2.0", - "concat-stream": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^3.6.0", - "semver": "^5.3.0" - }, - "bin": { - "newrelic-naming-rules": "bin/test-naming-rules.js" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=3.0.0" - }, - "optionalDependencies": { - "@newrelic/native-metrics": "^6.0.0" - } - }, - "node_modules/newrelic/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/newrelic/node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "node_modules/newrelic/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/nise": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", @@ -8120,36 +7836,6 @@ "node": ">= 8" } }, - "node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/protobufjs/node_modules/@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -9732,12 +9418,6 @@ "node": ">=0.10.0" } }, - "node_modules/statsd-client": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", - "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -10701,11 +10381,6 @@ "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "node_modules/typescript": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", @@ -11658,57 +11333,6 @@ "@ethersproject/strings": "^5.5.0" } }, - "@grpc/grpc-js": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.3.tgz", - "integrity": "sha512-q0xgaZ3ymUM+ZOhe1hdocVSdKHCnJ6llLSXcP+MqMXMyYPUZ3mzQOCxZ3Zkg+QZ7sZ950sn7hvueQrIJZumPZg==", - "requires": { - "@grpc/proto-loader": "^0.6.4", - "@types/node": ">=12.12.47" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - } - }, - "@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", - "requires": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - } - }, "@hapi/hoek": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", @@ -11815,38 +11439,6 @@ "integrity": "sha512-rIZVR48zA8hGkHIK7ED6+ZiXsjRCcAVBJbm8o89OKAMTmEAQ2QvoOxoiu3w2isAaWwzgtQIOFIqHwvZDyLKCvw==", "optional": true }, - "@newrelic/aws-sdk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@newrelic/aws-sdk/-/aws-sdk-3.1.0.tgz", - "integrity": "sha512-SBFqCz1Hhn2HQvlFCEm2VwfHCGpemeokJ+NH7XphlfQ211OVVANQf49DOQCCS0uhnLHGbKMLmir8Layx57y48A==", - "requires": {} - }, - "@newrelic/koa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-5.0.0.tgz", - "integrity": "sha512-4jzRXnUe38gQkZI8K4tWQ6CNdCNTi5uKILf1dTkyT6LpGxzDSLPwVyJ6xtMSMzr8SjIPG7lyNoWe42q8wFA7jg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@newrelic/native-metrics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-6.0.2.tgz", - "integrity": "sha512-MYJnPyR2lJAH0B5yKkHaBL+ui3ZLWViKNCAIXAeMmrNzEC/wlM6Yyl0Ryo6THX3E3Hq3ArXE4uQTXVn7x8ijKQ==", - "optional": true, - "requires": { - "nan": "^2.14.2", - "semver": "^5.5.1" - } - }, - "@newrelic/superagent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@newrelic/superagent/-/superagent-4.0.0.tgz", - "integrity": "sha512-n4iNrsV0908yHNZPNof7rm/mffclHaIxprCCWk15b4IRJik2VrtuIrK3mboUgNdv5pX4P7EZytY/D6kJgFkDGw==", - "requires": { - "methods": "^1.1.2" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -11946,60 +11538,6 @@ } } }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, "@sideway/address": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", @@ -12323,11 +11861,6 @@ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -12375,12 +11908,6 @@ } } }, - "@types/newrelic": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/newrelic/-/newrelic-7.0.3.tgz", - "integrity": "sha512-MAaZYpJ9HEumg8MR4OFNDu8Cy4LnNc89aZ4pqXcBiQyo8SaQVv0sPj2JzzR1rQ/Rk86WL9vLjrDjuEg2vDMimg==", - "dev": true - }, "@types/node": { "version": "14.11.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.11.tgz", @@ -12443,15 +11970,6 @@ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", "dev": true }, - "@types/statsd-client": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@types/statsd-client/-/statsd-client-0.4.3.tgz", - "integrity": "sha512-MHPv/Y+PXlx3o6ZrWjvjweQTd25UEb8jhvD7Y3FSDsqUhUVsatAcc6MKCHCeBVwY2bufgTJ8X0m6OkCbaWji3Q==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, "@types/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", @@ -12671,11 +12189,6 @@ "eslint-visitor-keys": "^2.0.0" } }, - "@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "@umb-network/toolbox": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/@umb-network/toolbox/-/toolbox-5.10.0.tgz", @@ -13263,7 +12776,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "buffer-layout": { "version": "1.2.2", @@ -13742,17 +13256,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -15778,11 +15281,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -15881,11 +15379,6 @@ "triple-beam": "^1.3.0" } }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -16752,12 +16245,6 @@ "node-gyp-build-optional-packages": "5.0.3" } }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, "nanoid": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", @@ -16810,47 +16297,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "newrelic": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-7.2.1.tgz", - "integrity": "sha512-m4Uhnf7sKKQ/JcQvHZ+ieMc4teFzHCQnKXsd/AmwFQIIdVkXPdFWIKDzbh2RzH5SY5/SV+7M9p0eDTCdTvHECA==", - "requires": { - "@grpc/grpc-js": "^1.2.11", - "@grpc/proto-loader": "^0.5.6", - "@newrelic/aws-sdk": "^3.1.0", - "@newrelic/koa": "^5.0.0", - "@newrelic/native-metrics": "^6.0.0", - "@newrelic/superagent": "^4.0.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^3.2.0", - "concat-stream": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^3.6.0", - "semver": "^5.3.0" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "requires": { - "agent-base": "5", - "debug": "4" - } - } - } - }, "nise": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", @@ -17343,33 +16789,6 @@ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" - } - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -18603,11 +18022,6 @@ } } }, - "statsd-client": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", - "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==" - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -19361,11 +18775,6 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typescript": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", diff --git a/package.json b/package.json index 5cf42bb2..3b2b47fa 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "@types/node": "~14.11.2", "@types/rosie": "^0.0.40", "@types/sinon": "^10.0.2", - "@types/statsd-client": "^0.4.3", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "~8.3.0", @@ -108,7 +107,6 @@ "mongoose": "5.13.12", "reflect-metadata": "~0.1.13", "rimraf": "~3.0.2", - "statsd-client": "~0.4.5", "uuid": "~8.3.0", "uuidv4": "~6.2.4", "winston": "~3.3.3", diff --git a/src/controllers/BlocksController.ts b/src/controllers/BlocksController.ts index 35d9eab4..50c909a6 100644 --- a/src/controllers/BlocksController.ts +++ b/src/controllers/BlocksController.ts @@ -1,5 +1,4 @@ import { inject, injectable, postConstruct } from 'inversify'; -import StatsdClient from 'statsd-client'; import { Request, Response, Router } from 'express'; import { ProjectAuthenticationMiddleware } from '../middleware/ProjectAuthenticationMiddleware'; @@ -10,9 +9,6 @@ import { extractChainId, replyWithLeaves } from './helpers'; @injectable() export class BlocksController { - @inject('StatsdClient') - private statsdClient?: StatsdClient; - @inject(ProjectAuthenticationMiddleware) private projectAuthenticationMiddleware: ProjectAuthenticationMiddleware; @@ -35,9 +31,6 @@ export class BlocksController { } index = async (request: Request, response: Response): Promise => { - await this.statsdClient?.increment('sanctuary.blocks-controller.index', 1, { - projectId: request.params.currentProjectId, - }); const chainId = extractChainId(request); const offset = parseInt(request.query.offset || '0'); const limit = Math.min(parseInt(request.query.limit || '100'), 100); @@ -53,10 +46,6 @@ export class BlocksController { }; show = async (request: Request, response: Response): Promise => { - this.statsdClient?.increment('sanctuary.blocks-controller.show', 1, { - projectId: request.params.currentProjectId, - }); - const chainId = extractChainId(request); const blockId = parseInt(request.params.blockId); const block = await this.blockRepository.findOne({ blockId, chainId }); @@ -69,10 +58,6 @@ export class BlocksController { }; leaves = async (request: Request, response: Response): Promise => { - this.statsdClient?.increment('sanctuary.blocks-controller.leaves', undefined, { - projectId: request.params.currentProjectId, - }); - const chainId = extractChainId(request); const blockId = parseInt(request.params.blockId); const block = await this.blockRepository.findOne({ blockId, chainId }); diff --git a/src/controllers/L2DController.ts b/src/controllers/L2DController.ts index 6235a515..3fddec48 100644 --- a/src/controllers/L2DController.ts +++ b/src/controllers/L2DController.ts @@ -1,5 +1,4 @@ import { inject, injectable, postConstruct } from 'inversify'; -import StatsdClient from 'statsd-client'; import { Request, Response, Router } from 'express'; import { ProjectAuthenticationMiddleware } from '../middleware/ProjectAuthenticationMiddleware'; @@ -10,9 +9,6 @@ import { extractChainId, replyWithLeaves } from './helpers'; @injectable() export class L2DController { - @inject('StatsdClient') - private statsdClient?: StatsdClient; - @inject(ProjectAuthenticationMiddleware) private projectAuthenticationMiddleware: ProjectAuthenticationMiddleware; @@ -37,10 +33,6 @@ export class L2DController { } index = async (request: Request, response: Response): Promise => { - this.statsdClient?.increment('sanctuary.l2d-controller.index', undefined, { - projectId: request.params.currentProjectId, - }); - const chainId = extractChainId(request); const blockId = await this.extractBlockIdOrGetLatestId(request, chainId); diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index e747e4e7..3d825c9f 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -2,7 +2,6 @@ import { inject, injectable, postConstruct } from 'inversify'; import { NextFunction, Request, Response, Router } from 'express'; import { AuthenticationMiddleware } from '../middleware/AuthenticationMiddleware'; import { UserNotFoundError, UserRepository, UserUpdateError } from '../repositories/UserRepository'; -import { MetricsMiddleware } from '../middleware/MetricsMiddleware'; import { Logger } from 'winston'; @injectable() @@ -13,9 +12,6 @@ export class ProfileController { @inject(AuthenticationMiddleware) private authenticationMiddleware!: AuthenticationMiddleware; - @inject(MetricsMiddleware) - private metricsMiddleware!: MetricsMiddleware; - @inject(UserRepository) private userRepository!: UserRepository; @@ -29,8 +25,7 @@ export class ProfileController { .use(this.authenticationMiddleware.apply) .get('/', this.show) .put('/', this.update) - .patch('/', this.update) - .use(this.metricsMiddleware.apply); + .patch('/', this.update); } show = async (req: Request, res: Response, next: NextFunction): Promise => { diff --git a/src/controllers/ProofsController.ts b/src/controllers/ProofsController.ts index f82d77fa..aa848e1b 100644 --- a/src/controllers/ProofsController.ts +++ b/src/controllers/ProofsController.ts @@ -2,16 +2,12 @@ import { inject, injectable, postConstruct } from 'inversify'; import express, { Request, Response, Router } from 'express'; import Leaf from '../models/Leaf'; import { BlockStatus } from '../types/blocks'; -import StatsdClient from 'statsd-client'; import Settings from '../types/Settings'; import { BlockRepository } from '../repositories/BlockRepository'; import { ProjectAuthenticationMiddleware } from '../middleware/ProjectAuthenticationMiddleware'; @injectable() class ProofsController { - @inject('StatsdClient') - private statsdClient?: StatsdClient; - @inject(ProjectAuthenticationMiddleware) private projectAuthenticationMiddleware: ProjectAuthenticationMiddleware; @@ -29,10 +25,6 @@ class ProofsController { } index = async (request: Request, response: Response): Promise => { - this.statsdClient?.increment('sanctuary.proofs-controller.index', undefined, { - projectId: request.params.currentProjectId, - }); - const chainId = this.extractChainId(request); const block = await this.blockRepository.findLatest({ chainId, status: BlockStatus.Finalized }); diff --git a/src/lib/getContainer.ts b/src/lib/getContainer.ts index d668e894..4e9805be 100644 --- a/src/lib/getContainer.ts +++ b/src/lib/getContainer.ts @@ -4,7 +4,6 @@ import settings from '../config/settings'; import { Redis } from 'ioredis'; import buildRedisConnection from '../utils/buildRedisConnection'; import { Logger } from 'winston'; -import StatsdClient from 'statsd-client'; import { Blockchain } from './Blockchain'; import { ProjectAuthUtils } from '../services/ProjectAuthUtils'; import LockRepository from '../repositories/LockRepository'; @@ -12,7 +11,6 @@ import { BlockchainRepository } from '../repositories/BlockchainRepository'; import { ChainContractRepository } from '../repositories/ChainContractRepository'; import { ManagementClient } from 'auth0'; import { initAuth0ManagementClient } from '../config/initAuth0ManagementClient'; -import { getStatsdClient } from './getStatsdClient'; import { getLogger } from './getLogger'; export function getContainer(): Container { @@ -33,11 +31,6 @@ export function getContainer(): Container { .toDynamicValue((ctx) => buildRedisConnection(ctx.container.get('Settings').redis)) .inSingletonScope(); - container - .bind('StatsdClient') - .toDynamicValue(() => getStatsdClient()) - .inSingletonScope(); - container .bind('Auth0ManagementClient') .toDynamicValue((ctx) => initAuth0ManagementClient(ctx.container.get('Settings'))) diff --git a/src/lib/getStatsdClient.ts b/src/lib/getStatsdClient.ts deleted file mode 100644 index 05ce41cd..00000000 --- a/src/lib/getStatsdClient.ts +++ /dev/null @@ -1,17 +0,0 @@ -import SDC from 'statsd-client'; -import StatsdClient from 'statsd-client'; - -export function getStatsdClient(): StatsdClient | undefined { - if (!process.env.STATSD_URL) return; - - const { NEW_RELIC_LABELS = '' } = process.env; - let tags: { [key: string]: string } = {}; - - tags = NEW_RELIC_LABELS.split(';').reduce((nrTags, tag) => { - const t = tag.split(':'); - nrTags[t[0]] = t[1]; - return nrTags; - }, tags); - - return new SDC({ host: process.env.STATSD_URL, tags: tags }); -} diff --git a/src/lib/statsDClient.ts b/src/lib/statsDClient.ts deleted file mode 100644 index c82e7a12..00000000 --- a/src/lib/statsDClient.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable */ -const SDC = require('statsd-client'); -const { NEW_RELIC_LABELS = '' } = process.env; - -let tags: { [key: string]: string } = {}; -tags = NEW_RELIC_LABELS.split(';').reduce((nrTags, tag) => { - const t = tag.split(':'); - nrTags[t[0]] = t[1]; - return nrTags; -}, tags); - -const statsDClient = process.env.STATSD_URL - ? new SDC({ - host: process.env.STATSD_URL, - tags: tags, - }) - : null; - -export default statsDClient; diff --git a/src/middleware/MetricsMiddleware.ts b/src/middleware/MetricsMiddleware.ts deleted file mode 100644 index f6345859..00000000 --- a/src/middleware/MetricsMiddleware.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { inject, injectable } from 'inversify'; -import StatsdClient from 'statsd-client'; -import { Request, Response, NextFunction } from 'express'; - -@injectable() -export class MetricsMiddleware { - @inject('StatsdClient') - private statsdClient?: StatsdClient; - - apply = async (req: Request, res: Response, next: NextFunction): Promise => { - if (!this.statsdClient) return next(); - if (!res.metrics) return next(); - - const { metric, delta } = res.metrics; - let { tags } = res.metrics; - - if (req.project) { - tags ||= {}; - tags = { projectId: req.project.id, ...tags }; - } - - if (delta && tags) { - this.statsdClient?.increment(metric, delta, tags); - } else if (delta) { - this.statsdClient?.increment(metric, delta); - } else if (tags) { - this.statsdClient?.increment(metric, 1, tags); - } else { - this.statsdClient?.increment(metric); - } - - next(); - }; -} diff --git a/src/services/BlockLeafCountReporter.ts b/src/services/BlockLeafCountReporter.ts deleted file mode 100644 index a2f1068e..00000000 --- a/src/services/BlockLeafCountReporter.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { inject, injectable } from 'inversify'; -import Block from '../models/Block'; -import { BlockStatus } from '../types/blocks'; -import Leaf from '../models/Leaf'; -import StatsdClient from 'statsd-client'; - -@injectable() -class BlockLeafCountReporter { - @inject('StatsdClient') statsDClient?: StatsdClient; - - async call(): Promise { - const { blockId } = await Block.findOne({ status: BlockStatus.Finalized }).sort({ blockId: -1 }); - const leaves = await Leaf.find({ blockId }); - - this.statsDClient?.gauge('Layer2DataPairs', leaves.length, { blockId }); - } -} - -export default BlockLeafCountReporter; diff --git a/src/services/BlockMintedReporter.ts b/src/services/BlockMintedReporter.ts deleted file mode 100644 index bcd6ed5b..00000000 --- a/src/services/BlockMintedReporter.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { inject, injectable } from 'inversify'; -import { ChainStatus } from '../types/ChainStatus'; -import { Logger } from 'winston'; -import StatsdClient from 'statsd-client'; -import { ChainContractRepository } from '../repositories/ChainContractRepository'; -import { ForeignChainStatus } from '../types/ForeignChainStatus'; -import { BaseChainContract } from '../contracts/BaseChainContract'; -import { TimeService } from './TimeService'; -import { BlockRepository } from '../repositories/BlockRepository'; -import { BlockStatus } from '../types/blocks'; - -@injectable() -class BlockMintedReporter { - @inject('Logger') logger!: Logger; - @inject('StatsdClient') statsdClient?: StatsdClient; - @inject(ChainContractRepository) chainContractRepository!: ChainContractRepository; - @inject(BlockRepository) blockRepository!: BlockRepository; - - public async call(chainId: string): Promise { - const timestamp = TimeService.now(); - - await Promise.all([ - this.reportContractLastMintedBlockTime(timestamp, chainId), - this.reportMongoLastMintedBlockTime(timestamp, chainId), - ]); - } - - private async reportContractLastMintedBlockTime(timestamp: number, chainId: string): Promise { - let contract: BaseChainContract; - - try { - contract = this.chainContractRepository.get(chainId); - } catch (e) { - this.logger.warn(`[BlockMintedReporter] Failed to get contract at ${chainId}: ${e.message}`); - return; - } - - const { lastDataTimestamp } = await contract.resolveStatus(); - const delta = timestamp - lastDataTimestamp; - this.logger.debug(`[${chainId}] Last minted block time: ${lastDataTimestamp}, block delta time: ${delta}`); - this.statsdClient?.gauge('LastMintedBlockDeltaTime', delta, { chain: chainId }); - } - - private async reportMongoLastMintedBlockTime(timestamp: number, chainId: string): Promise { - let dataTimestamp: Date | number; - try { - ({ dataTimestamp } = await this.blockRepository.findLatest({ - status: BlockStatus.Finalized, - chainId: chainId !== 'bsc' ? chainId : undefined, - })); - dataTimestamp = dataTimestamp.getTime(); - } catch (e) { - this.logger.warn(`[BlockMintedReporter] Failed to get MongoDB block at ${chainId}: ${e.message}`); - return; - } - - const delta = (timestamp * 1000 - dataTimestamp) / 1000; - this.logger.debug(`[${chainId}] Last saved block time: ${dataTimestamp}, saved block delta time: ${delta}`); - this.statsdClient?.gauge('LastSavedBlockDeltaTime', delta, { chain: chainId }); - } -} - -export default BlockMintedReporter; diff --git a/src/workers/MetricsWorker.ts b/src/workers/MetricsWorker.ts index 61c6ead8..193d996b 100644 --- a/src/workers/MetricsWorker.ts +++ b/src/workers/MetricsWorker.ts @@ -2,23 +2,15 @@ import Bull from 'bullmq'; import { Logger } from 'winston'; import { inject, injectable } from 'inversify'; -import BlockMintedReporter from '../services/BlockMintedReporter'; -import BlockLeafCountReporter from '../services/BlockLeafCountReporter'; import BasicWorker from './BasicWorker'; -import { ChainsIds } from '../types/ChainsIds'; @injectable() class MetricsWorker extends BasicWorker { @inject('Logger') logger!: Logger; - @inject(BlockMintedReporter) blockMintedReporter!: BlockMintedReporter; - @inject(BlockLeafCountReporter) blockLeafCountReporter!: BlockLeafCountReporter; apply = async (job: Bull.Job): Promise => { try { - const chains = Object.values(ChainsIds); - await Promise.all(chains.map((chainId) => this.blockMintedReporter.call(chainId))); - await this.blockLeafCountReporter.call(); - + this.logger.debug(`[MetricsWorker] apply for ${job.id}`); } catch (e) { this.logger.error(e); } From 8bafde4c9f5dae4edb91f4caebe0180b60791063 Mon Sep 17 00:00:00 2001 From: DZariusz Date: Wed, 31 Jan 2024 14:39:29 +0100 Subject: [PATCH 4/4] update docker node to v18 --- CHANGELOG.md | 3 +++ Dockerfile | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 521bc9cf..b71b0420 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - in `testBalanceThreshold` support case where `balance` is null/undefined (solana case) +### Updated +- docker node to v18 + ### Removed - remove `newrelic` and `statsd` diff --git a/Dockerfile b/Dockerfile index 6c88acf2..796f5ba3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -FROM node:15-alpine -RUN apk add --no-cache bash python make g++ git +FROM node:18-alpine +RUN apk add --no-cache bash git make g++ python3 RUN adduser -D runner RUN mkdir -p /home/runner/app WORKDIR /home/runner/app