From 1b8881800d30f8f1ccd7f755cc4134d0882ee132 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 13 Nov 2016 23:33:42 +0900 Subject: [PATCH 1/2] Move the RPC handlers to the manager --- server/protocol.py | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/server/protocol.py b/server/protocol.py index e77b045..36528b2 100644 --- a/server/protocol.py +++ b/server/protocol.py @@ -158,20 +158,21 @@ class ServerManager(LoggedClass): def session_count(self): return len(self.sessions) - def info(self): - '''Returned in the RPC 'getinfo' call.''' - address_count = sum(len(session.hash168s) - for session in self.sessions - if isinstance(session, ElectrumX)) + def address_count(self): + return sum(len(session.hash168s) for session in self.sessions + if isinstance(session, ElectrumX)) + + async def rpc_getinfo(self, params): + '''The RPC 'getinfo' call.''' return { 'blocks': self.bp.height, - 'peers': len(self.irc_peers()), + 'peers': len(self.irc.peers), 'sessions': self.session_count(), - 'watched': address_count, + 'watched': self.address_count(), 'cached': 0, } - def sessions_info(self): + async def rpc_sessions(self, params): '''Returned to the RPC 'sessions' call.''' now = time.time() return [(session.kind, @@ -184,6 +185,15 @@ class ServerManager(LoggedClass): now - session.start) for session in self.sessions] + async def rpc_numsessions(self, params): + return self.session_count() + + async def rpc_peers(self, params): + return self.irc.peers + + async def rpc_numpeers(self, params): + return len(self.irc.peers) + class Session(JSONRPC): '''Base class of ElectrumX JSON session protocols.''' @@ -572,19 +582,5 @@ class LocalRPC(Session): def __init__(self, *args): super().__init__(*args) cmds = 'getinfo sessions numsessions peers numpeers'.split() - self.handlers = {cmd: getattr(self, cmd) for cmd in cmds} - - async def getinfo(self, params): - return self.manager.info() - - async def sessions(self, params): - return self.manager.sessions_info() - - async def numsessions(self, params): - return self.manager.session_count() - - async def peers(self, params): - return self.manager.irc_peers() - - async def numpeers(self, params): - return len(self.manager.irc_peers()) + self.handlers = {cmd: getattr(self.manager, 'rpc_{}'.format(cmd)) + for cmd in cmds} From 12ed9f7069c3d059e564699b0740655b5f3f1d7d Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Mon, 14 Nov 2016 08:01:00 +0900 Subject: [PATCH 2/2] Have session_count return a dictionary --- server/protocol.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/protocol.py b/server/protocol.py index 36528b2..4936604 100644 --- a/server/protocol.py +++ b/server/protocol.py @@ -156,7 +156,10 @@ class ServerManager(LoggedClass): return self.irc.peers def session_count(self): - return len(self.sessions) + '''Returns a dictionary.''' + active = len(s for s in self.sessions if s.send_count) + total = len(self.sessions) + return {'active': active, 'inert': total - active, 'total': total} def address_count(self): return sum(len(session.hash168s) for session in self.sessions