From fa9eb44161d0a71c51580895d183853b291248e6 Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Mon, 25 May 2015 08:30:56 +0200 Subject: [PATCH] Adding node summary (Issue #133) --- lib/ucoinpy/api/bma/__init__.py | 2 +- src/cutecoin/core/net/node.py | 48 +++++++++++++++++++++++++++++---- src/cutecoin/models/network.py | 8 ++++-- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/lib/ucoinpy/api/bma/__init__.py b/lib/ucoinpy/api/bma/__init__.py index 768bd447..d126a82a 100644 --- a/lib/ucoinpy/api/bma/__init__.py +++ b/lib/ucoinpy/api/bma/__init__.py @@ -141,4 +141,4 @@ class API(object): for leaf in root['leaves'][begin:end]: yield self.requests_get(path, leaf=leaf).json()['leaf'] -from . import network, blockchain, tx, wot +from . import network, blockchain, tx, wot, node diff --git a/src/cutecoin/core/net/node.py b/src/cutecoin/core/net/node.py index 699edf04..1f8186eb 100644 --- a/src/cutecoin/core/net/node.py +++ b/src/cutecoin/core/net/node.py @@ -36,7 +36,7 @@ class Node(QObject): changed = pyqtSignal() def __init__(self, currency, endpoints, uid, pubkey, block, - state, last_change): + state, last_change, software, version): ''' Constructor ''' @@ -44,6 +44,8 @@ class Node(QObject): self._endpoints = endpoints self._uid = uid self._pubkey = pubkey + self._software = software + self._version = version self.block = block self._state = state self._neighbours = [] @@ -70,7 +72,7 @@ class Node(QObject): raise InvalidNodeCurrency(peer.currency, currency) node = cls(peer.currency, peer.endpoints, "", peer.pubkey, 0, - Node.ONLINE, time.time()) + Node.ONLINE, time.time(), "", "") logging.debug("Node from address : {:}".format(str(node))) return node @@ -88,7 +90,7 @@ class Node(QObject): raise InvalidNodeCurrency(peer.currency, currency) node = cls(peer.currency, peer.endpoints, "", "", 0, - Node.ONLINE, time.time()) + Node.ONLINE, time.time(), "", "") logging.debug("Node from peer : {:}".format(str(node))) return node @@ -100,6 +102,8 @@ class Node(QObject): block = 0 last_change = time.time() state = Node.ONLINE + software = '' + version = '' logging.debug(data) for endpoint_data in data['endpoints']: endpoints.append(Endpoint.from_inline(endpoint_data)) @@ -124,8 +128,18 @@ class Node(QObject): else: logging.debug("Error : no state in node") + if 'software' in data: + software = data['software'] + else: + logging.debug("Error : no software in node") + + if 'version' in data: + version = data['version'] + else: + logging.debug("Error : no version in node") + node = cls(currency, endpoints, uid, pubkey, block, - state, last_change) + state, last_change, software, version) logging.debug("Node from json : {:}".format(str(node))) return node @@ -147,7 +161,9 @@ class Node(QObject): 'currency': self._currency, 'state': self._state, 'last_change': self._last_change, - 'block': self.block} + 'block': self.block, + 'software': self.software, + 'version': self.version} endpoints = [] for e in self._endpoints: endpoints.append(e.inline()) @@ -166,6 +182,14 @@ class Node(QObject): def block(self): return self._block + @property + def version(self): + return self._version + + @property + def software(self): + return self._software + @block.setter def block(self, new_block): self._block = new_block @@ -253,6 +277,10 @@ class Node(QObject): node_currency = informations["currency"] node_uid = self._request_uid() + implementation = bma.node.Summary(self.endpoint.conn_handler()).get() + software = implementation["ucoin"]["software"] + version = implementation["ucoin"]["version"] + #If the nodes goes back online... if self.state in (Node.OFFLINE, Node.CORRUPTED): self.state = Node.ONLINE @@ -309,6 +337,16 @@ class Node(QObject): self._uid = node_uid emit_change = True + if software != self._software: + logging.debug("Change : new software") + self._software = software + emit_change = True + + if version != self._version: + logging.debug("Change : new version") + self._version = version + emit_change = True + logging.debug(neighbours) new_inlines = [e.inline() for n in neighbours for e in n] last_inlines = [e.inline() for n in self._neighbours for e in n] diff --git a/src/cutecoin/models/network.py b/src/cutecoin/models/network.py index bb10397b..50ee9b39 100644 --- a/src/cutecoin/models/network.py +++ b/src/cutecoin/models/network.py @@ -41,7 +41,9 @@ class NetworkFilterProxyModel(QSortFilterProxyModel): 'current_block': self.tr('Block'), 'uid': self.tr('UID'), 'is_member': self.tr('Member'), - 'pubkey': self.tr('Pubkey') + 'pubkey': self.tr('Pubkey'), + 'software': self.tr('Software'), + 'version': self.tr('Version') } _type = self.sourceModel().headerData(section, orientation, role) return header_names[_type] @@ -92,6 +94,8 @@ class NetworkTableModel(QAbstractTableModel): 'uid', 'is_member', 'pubkey', + 'software', + 'version', 'is_root' ) self.node_colors = { @@ -147,7 +151,7 @@ class NetworkTableModel(QAbstractTableModel): is_root = self.community.network.is_root_node(node) return (address, port, node.block, node.uid, - is_member, node.pubkey, is_root) + is_member, node.pubkey, node.software, node.version, is_root) def data(self, index, role): row = index.row() -- GitLab