Files
colony/colony/core/roles/unit/role.py
T
2026-09-19 22:22:22 +02:00

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)