Include Fleet state nicknames and icon in ursula console status; Include state icon property

pull/562/head
Kieran Prasch 2018-11-14 21:08:15 -08:00
parent f5a50d7a97
commit 4c428065b7
No known key found for this signature in database
GPG Key ID: 199AB839D4125A62
2 changed files with 25 additions and 35 deletions

View File

@ -91,23 +91,24 @@ class UrsulaCommandProtocol(LineReceiver):
else:
learning_status = "Unknown"
if self.ursula._current_teacher_node:
teacher = 'Current Teacher ..... {}'.format(self.ursula._current_teacher_node)
else:
teacher = 'Current Teacher ..... No Teacher Connection'
stats = ['⇀URSULA {}'.format(self.ursula.nickname_icon),
'{}'.format(self.ursula),
'Uptime ............ {}'.format(maya.now() - self.start_time),
'Start Time ........ {}'.format(self.start_time.slang_time()),
'Fleet State ....... {}'.format(self.ursula.known_nodes.checksum[:7]),
'Learning Status ... {}'.format(learning_status),
'Learning Round .... Round #{}'.format(self.ursula._learning_round),
'Operating Mode .... {}'.format('Federated' if self.ursula.federated_only else 'Decentralized'),
'Rest Interface .... {}'.format(self.ursula.rest_url()),
'Node Storage Type . {}'.format(self.ursula.node_storage._name.capitalize()),
'Known Nodes ....... {}'.format(len(self.ursula.known_nodes)),
'Work Orders ....... {}'.format(len(self.ursula._work_orders))]
if self.ursula._current_teacher_node:
teacher = 'Current Teacher: {}: ({})'.format(self.ursula._current_teacher_node,
self.ursula._current_teacher_node.rest_url())
stats.append(teacher)
'Uptime .............. {}'.format(maya.now() - self.start_time),
'Start Time .......... {}'.format(self.start_time.slang_time()),
'Fleet State ......... {2} {1} ({0})'.format(self.ursula.known_nodes.checksum[:7], self.ursula.known_nodes.nickname, self.ursula.known_nodes.icon),
'Learning Status ..... {}'.format(learning_status),
'Learning Round ...... Round #{}'.format(self.ursula._learning_round),
'Operating Mode ...... {}'.format('Federated' if self.ursula.federated_only else 'Decentralized'),
'Rest Interface ...... {}'.format(self.ursula.rest_url()),
'Node Storage Type ... {}'.format(self.ursula.node_storage._name.capitalize()),
'Known Nodes ......... {}'.format(len(self.ursula.known_nodes)),
'Work Orders ......... {}'.format(len(self.ursula._work_orders)),
teacher]
click.echo('\n' + '\n'.join(stats) + '\n')

View File

@ -144,28 +144,17 @@ class FleetStateTracker:
def nickname_metadata(self):
return self._nickname_metadata
@property
def icon(self) -> str:
return self.nickname_metadata[0][1]
def addresses(self):
return self._nodes.keys()
def icon(self):
if self.checksum is constants.NO_KNOWN_NODES:
return "NO FLEET STATE AVAILABLE"
icon_template = """
<div class="nucypher-nickname-icon" style="border-color:{color};">
<div class="small">{number_of_nodes} nodes</div>
<div class="symbols">
<span class="single-symbol" style="color: {color}">{symbol}&#xFE0E;</span>
</div>
<br/>
<span class="small-address">{fleet_state_checksum}</span>
</div>
""".replace(" ", "").replace('\n', "")
return icon_template.format(
number_of_nodes=len(self),
color=self.nickname_metadata[0][0]['hex'],
symbol=self.nickname_metadata[0][1],
fleet_state_checksum=self.checksum[0:8]
)
def icon_html(self):
return icon_from_checksum(checksum=self.checksum,
number_of_nodes=len(self),
nickname_metadata=self.nickname_metadata)
def snapshot(self):
fleet_state_checksum_bytes = binascii.unhexlify(self.checksum)
@ -187,8 +176,8 @@ class FleetStateTracker:
# For now we store the sorted node list. Someday we probably spin this out into
# its own class, FleetState, and use it as the basis for partial updates.
self.states[checksum] = self.state_template(nickname=self.nickname,
icon=self.icon(),
nodes=sorted_nodes,
icon=self.icon_html(),
updated=self.updated,
)