added session/node dir to grpc responses and node channels, updating route monitor to use grpc for getting session/node information

This commit is contained in:
Blake Harnden 2020-04-06 15:46:47 -07:00
parent 2750a69e79
commit 0742c08b59
3 changed files with 45 additions and 34 deletions

View file

@ -7,11 +7,13 @@ import subprocess
import time
from argparse import ArgumentDefaultsHelpFormatter
from functools import cmp_to_key
from glob import glob
from queue import Queue
from threading import Thread
from typing import Dict, Tuple
from core.api.grpc.client import CoreGrpcClient
from core.api.grpc.core_pb2 import NodeType
SDT_HOST = "127.0.0.1"
SDT_PORT = 50000
ROUTE_LAYER = "CORE Route"
@ -20,25 +22,6 @@ ROUTE_TIME = 3
PACKET_CHOICES = ["udp", "tcp", "icmp"]
def find_nodes() -> Dict[str, str]:
sessions = glob("/tmp/pycore.*")
session = None
if sessions:
session = sessions[0]
if not session:
raise Exception("failed to find core session")
print("core session: ", session)
nodes = {}
with open(f"{session}/nodes", "r") as f:
for line in f.readlines():
line = line.strip()
values = line.split()
if values[2] == "NodeTypes.DEFAULT":
print("node: ", values[1])
nodes[values[0]] = f"{session}/{values[1]}"
return nodes
class RouteEnum(enum.Enum):
ADD = 0
DEL = 1
@ -70,10 +53,10 @@ class SdtClient:
class RouterMonitor:
def __init__(self, nodes: Dict[str, str], src_id: str, src: str, dst: str, pkt: str,
def __init__(self, src_id: str, src: str, dst: str, pkt: str,
sdt_host: str, sdt_port: int) -> None:
self.queue = Queue()
self.nodes = nodes
self.core = CoreGrpcClient()
self.src_id = src_id
self.src = src
self.dst = dst
@ -82,6 +65,25 @@ class RouterMonitor:
self.running = False
self.route_time = None
self.sdt = SdtClient((sdt_host, sdt_port))
self.nodes = self.get_nodes()
def get_nodes(self) -> Dict[str, str]:
nodes = {}
with self.core.context_connect():
response = self.core.get_sessions()
sessions = response.sessions
session = None
if sessions:
session = sessions[0]
if not session:
raise Exception("no current core sessions")
print(session.dir)
response = self.core.get_session(session.id)
for node in response.session.nodes:
if node.type != NodeType.DEFAULT:
continue
nodes[node.id] = node.channel
return nodes
def start(self) -> None:
self.running = True
@ -176,9 +178,7 @@ def main() -> None:
parser.add_argument("--sdt-port", type=int, default=SDT_PORT, help="sdt port")
args = parser.parse_args()
nodes = find_nodes()
monitor = RouterMonitor(
nodes,
args.id,
args.src,
args.dst,