Implement keep-alive flag

This commit is contained in:
lash 2022-03-08 17:11:15 +00:00
parent efc8878da4
commit a7218e9601
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
3 changed files with 31 additions and 14 deletions

View File

@ -1,3 +1,5 @@
- 0.2.1
* Implement --keep-alive flag
- 0.2.0 - 0.2.0
* Dependency upgrades * Dependency upgrades
- 0.1.0 - 0.1.0

View File

@ -105,6 +105,7 @@ config.add(args.offset, '_SYNC_OFFSET', True)
config.add(args.skip_history, '_NO_HISTORY', True) config.add(args.skip_history, '_NO_HISTORY', True)
config.add(args.single, '_SINGLE', True) config.add(args.single, '_SINGLE', True)
config.add(args.head, '_HEAD', True) config.add(args.head, '_HEAD', True)
config.add(args.keep_alive, '_KEEP_ALIVE', True)
override(config, 'renderer', env=os.environ, args=args) override(config, 'renderer', env=os.environ, args=args)
override(config, 'filter', env=os.environ, args=args) override(config, 'filter', env=os.environ, args=args)
logg.debug('loaded config:\n{}'.format(config)) logg.debug('loaded config:\n{}'.format(config))
@ -237,7 +238,7 @@ def setup_cache_filter(rules_filter=None):
return CacheFilter(rules_filter=rules_filter) return CacheFilter(rules_filter=rules_filter)
def setup_backend_resume(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False): def setup_backend_resume(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False, keep_alive=False):
syncers = [] syncers = []
syncer_backends = FileBackend.resume(chain_spec, block_offset, base_dir=state_dir) syncer_backends = FileBackend.resume(chain_spec, block_offset, base_dir=state_dir)
if len(syncer_backends) == 0: if len(syncer_backends) == 0:
@ -258,42 +259,55 @@ def setup_backend_resume(chain_spec, block_offset, block_limit, state_dir, callb
syncers.append(HistorySyncer(syncer_backend, chain_interface, block_callback=callback)) #RuledFilter.block_callback)) syncers.append(HistorySyncer(syncer_backend, chain_interface, block_callback=callback)) #RuledFilter.block_callback))
syncer_backend = FileBackend.live(chain_spec, block_offset+1, base_dir=state_dir) syncer_backend = FileBackend.live(chain_spec, block_offset+1, base_dir=state_dir)
syncers.append(HeadSyncer(syncer_backend, chain_interface, block_callback=callback))
if len(syncers) == 0 or keep_alive:
head_syncer_backend = FileBackend.live(chain_spec, block_offset, base_dir=state_dir)
syncers.append(HeadSyncer(head_syncer_backend, chain_interface, block_callback=callback))
return syncers return syncers
def setup_backend_single(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False): def setup_backend_single(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False, keep_alive=False):
logg.debug('block limit {}'.format(block_limit)) logg.info('block limit {} offset {} syncoffset {}'.format(block_limit, block_offset, sync_offset))
syncer_backend = FileBackend.initial(chain_spec, block_limit, start_block_height=sync_offset, base_dir=state_dir) syncer_backend = FileBackend.initial(chain_spec, block_limit, start_block_height=sync_offset, base_dir=state_dir)
syncers = []
syncer = HistorySyncer(syncer_backend, chain_interface, block_callback=callback) syncer = HistorySyncer(syncer_backend, chain_interface, block_callback=callback)
return [syncer] syncers.append(syncer)
if keep_alive:
logg.info('i have keep alive')
head_syncer_backend = FileBackend.live(chain_spec, block_offset, base_dir=state_dir)
syncers.append(HeadSyncer(head_syncer_backend, chain_interface, block_callback=callback))
return syncers
def setup_backend_head(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False): def setup_backend_head(chain_spec, block_offset, block_limit, state_dir, callback, chain_interface, sync_offset=0, skip_history=False, keep_alive=True):
syncer_backend = FileBackend.live(chain_spec, block_offset, base_dir=state_dir) syncer_backend = FileBackend.live(chain_spec, block_offset, base_dir=state_dir)
syncer = HeadSyncer(syncer_backend, chain_interface, block_callback=callback) syncer = HeadSyncer(syncer_backend, chain_interface, block_callback=callback)
return [syncer] return [syncer]
def main(): def main():
keep_alive = False
session_block_offset = 0 session_block_offset = 0
if args.head: if args.head:
session_block_offset = -1 session_block_offset = -1
keep_alive = True
else: else:
session_block_offset = args.offset session_block_offset = args.offset
o = block_latest()
r = rpc.do(o)
block_offset = int(strip_0x(r), 16) + 1
logg.info('network block height is {}'.format(block_offset))
block_limit = 0 block_limit = 0
if args.until > 0: if args.until > 0:
if not args.head and args.until <= block_offset: if not args.head and args.until <= block_offset:
raise ValueError('sync termination block number must be later than offset ({} >= {})'.format(block_offset, args.until)) raise ValueError('sync termination block number must be later than offset ({} >= {})'.format(block_offset, args.until))
block_limit = args.until block_limit = args.until
elif config.true('_KEEP_ALIVE'):
keep_alive=True
block_limit = block_offset
o = block_latest()
r = rpc.do(o)
block_offset = int(strip_0x(r), 16) + 1
logg.info('network block height is {}'.format(block_offset))
if session_block_offset == -1: if session_block_offset == -1:
session_block_offset = block_offset session_block_offset = block_offset
@ -357,6 +371,7 @@ def main():
chain_interface, chain_interface,
sync_offset=config.get('_SYNC_OFFSET'), sync_offset=config.get('_SYNC_OFFSET'),
skip_history=config.true('_NO_HISTORY'), skip_history=config.true('_NO_HISTORY'),
keep_alive=keep_alive,
) )
out_filter = OutFilter(chain_spec, rules_filter=address_rules, renderers=renderers_mods) out_filter = OutFilter(chain_spec, rules_filter=address_rules, renderers=renderers_mods)

View File

@ -1,6 +1,6 @@
[metadata] [metadata]
name = eth-monitor name = eth-monitor
version = 0.2.0 version = 0.2.1
description = Monitor and cache transactions using match filters description = Monitor and cache transactions using match filters
author = Louis Holbrook author = Louis Holbrook
author_email = dev@holbrook.no author_email = dev@holbrook.no