54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
from enum import Enum
|
|
from colony.core.network import advice
|
|
from colony.core.network.hardware import HardwareStatistics
|
|
from colony.core.roles.role import Role, Command
|
|
from colony.role_registry import RolePriority
|
|
|
|
|
|
class Unit(Role):
|
|
class COMMANDS(Enum):
|
|
SHOW_STATS = 'Unit.ShowStats'
|
|
SHOW_ROLES = 'Unit.ShowRoles'
|
|
SHOW_HARDWARE = 'Unit.ShowHardware'
|
|
SHOW_CLUSTER = 'Unit.ShowCluster'
|
|
REQUEST_ROLE = 'Unit.RequestRole'
|
|
|
|
def __init__(self, context):
|
|
commands = {
|
|
self.COMMANDS.SHOW_STATS.value: Command(self.show_stats),
|
|
self.COMMANDS.SHOW_ROLES.value: Command(self.show_roles),
|
|
self.COMMANDS.SHOW_HARDWARE.value: Command(self.show_hardware),
|
|
self.COMMANDS.SHOW_CLUSTER.value: Command(self.show_cluster),
|
|
self.COMMANDS.REQUEST_ROLE.value: Command(self.request_role),
|
|
}
|
|
|
|
super().__init__(commands, context)
|
|
|
|
def show_hardware(self):
|
|
return HardwareStatistics.collect().to_dict()
|
|
|
|
def show_cluster(self):
|
|
roles = self.context.get_role_registry().roles
|
|
return {
|
|
"members": self.context.membership().overview(),
|
|
"roles": [
|
|
{
|
|
"name": name,
|
|
"priority": roles[name].priority.name.lower(),
|
|
"required": None if roles[name].priority == RolePriority.GENERAL else advice.required_holders(roles[name]),
|
|
"on_demand": roles[name].on_demand,
|
|
}
|
|
for name in sorted(roles, key=lambda name: (roles[name].priority.value, name))
|
|
],
|
|
}
|
|
|
|
def show_roles(self):
|
|
return list(self.context.self().roles)
|
|
|
|
def show_stats(self):
|
|
self_node = self.context.self()
|
|
return self_node.to_dict()
|
|
|
|
def request_role(self, role):
|
|
return self.context.get_role_manager().request_role(role)
|