"""\r
son-emu monitor CLI\r
(c) 2016 by Manuel Peuster <manuel.peuster@upb.de>\r
+Steven Van Rossem <steven.vanrossem@intec.ugent.be>\r
"""\r
\r
import argparse\r
import pprint\r
-from tabulate import tabulate\r
import zerorpc\r
-import time\r
-\r
+from emuvim.cli import prometheus\r
\r
pp = pprint.PrettyPrinter(indent=4)\r
\r
class ZeroRpcClient(object):\r
\r
def __init__(self):\r
+ # network zerorpc\r
self.c = zerorpc.Client()\r
# TODO connect to DCNetwork API\r
#self.c.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later\r
self.c.connect("tcp://127.0.0.1:5151")\r
+\r
+ # compute zerorpc\r
+ self.compute_api = zerorpc.Client(heartbeat=None, timeout=120) # heartbeat=None, timeout=120\r
+ self.compute_api.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later\r
+\r
self.cmds = {}\r
\r
def execute_command(self, args):\r
# call the local method with the same name as the command arg\r
getattr(self, args["command"])(args)\r
else:\r
- print "Command not implemented."\r
+ print("Command not implemented.")\r
\r
def setup_metric(self, args):\r
vnf_name = self._parse_vnf_name(args.get("vnf_name"))\r
args.get("metric"))\r
pp.pprint(r)\r
\r
+ def setup_flow(self, args):\r
+ vnf_name = self._parse_vnf_name(args.get("vnf_name"))\r
+ vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))\r
+ r = self.c.setup_flow(\r
+ vnf_name,\r
+ vnf_interface,\r
+ args.get("metric"),\r
+ args.get("cookie"))\r
+ pp.pprint(r)\r
+\r
+ def stop_flow(self, args):\r
+ vnf_name = self._parse_vnf_name(args.get("vnf_name"))\r
+ vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))\r
+ r = self.c.stop_flow(\r
+ vnf_name,\r
+ vnf_interface,\r
+ args.get("metric"),\r
+ args.get("cookie"))\r
+ pp.pprint(r)\r
+\r
+ def prometheus_zrpc(self, args):\r
+ vnf_name = self._parse_vnf_name(args.get("vnf_name"))\r
+ vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))\r
+ r = self.c.prometheus(\r
+ args.get("datacenter"),\r
+ vnf_name,\r
+ vnf_interface,\r
+ args.get("query"))\r
+ pp.pprint(r)\r
+\r
+ def prometheus(self, args):\r
+ vnf_name = self._parse_vnf_name(args.get("vnf_name"))\r
+ vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))\r
+ dc_label = args.get("datacenter")\r
+ query = args.get("query")\r
+ vnf_status = self.compute_api.compute_status(dc_label, vnf_name)\r
+ uuid = vnf_status['id']\r
+ query = query.replace('<uuid>', uuid)\r
+\r
+ r = prometheus.query_Prometheus(query)\r
+ pp.pprint(r)\r
+\r
+\r
def _parse_vnf_name(self, vnf_name_str):\r
vnf_name = vnf_name_str.split(':')[0]\r
return vnf_name\r
\r
return vnf_interface\r
\r
-parser = argparse.ArgumentParser(description='son-emu network')\r
+parser = argparse.ArgumentParser(description='son-emu monitor')\r
parser.add_argument(\r
"command",\r
- help="Action to be executed")\r
+ choices=['setup_metric', 'stop_metric', 'setup_flow', 'stop_flow','prometheus'],\r
+ help="setup/stop a metric/flow to be monitored or query Prometheus")\r
parser.add_argument(\r
"--vnf_name", "-vnf", dest="vnf_name",\r
help="vnf name:interface to be monitored")\r
parser.add_argument(\r
"--metric", "-m", dest="metric",\r
help="tx_bytes, rx_bytes, tx_packets, rx_packets")\r
-\r
+parser.add_argument(\r
+ "--cookie", "-c", dest="cookie",\r
+ help="flow cookie to monitor")\r
+parser.add_argument(\r
+ "--query", "-q", dest="query",\r
+ help="prometheus query")\r
+parser.add_argument(\r
+ "--datacenter", "-d", dest="datacenter",\r
+ help="Data center where the vnf is deployed")\r
\r
def main(argv):\r
#print "This is the son-emu monitor CLI."\r