From cb7b7dd1fe5400a47a04ddb8bb808b9575747768 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sat, 12 Nov 2016 21:29:57 +0900 Subject: [PATCH] Move pretty printing of sessions to client Tweak logging --- electrumx_rpc.py | 25 +++++++++++++++++++------ server/daemon.py | 2 +- server/protocol.py | 12 +++--------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/electrumx_rpc.py b/electrumx_rpc.py index 03e25c1..0e008f3 100755 --- a/electrumx_rpc.py +++ b/electrumx_rpc.py @@ -13,6 +13,7 @@ import argparse import asyncio import json +import pprint from functools import partial from os import environ @@ -21,6 +22,7 @@ class RPCClient(asyncio.Protocol): def __init__(self, loop): self.loop = loop + self.method = None def connection_made(self, transport): self.transport = transport @@ -28,15 +30,28 @@ class RPCClient(asyncio.Protocol): def connection_lost(self, exc): self.loop.stop() - def send(self, payload): + def send(self, method, params): + self.method = method + payload = {'method': method, 'params': params} data = json.dumps(payload) + '\n' self.transport.write(data.encode()) def data_received(self, data): payload = json.loads(data.decode()) self.transport.close() - print(json.dumps(payload, indent=4, sort_keys=True)) - + result = payload['result'] + error = payload['error'] + if error: + print("ERROR: {}".format(error)) + else: + if self.method == 'sessions': + fmt = '{:<4} {:>23} {:>7} {:>15} {:>7}' + print(fmt.format('Type', 'Peer', 'Subs', 'Client', 'Time')) + for kind, peer, subs, client, time in result: + print(fmt.format(kind, peer, '{:,d}'.format(subs) + client, '{:,d}'.format(int(time))) + else: + pprint.pprint(result, indent=4) def main(): '''Send the RPC command to the server and print the result.''' @@ -52,14 +67,12 @@ def main(): if args.port is None: args.port = int(environ.get('ELECTRUMX_RPC_PORT', 8000)) - payload = {'method': args.command[0], 'params': args.param} - loop = asyncio.get_event_loop() proto_factory = partial(RPCClient, loop) coro = loop.create_connection(proto_factory, 'localhost', args.port) try: transport, protocol = loop.run_until_complete(coro) - protocol.send(payload) + protocol.send(args.command[0], args.param) loop.run_forever() except OSError: print('error connecting - is ElectrumX catching up or not running?') diff --git a/server/daemon.py b/server/daemon.py index a5e006e..241b85e 100644 --- a/server/daemon.py +++ b/server/daemon.py @@ -31,7 +31,7 @@ class Daemon(util.LoggedClass): super().__init__() self.url = url self._height = None - self.logger.info('connecting to daemon at URL {}'.format(url)) + self.logger.info('connecting at URL {}'.format(url)) self.debug_caught_up = 'caught_up' in debug # Limit concurrent RPC calls to this number. # See DEFAULT_HTTP_WORKQUEUE in bitcoind, which is typically 16 diff --git a/server/protocol.py b/server/protocol.py index 28aa07f..9c2c6ad 100644 --- a/server/protocol.py +++ b/server/protocol.py @@ -632,15 +632,9 @@ class LocalRPC(JSONRPC): async def sessions(self, params): now = time.time() - fmt = '{:<4} {:>21} {:>7} {:>12} {:>7}' - result = [] - result.append(fmt.format('Type', 'Peer', 'Subs', 'Client', 'Time')) - for session in self.SESSION_MGR.sessions: - result.append(fmt.format(session.kind, session.peername, - '{:,d}'.format(len(session.hash168s)), - session.client, - '{:,d}'.format(int(now - session.start)))) - return result + return [(session.kind, session.peername, len(session.hash168s), + session.client, now - session.start) + for session in self.SESSION_MGR.sessions] async def numsessions(self, params): return len(self.SESSION_MGR.sessions)