mirror of https://github.com/nucypher/nucypher.git
Dedicate a module for console painting
parent
04c0db0b49
commit
5fe7de5ef6
|
@ -0,0 +1,110 @@
|
|||
"""
|
||||
This file is part of nucypher.
|
||||
|
||||
nucypher is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
nucypher is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with nucypher. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
|
||||
import click
|
||||
import maya
|
||||
|
||||
from constant_sorrow.constants import NO_KNOWN_NODES
|
||||
from nucypher.config.characters import UrsulaConfiguration
|
||||
from nucypher.config.constants import SEEDNODES
|
||||
|
||||
|
||||
def paint_configuration(config_filepath: str) -> None:
|
||||
json_config = UrsulaConfiguration._read_configuration_file(filepath=config_filepath)
|
||||
click.secho("\n======== Ursula Configuration ======== \n", bold=True)
|
||||
for key, value in json_config.items():
|
||||
click.secho("{} = {}".format(key, value))
|
||||
|
||||
|
||||
def paint_node_status(ursula, start_time):
|
||||
learning_status = "Unknown"
|
||||
if ursula._learning_task.running:
|
||||
learning_status = "Learning at {}s Intervals".format(ursula._learning_task.interval)
|
||||
elif not ursula._learning_task.running:
|
||||
learning_status = "Not Learning"
|
||||
|
||||
teacher = 'Current Teacher ..... No Teacher Connection'
|
||||
if ursula._current_teacher_node:
|
||||
teacher = 'Current Teacher ..... {}'.format(ursula._current_teacher_node)
|
||||
|
||||
fleet_state_checksum = 'Unknown'
|
||||
if ursula.known_nodes.checksum is not NO_KNOWN_NODES:
|
||||
fleet_state_checksum = ursula.known_nodes.checksum[:7]
|
||||
|
||||
stats = ['⇀URSULA {}↽'.format(ursula.nickname_icon),
|
||||
'{}'.format(ursula),
|
||||
'Uptime .............. {}'.format(maya.now() - start_time),
|
||||
'Start Time .......... {}'.format(start_time.slang_time()),
|
||||
'Fleet State ......... {2} {1} ({0})'.format(fleet_state_checksum,
|
||||
ursula.known_nodes.nickname,
|
||||
ursula.known_nodes.icon),
|
||||
'Learning Status ..... {}'.format(learning_status),
|
||||
'Learning Round ...... Round #{}'.format(ursula._learning_round),
|
||||
'Operating Mode ...... {}'.format('Federated' if ursula.federated_only else 'Decentralized'),
|
||||
'Rest Interface ...... {}'.format(ursula.rest_url()),
|
||||
'Node Storage Type ... {}'.format(ursula.node_storage._name.capitalize()),
|
||||
'Known Nodes ......... {}'.format(len(ursula.known_nodes)),
|
||||
'Work Orders ......... {}'.format(len(ursula._work_orders)),
|
||||
teacher]
|
||||
|
||||
click.echo('\n' + '\n'.join(stats) + '\n')
|
||||
|
||||
|
||||
def paint_known_nodes(ursula) -> None:
|
||||
# Gather Data
|
||||
known_nodes = ursula.known_nodes
|
||||
number_of_known_nodes = len(ursula.node_storage.all(federated_only=ursula.federated_only))
|
||||
seen_nodes = len(ursula.node_storage.all(federated_only=ursula.federated_only, certificates_only=True))
|
||||
|
||||
# Operating Mode
|
||||
federated_only = ursula.federated_only
|
||||
if federated_only:
|
||||
click.secho("Configured in Federated Only mode", fg='green')
|
||||
|
||||
# Heading
|
||||
label = "Known Nodes (connected {} / seen {})".format(number_of_known_nodes, seen_nodes)
|
||||
heading = '\n' + label + " " * (45 - len(label)) + "Last Seen "
|
||||
click.secho(heading, bold=True, nl=False)
|
||||
|
||||
# Legend
|
||||
color_index = {
|
||||
'self': 'yellow',
|
||||
'known': 'white',
|
||||
'seednode': 'blue'
|
||||
}
|
||||
for node_type, color in color_index.items():
|
||||
click.secho('{0:<6} | '.format(node_type), fg=color, nl=False)
|
||||
click.echo('\n')
|
||||
|
||||
seednode_addresses = list(bn.checksum_address for bn in SEEDNODES)
|
||||
|
||||
for node in known_nodes:
|
||||
row_template = "{} | {} | {} | {} | {}"
|
||||
node_type = 'known'
|
||||
if node.checksum_public_address == ursula.checksum_public_address:
|
||||
node_type = 'self'
|
||||
row_template += ' ({})'.format(node_type)
|
||||
elif node.checksum_public_address in seednode_addresses:
|
||||
node_type = 'seednode'
|
||||
row_template += ' ({})'.format(node_type)
|
||||
click.secho(row_template.format(node.checksum_public_address,
|
||||
node.rest_url().ljust(20),
|
||||
node.nickname.ljust(50),
|
||||
node.timestamp,
|
||||
node.last_seen,
|
||||
), fg=color_index[node_type])
|
Loading…
Reference in New Issue