Browse Source

Improve electrumx_rpc error handling

patch-2
Neil Booth 7 years ago
parent
commit
c9f97d98e0
  1. 43
      electrumx_rpc

43
electrumx_rpc

@ -10,7 +10,7 @@
'''Script to send RPC commands to a running ElectrumX server.'''
from aiorpcx import timeout_after
from aiorpcx import timeout_after, ClientSession, TaskTimeout
import argparse
import asyncio
import json
@ -18,7 +18,6 @@ from os import environ
import electrumx.lib.text as text
from aiorpcx import ClientSession
simple_commands = {
'getinfo': 'Print a summary of server state',
@ -113,27 +112,29 @@ def main():
# aiorpcX makes this so easy...
async def send_request():
async with timeout_after(15):
async with ClientSession('localhost', port) as session:
result = await session.send_request(method, args)
if method in ('query', ):
for line in result:
print(line)
elif method in ('groups', 'peers', 'sessions'):
lines_func = getattr(text, f'{method}_lines')
for line in lines_func(result):
print(line)
else:
print(json.dumps(result, indent=4, sort_keys=True))
try:
async with timeout_after(1):
async with ClientSession('localhost', port) as session:
result = await session.send_request(method, args)
if method in ('query', ):
for line in result:
print(line)
elif method in ('groups', 'peers', 'sessions'):
lines_func = getattr(text, f'{method}_lines')
for line in lines_func(result):
print(line)
else:
print(json.dumps(result, indent=4, sort_keys=True))
except OSError:
print('cannot connect - is ElectrumX catching up, not running, or '
f'is {port} the wrong RPC port?')
except TaskTimeout as e:
print(f'request timed out after {e.args[0]}s')
except Exception as e:
print(f'error making request: {e!r}')
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(send_request())
except OSError:
print('cannot connect - is ElectrumX catching up, not running, or '
f'is {port} the wrong RPC port?')
except Exception as e:
print(f'error making request: {e}')
loop.run_until_complete(send_request())
if __name__ == '__main__':

Loading…
Cancel
Save