Cleaning
This commit is contained in:
1 parent
12137abe0f
commit
e5ebdd59c9
18 files changed
+42
-51
No files matched your search
@@ -0,0 +1,72 @@
|
||||
import datetime
|
||||
from enum import Enum
|
||||
|
||||
from colony.core.network.requests import CommandRequest
|
||||
from colony.core.storage import DEFAULT_STORAGE_FILES
|
||||
from colony.core.roles.role import Role
|
||||
from colony.core.roles.unit.role import Unit
|
||||
from colony.core.roles.vaultwarden.role import VaultWarden
|
||||
from colony.transport.discover import Discover
|
||||
from colony.transport.whisperer import Whisperer
|
||||
|
||||
|
||||
class Explorer(Role):
|
||||
CONTINUOUS = True
|
||||
LOOP_SECONDS_WAIT = 60
|
||||
|
||||
class COMMANDS(Enum):
|
||||
pass
|
||||
|
||||
def __init__(self, context):
|
||||
commands = {
|
||||
|
||||
}
|
||||
|
||||
super().__init__(commands, context)
|
||||
|
||||
def loop(self):
|
||||
self.logger.info("Getting network snapshot")
|
||||
snapshot = self.get_snapshot()['result']
|
||||
self.logger.debug(f"Loaded snapshot")
|
||||
|
||||
discovered_peers = self.discover_peers()
|
||||
self.logger.info(f"Discovered peers: {list(discovered_peers.keys())}")
|
||||
|
||||
for ip, port in discovered_peers.items():
|
||||
self.logger.info(f"Sending SHOW_STATS command to {ip}:{port}")
|
||||
|
||||
stats = self.fetch_stats_from_peer(ip, port)
|
||||
|
||||
self.logger.debug(f"Received stats from {ip}")
|
||||
snapshot[ip] = stats | {'last_update': datetime.datetime.now().isoformat(), 'last_seen': datetime.datetime.now().isoformat(), 'status': 'reachable'}
|
||||
|
||||
missing_ips = set(snapshot.keys()) - set(discovered_peers.keys())
|
||||
for ip in missing_ips:
|
||||
self.logger.warning(f"Peer {ip} was in snapshot but not reachable. Marking as unreachable")
|
||||
snapshot[ip]['last_update'] = datetime.datetime.now().isoformat()
|
||||
snapshot[ip]['status'] = 'unreachable'
|
||||
|
||||
self.set_snapshot(snapshot)
|
||||
self.logger.info("Snapshot updated successfully")
|
||||
|
||||
|
||||
def get_snapshot(self):
|
||||
return self.context.execute(VaultWarden.COMMANDS.OPEN, DEFAULT_STORAGE_FILES.COLONY_SNAPSHOT.value)
|
||||
|
||||
def set_snapshot(self, snapshot):
|
||||
return self.context.execute(VaultWarden.COMMANDS.OVERWRITE, DEFAULT_STORAGE_FILES.COLONY_SNAPSHOT.value, snapshot)
|
||||
|
||||
def discover_peers(self):
|
||||
peers = {}
|
||||
|
||||
# for ip in get_local_subnet().hosts():
|
||||
for ip in ['192.168.65.101', '192.168.65.102']:
|
||||
try:
|
||||
port = Discover.request(str(ip))
|
||||
peers[str(ip)] = port
|
||||
except (TimeoutError, ConnectionRefusedError):
|
||||
continue
|
||||
return peers
|
||||
|
||||
def fetch_stats_from_peer(self, ip, port):
|
||||
return self.context.execute_to_unregistered_node(ip, port, Unit.COMMANDS.SHOW_STATS)
|
||||
Reference in new issue
Block a user