Skip to content
Snippets Groups Projects
Commit fa9eb441 authored by inso's avatar inso
Browse files

Adding node summary (Issue #133)

parent 50dfd1a4
No related branches found
No related tags found
No related merge requests found
...@@ -141,4 +141,4 @@ class API(object): ...@@ -141,4 +141,4 @@ class API(object):
for leaf in root['leaves'][begin:end]: for leaf in root['leaves'][begin:end]:
yield self.requests_get(path, leaf=leaf).json()['leaf'] yield self.requests_get(path, leaf=leaf).json()['leaf']
from . import network, blockchain, tx, wot from . import network, blockchain, tx, wot, node
...@@ -36,7 +36,7 @@ class Node(QObject): ...@@ -36,7 +36,7 @@ class Node(QObject):
changed = pyqtSignal() changed = pyqtSignal()
def __init__(self, currency, endpoints, uid, pubkey, block, def __init__(self, currency, endpoints, uid, pubkey, block,
state, last_change): state, last_change, software, version):
''' '''
Constructor Constructor
''' '''
...@@ -44,6 +44,8 @@ class Node(QObject): ...@@ -44,6 +44,8 @@ class Node(QObject):
self._endpoints = endpoints self._endpoints = endpoints
self._uid = uid self._uid = uid
self._pubkey = pubkey self._pubkey = pubkey
self._software = software
self._version = version
self.block = block self.block = block
self._state = state self._state = state
self._neighbours = [] self._neighbours = []
...@@ -70,7 +72,7 @@ class Node(QObject): ...@@ -70,7 +72,7 @@ class Node(QObject):
raise InvalidNodeCurrency(peer.currency, currency) raise InvalidNodeCurrency(peer.currency, currency)
node = cls(peer.currency, peer.endpoints, "", peer.pubkey, 0, 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))) logging.debug("Node from address : {:}".format(str(node)))
return node return node
...@@ -88,7 +90,7 @@ class Node(QObject): ...@@ -88,7 +90,7 @@ class Node(QObject):
raise InvalidNodeCurrency(peer.currency, currency) raise InvalidNodeCurrency(peer.currency, currency)
node = cls(peer.currency, peer.endpoints, "", "", 0, node = cls(peer.currency, peer.endpoints, "", "", 0,
Node.ONLINE, time.time()) Node.ONLINE, time.time(), "", "")
logging.debug("Node from peer : {:}".format(str(node))) logging.debug("Node from peer : {:}".format(str(node)))
return node return node
...@@ -100,6 +102,8 @@ class Node(QObject): ...@@ -100,6 +102,8 @@ class Node(QObject):
block = 0 block = 0
last_change = time.time() last_change = time.time()
state = Node.ONLINE state = Node.ONLINE
software = ''
version = ''
logging.debug(data) logging.debug(data)
for endpoint_data in data['endpoints']: for endpoint_data in data['endpoints']:
endpoints.append(Endpoint.from_inline(endpoint_data)) endpoints.append(Endpoint.from_inline(endpoint_data))
...@@ -124,8 +128,18 @@ class Node(QObject): ...@@ -124,8 +128,18 @@ class Node(QObject):
else: else:
logging.debug("Error : no state in node") 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, node = cls(currency, endpoints, uid, pubkey, block,
state, last_change) state, last_change, software, version)
logging.debug("Node from json : {:}".format(str(node))) logging.debug("Node from json : {:}".format(str(node)))
return node return node
...@@ -147,7 +161,9 @@ class Node(QObject): ...@@ -147,7 +161,9 @@ class Node(QObject):
'currency': self._currency, 'currency': self._currency,
'state': self._state, 'state': self._state,
'last_change': self._last_change, 'last_change': self._last_change,
'block': self.block} 'block': self.block,
'software': self.software,
'version': self.version}
endpoints = [] endpoints = []
for e in self._endpoints: for e in self._endpoints:
endpoints.append(e.inline()) endpoints.append(e.inline())
...@@ -166,6 +182,14 @@ class Node(QObject): ...@@ -166,6 +182,14 @@ class Node(QObject):
def block(self): def block(self):
return self._block return self._block
@property
def version(self):
return self._version
@property
def software(self):
return self._software
@block.setter @block.setter
def block(self, new_block): def block(self, new_block):
self._block = new_block self._block = new_block
...@@ -253,6 +277,10 @@ class Node(QObject): ...@@ -253,6 +277,10 @@ class Node(QObject):
node_currency = informations["currency"] node_currency = informations["currency"]
node_uid = self._request_uid() 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 the nodes goes back online...
if self.state in (Node.OFFLINE, Node.CORRUPTED): if self.state in (Node.OFFLINE, Node.CORRUPTED):
self.state = Node.ONLINE self.state = Node.ONLINE
...@@ -309,6 +337,16 @@ class Node(QObject): ...@@ -309,6 +337,16 @@ class Node(QObject):
self._uid = node_uid self._uid = node_uid
emit_change = True 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) logging.debug(neighbours)
new_inlines = [e.inline() for n in neighbours for e in n] 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] last_inlines = [e.inline() for n in self._neighbours for e in n]
......
...@@ -41,7 +41,9 @@ class NetworkFilterProxyModel(QSortFilterProxyModel): ...@@ -41,7 +41,9 @@ class NetworkFilterProxyModel(QSortFilterProxyModel):
'current_block': self.tr('Block'), 'current_block': self.tr('Block'),
'uid': self.tr('UID'), 'uid': self.tr('UID'),
'is_member': self.tr('Member'), '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) _type = self.sourceModel().headerData(section, orientation, role)
return header_names[_type] return header_names[_type]
...@@ -92,6 +94,8 @@ class NetworkTableModel(QAbstractTableModel): ...@@ -92,6 +94,8 @@ class NetworkTableModel(QAbstractTableModel):
'uid', 'uid',
'is_member', 'is_member',
'pubkey', 'pubkey',
'software',
'version',
'is_root' 'is_root'
) )
self.node_colors = { self.node_colors = {
...@@ -147,7 +151,7 @@ class NetworkTableModel(QAbstractTableModel): ...@@ -147,7 +151,7 @@ class NetworkTableModel(QAbstractTableModel):
is_root = self.community.network.is_root_node(node) is_root = self.community.network.is_root_node(node)
return (address, port, node.block, node.uid, 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): def data(self, index, role):
row = index.row() row = index.row()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment