diff --git a/lerna.json b/lerna.json index 9843efe5..840c3689 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "0.2.90", + "version": "0.2.91", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 42aee490..383ea508 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cache", - "version": "0.2.90", + "version": "0.2.91", "description": "Generic object cache", "main": "dist/index.js", "scripts": { diff --git a/packages/cli/package.json b/packages/cli/package.json index f47f13ae..dd58ea49 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cli", - "version": "0.2.90", + "version": "0.2.91", "main": "dist/index.js", "license": "AGPL-3.0", "scripts": { @@ -15,13 +15,13 @@ }, "dependencies": { "@apollo/client": "^3.7.1", - "@cerc-io/cache": "^0.2.90", - "@cerc-io/ipld-eth-client": "^0.2.90", + "@cerc-io/cache": "^0.2.91", + "@cerc-io/ipld-eth-client": "^0.2.91", "@cerc-io/libp2p": "^0.42.2-laconic-0.1.4", "@cerc-io/nitro-node": "^0.1.15", - "@cerc-io/peer": "^0.2.90", - "@cerc-io/rpc-eth-client": "^0.2.90", - "@cerc-io/util": "^0.2.90", + "@cerc-io/peer": "^0.2.91", + "@cerc-io/rpc-eth-client": "^0.2.91", + "@cerc-io/util": "^0.2.91", "@ethersproject/providers": "^5.4.4", "@graphql-tools/utils": "^9.1.1", "@ipld/dag-cbor": "^8.0.0", diff --git a/packages/cli/src/chain-head-exporter.ts b/packages/cli/src/chain-head-exporter.ts index af2c9b90..ea976c0c 100644 --- a/packages/cli/src/chain-head-exporter.ts +++ b/packages/cli/src/chain-head-exporter.ts @@ -13,24 +13,23 @@ const log = debug('laconic:chain-head-exporter'); // Env overrides: // ETH_RPC_ENDPOINT - Ethereum RPC API endpoint // ETH_RPC_API_KEY - Ethereum RPC API endpoint key -// FIL_RPC_ENDPOINT - Filecoin RPC API endpoint // PORT - Metrics server listening port // Defaults const DEFAULT_ETH_RPC_ENDPOINT = 'https://mainnet.infura.io/v3'; -const DEFAULT_FIL_RPC_ENDPOINT = 'https://api.node.glif.io/rpc/v1'; const DEFAULT_PORT = 5000; async function main (): Promise { const app = express(); const metricsRegister = new promClient.Registry(); + const ethRpcBaseUrl = process.env.ETH_RPC_ENDPOINT || DEFAULT_ETH_RPC_ENDPOINT; + const ethRpcApiKey = process.env.ETH_RPC_API_KEY; if (!ethRpcApiKey) { log('WARNING: ETH_RPC_API_KEY not set'); } - const ethRpcBaseUrl = process.env.ETH_RPC_ENDPOINT || DEFAULT_ETH_RPC_ENDPOINT; const ethUrlSuffix = ethRpcApiKey ? `/${ethRpcApiKey}` : ''; const ethRpcUrl = `${ethRpcBaseUrl}${ethUrlSuffix}`; let ethProvider: JsonRpcProvider; @@ -40,14 +39,6 @@ async function main (): Promise { log(`Error creating ETH RPC provider from URL ${ethRpcBaseUrl}`, err); } - const filRpcUrl = process.env.FILECOIN_RPC_ENDPOINT || DEFAULT_FIL_RPC_ENDPOINT; - let filProvider: JsonRpcProvider; - try { - filProvider = new JsonRpcProvider(filRpcUrl); - } catch (err) { - log(`Error creating FIL RPC provider from URL ${filRpcUrl}`, err); - } - // eslint-disable-next-line no-new new promClient.Gauge({ name: 'latest_block_number', @@ -56,16 +47,8 @@ async function main (): Promise { labelNames: ['chain'] as const, async collect () { try { - const [ - latestEthBlockNumber, - latestFilBlockNumber - ] = await Promise.all([ - ethProvider.getBlockNumber(), - filProvider.getBlockNumber() - ]); - - this.set({ chain: 'ethereum' }, latestEthBlockNumber); - this.set({ chain: 'filecoin' }, latestFilBlockNumber); + const latestEthBlockNumber = await ethProvider.getBlockNumber(); + this.set(latestEthBlockNumber); } catch (err) { log('Error fetching latest block number', err); } diff --git a/packages/codegen/package.json b/packages/codegen/package.json index 49886cd2..443c3469 100644 --- a/packages/codegen/package.json +++ b/packages/codegen/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/codegen", - "version": "0.2.90", + "version": "0.2.91", "description": "Code generator", "private": true, "main": "index.js", @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { - "@cerc-io/util": "^0.2.90", + "@cerc-io/util": "^0.2.91", "@graphql-tools/load-files": "^6.5.2", "@npmcli/package-json": "^5.0.0", "@poanet/solidity-flattener": "https://github.com/vulcanize/solidity-flattener.git", diff --git a/packages/codegen/src/templates/package-template.handlebars b/packages/codegen/src/templates/package-template.handlebars index 02520166..06e5a666 100644 --- a/packages/codegen/src/templates/package-template.handlebars +++ b/packages/codegen/src/templates/package-template.handlebars @@ -41,12 +41,12 @@ "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { "@apollo/client": "^3.3.19", - "@cerc-io/cli": "^0.2.90", - "@cerc-io/ipld-eth-client": "^0.2.90", - "@cerc-io/solidity-mapper": "^0.2.90", - "@cerc-io/util": "^0.2.90", + "@cerc-io/cli": "^0.2.91", + "@cerc-io/ipld-eth-client": "^0.2.91", + "@cerc-io/solidity-mapper": "^0.2.91", + "@cerc-io/util": "^0.2.91", {{#if (subgraphPath)}} - "@cerc-io/graph-node": "^0.2.90", + "@cerc-io/graph-node": "^0.2.91", {{/if}} "@ethersproject/providers": "^5.4.4", "debug": "^4.3.1", diff --git a/packages/graph-node/package.json b/packages/graph-node/package.json index 9de491f6..bed1a244 100644 --- a/packages/graph-node/package.json +++ b/packages/graph-node/package.json @@ -1,10 +1,10 @@ { "name": "@cerc-io/graph-node", - "version": "0.2.90", + "version": "0.2.91", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { - "@cerc-io/solidity-mapper": "^0.2.90", + "@cerc-io/solidity-mapper": "^0.2.91", "@ethersproject/providers": "^5.4.4", "@graphprotocol/graph-ts": "^0.22.0", "@nomiclabs/hardhat-ethers": "^2.0.2", @@ -51,9 +51,9 @@ "dependencies": { "@apollo/client": "^3.3.19", "@cerc-io/assemblyscript": "0.19.10-watcher-ts-0.1.2", - "@cerc-io/cache": "^0.2.90", - "@cerc-io/ipld-eth-client": "^0.2.90", - "@cerc-io/util": "^0.2.90", + "@cerc-io/cache": "^0.2.91", + "@cerc-io/ipld-eth-client": "^0.2.91", + "@cerc-io/util": "^0.2.91", "@types/json-diff": "^0.5.2", "@types/yargs": "^17.0.0", "bn.js": "^4.11.9", diff --git a/packages/ipld-eth-client/package.json b/packages/ipld-eth-client/package.json index 706fafca..f339a15b 100644 --- a/packages/ipld-eth-client/package.json +++ b/packages/ipld-eth-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/ipld-eth-client", - "version": "0.2.90", + "version": "0.2.91", "description": "IPLD ETH Client", "main": "dist/index.js", "scripts": { @@ -20,8 +20,8 @@ "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { "@apollo/client": "^3.7.1", - "@cerc-io/cache": "^0.2.90", - "@cerc-io/util": "^0.2.90", + "@cerc-io/cache": "^0.2.91", + "@cerc-io/util": "^0.2.91", "cross-fetch": "^3.1.4", "debug": "^4.3.1", "ethers": "^5.4.4", diff --git a/packages/peer/package.json b/packages/peer/package.json index 63b99fe2..8d653d46 100644 --- a/packages/peer/package.json +++ b/packages/peer/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/peer", - "version": "0.2.90", + "version": "0.2.91", "description": "libp2p module", "main": "dist/index.js", "exports": "./dist/index.js", diff --git a/packages/rpc-eth-client/package.json b/packages/rpc-eth-client/package.json index 3a00422d..ab495b4d 100644 --- a/packages/rpc-eth-client/package.json +++ b/packages/rpc-eth-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/rpc-eth-client", - "version": "0.2.90", + "version": "0.2.91", "description": "RPC ETH Client", "main": "dist/index.js", "scripts": { @@ -19,9 +19,9 @@ }, "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { - "@cerc-io/cache": "^0.2.90", - "@cerc-io/ipld-eth-client": "^0.2.90", - "@cerc-io/util": "^0.2.90", + "@cerc-io/cache": "^0.2.91", + "@cerc-io/ipld-eth-client": "^0.2.91", + "@cerc-io/util": "^0.2.91", "chai": "^4.3.4", "ethers": "^5.4.4", "left-pad": "^1.3.0", diff --git a/packages/solidity-mapper/package.json b/packages/solidity-mapper/package.json index 5c03f1f2..832f4b28 100644 --- a/packages/solidity-mapper/package.json +++ b/packages/solidity-mapper/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/solidity-mapper", - "version": "0.2.90", + "version": "0.2.91", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { diff --git a/packages/test/package.json b/packages/test/package.json index c4dd1ad5..2c34bf35 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/test", - "version": "0.2.90", + "version": "0.2.91", "main": "dist/index.js", "license": "AGPL-3.0", "private": true, diff --git a/packages/tracing-client/package.json b/packages/tracing-client/package.json index acd21f7f..75056f2e 100644 --- a/packages/tracing-client/package.json +++ b/packages/tracing-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/tracing-client", - "version": "0.2.90", + "version": "0.2.91", "description": "ETH VM tracing client", "main": "dist/index.js", "scripts": { diff --git a/packages/util/package.json b/packages/util/package.json index 630062a1..0a24dfa1 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,13 +1,13 @@ { "name": "@cerc-io/util", - "version": "0.2.90", + "version": "0.2.91", "main": "dist/index.js", "license": "AGPL-3.0", "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@cerc-io/nitro-node": "^0.1.15", - "@cerc-io/peer": "^0.2.90", - "@cerc-io/solidity-mapper": "^0.2.90", + "@cerc-io/peer": "^0.2.91", + "@cerc-io/solidity-mapper": "^0.2.91", "@cerc-io/ts-channel": "1.0.3-ts-nitro-0.1.1", "@ethersproject/properties": "^5.7.0", "@ethersproject/providers": "^5.4.4", @@ -52,7 +52,7 @@ "yargs": "^17.0.1" }, "devDependencies": { - "@cerc-io/cache": "^0.2.90", + "@cerc-io/cache": "^0.2.91", "@nomiclabs/hardhat-waffle": "^2.0.1", "@types/bunyan": "^1.8.8", "@types/express": "^4.17.14", diff --git a/packages/util/src/metrics.ts b/packages/util/src/metrics.ts index 6842ca92..7858e364 100644 --- a/packages/util/src/metrics.ts +++ b/packages/util/src/metrics.ts @@ -139,6 +139,8 @@ export const startMetricsServer = async (config: Config, jobQueue: JobQueue, ind await registerUpstreamChainHeadMetrics(config, endpointIndexes.rpcProviderEndpoint); + await registerWatcherInfoMetrics(); + // Collect default metrics client.collectDefaultMetrics(); @@ -153,11 +155,17 @@ export const startMetricsServer = async (config: Config, jobQueue: JobQueue, ind }); }; +// ETH RPC provider used for upstream chain head metrics +let ethRpcProvider: JsonRpcProvider | undefined; + export const setActiveUpstreamEndpointMetric = ({ upstream }: Config, currentEndpointIndex: number): void => { const endpoints = upstream.ethServer.rpcProviderEndpoints; + endpoints.forEach((endpoint, index) => { upstreamEndpointsMetric.set({ provider: endpoint }, Number(index === currentEndpointIndex)); }); + + ethRpcProvider = new JsonRpcProvider(upstream.ethServer.rpcProviderEndpoints[currentEndpointIndex]); }; const registerDBSizeMetrics = async ({ database, jobQueue }: Config): Promise => { @@ -196,7 +204,7 @@ const registerDBSizeMetrics = async ({ database, jobQueue }: Config): Promise => { - const ethRpcProvider = new JsonRpcProvider(upstream.ethServer.rpcProviderEndpoints[rpcProviderEndpointIndex]); + ethRpcProvider = new JsonRpcProvider(upstream.ethServer.rpcProviderEndpoints[rpcProviderEndpointIndex]); // eslint-disable-next-line no-new new client.Gauge({ @@ -204,6 +212,7 @@ const registerUpstreamChainHeadMetrics = async ({ upstream }: Config, rpcProvide help: 'Latest upstream block number', async collect () { try { + assert(ethRpcProvider, 'ethRpcProvider is not set'); const blockNumber = await ethRpcProvider.getBlockNumber(); this.set(blockNumber); } catch (err) { @@ -271,3 +280,13 @@ const registerJobQueueMetrics = async (jobQueue: JobQueue): Promise => { } }); }; + +const registerWatcherInfoMetrics = async (): Promise => { + const watcherInfoMetric = new client.Gauge({ + name: 'watcher_info', + help: 'Watcher info (static)', + labelNames: ['version', 'commitHash'] + }); + + watcherInfoMetric.set({ version: process.env.npm_package_version, commitHash: process.env.npm_package_commitHash }, 1); +};