Skip to content

Commit

Permalink
feat: 🎸 allow for not collecting block information
Browse files Browse the repository at this point in the history
Now honoring the configuration to disable block watcher, effectively not
monitoring chain data (blocks, tx, event logs). This is useful when
using ethlogger to monitor multiple nodes to gather node information,
but only capture chain data from one of the nodes.
  • Loading branch information
ziegfried committed Jan 9, 2020
1 parent 266359f commit 1e44dd5
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 18 deletions.
7 changes: 6 additions & 1 deletion src/cliflags.ts
Expand Up @@ -33,21 +33,26 @@ export const CLI_FLAGS = {

'collect-blocks': flags.boolean({
allowNo: true,
env: 'COLLECT_BLOCKS',
description:
'Enables ethereum block watcher (enabled by default unless specified otherwise in the config file)',
'Enables ethereum block watcher, ingesting blocks, transactions, event logs ' +
'and ABI-decoded information from method calls and event logs',
}),
'collect-node-metrics': flags.boolean({
allowNo: true,
env: 'COLLECT_NODE_METRICS',
description:
'Enables collection of node metrics (enabled by default unless specified otherwise in the config file)',
}),
'collect-node-info': flags.boolean({
allowNo: true,
env: 'COLLECT_NODE_INFO',
description:
'Enables collection of node info events (enabled by default unless specified otherwise in the config file)',
}),
'collect-internal-metrics': flags.boolean({
allowNo: true,
env: 'COLLECT_INTERNAL_METRICS',
description:
'Enables collection of ethlogger-internal metrics (enabled by default unless specified otherwise in the config file)',
}),
Expand Down
19 changes: 16 additions & 3 deletions src/config.ts
Expand Up @@ -708,7 +708,11 @@ export async function loadEthloggerConfig(flags: CliFlags, dryRun: boolean = fal
fingerprintContracts: defaults.abi?.fingerprintContracts ?? true,
},
blockWatcher: {
enabled: flags['collect-blocks'] ?? defaults.blockWatcher?.enabled ?? true,
enabled:
flags['collect-blocks'] ??
parseBooleanEnvVar(CLI_FLAGS['collect-blocks'].env) ??
defaults.blockWatcher?.enabled ??
true,
blocksMaxChunkSize: defaults.blockWatcher?.blocksMaxChunkSize ?? 25,
pollInterval: parseDuration(defaults.blockWatcher?.pollInterval) ?? 500,
startAt: parseStartAt(flags['start-at-block'] ?? defaults.blockWatcher?.startAt) ?? 'genesis',
Expand All @@ -724,6 +728,7 @@ export async function loadEthloggerConfig(flags: CliFlags, dryRun: boolean = fal
internalMetrics: {
enabled:
flags['collect-internal-metrics'] ??
parseBooleanEnvVar(CLI_FLAGS['collect-internal-metrics'].env) ??
defaults.internalMetrics?.enabled ??
(() => {
if (
Expand All @@ -742,12 +747,20 @@ export async function loadEthloggerConfig(flags: CliFlags, dryRun: boolean = fal
collectInterval: parseDuration(defaults.internalMetrics?.collectInterval) ?? 1000,
},
nodeInfo: {
enabled: flags['collect-node-info'] ?? defaults.nodeInfo?.enabled ?? true,
enabled:
flags['collect-node-info'] ??
parseBooleanEnvVar(CLI_FLAGS['collect-node-info'].env) ??
defaults.nodeInfo?.enabled ??
true,
collectInterval: parseDuration(defaults.nodeInfo?.collectInterval) ?? 60000,
retryWaitTime: waitTimeFromConfig(defaults.nodeInfo?.retryWaitTime) ?? 60000,
},
nodeMetrics: {
enabled: flags['collect-node-metrics'] ?? defaults.nodeMetrics?.enabled ?? true,
enabled:
flags['collect-node-metrics'] ??
parseBooleanEnvVar(CLI_FLAGS['collect-node-metrics'].env) ??
defaults.nodeMetrics?.enabled ??
true,
collectInterval: parseDuration(defaults.nodeMetrics?.collectInterval) ?? 60000,
retryWaitTime: waitTimeFromConfig(defaults.nodeMetrics?.retryWaitTime) ?? 60000,
},
Expand Down
34 changes: 20 additions & 14 deletions src/index.ts
Expand Up @@ -155,24 +155,30 @@ class Ethlogger extends Command {
addResource(nodeStatsCollector);
internalStatsCollector.addSource(nodeStatsCollector, 'nodeStatsCollector');

const blockWatcher = new BlockWatcher({
checkpoints,
ethClient: client,
output,
abiRepo: abiRepo,
startAt: config.blockWatcher.startAt,
contractInfoCache,
chunkSize: config.blockWatcher.blocksMaxChunkSize,
pollInterval: config.blockWatcher.pollInterval,
});
addResource(blockWatcher);
internalStatsCollector.addSource(blockWatcher, 'blockWatcher');
let blockWatcher: BlockWatcher | null = null;

if (config.blockWatcher.enabled) {
blockWatcher = new BlockWatcher({
checkpoints,
ethClient: client,
output,
abiRepo: abiRepo,
startAt: config.blockWatcher.startAt,
contractInfoCache,
chunkSize: config.blockWatcher.blocksMaxChunkSize,
pollInterval: config.blockWatcher.pollInterval,
});
addResource(blockWatcher);
internalStatsCollector.addSource(blockWatcher, 'blockWatcher');
} else {
debug('Block watcher is disabled');
}

internalStatsCollector.start();

return Promise.all(
[blockWatcher.start(), nodeStatsCollector.start()].map(p =>
p.catch(e => {
[blockWatcher?.start(), nodeStatsCollector.start()].map(p =>
p?.catch(e => {
if (e !== ABORT) {
error('Error in ethlogger task:', e);
return Promise.reject(e);
Expand Down

0 comments on commit 1e44dd5

Please sign in to comment.