"""
import logging
-from flask_restful import Resource
+from flask_restful import Resource, reqparse
from flask import request
import json
logging.basicConfig(level=logging.INFO)
+CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
+
net = None
"""
global net
- def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+ def put(self):
logging.debug("REST CALL: start monitor VNF interface")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ vnf_interface = data.get("vnf_interface", None)
+ metric = data.get("metric", 'tx_packets')
+ cookie = data.get("cookie")
+
try:
if cookie:
c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
else:
c = net.monitor_agent.setup_metric(vnf_name, vnf_interface, metric)
# return monitor message response
- return str(c), 200
+ return str(c), 200, CORS_HEADER
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
- def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+ def delete(self):
logging.debug("REST CALL: stop monitor VNF interface")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ vnf_interface = data.get("vnf_interface", None)
+ metric = data.get("metric", 'tx_packets')
+ cookie = data.get("cookie")
+
try:
if cookie:
c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
else:
c = net.monitor_agent.stop_metric(vnf_name, vnf_interface, metric)
# return monitor message response
- return str(c), 200
+ return str(c), 200, CORS_HEADER
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
class MonitorFlowAction(Resource):
"""
global net
- def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+ def put(self):
logging.debug("REST CALL: start monitor VNF interface")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ vnf_interface = data.get("vnf_interface", None)
+ metric = data.get("metric", 'tx_packets')
+ cookie = data.get("cookie", 0)
+
try:
c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
# return monitor message response
- return str(c), 200
+ return str(c), 200, CORS_HEADER
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
- def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+ def delete(self):
logging.debug("REST CALL: stop monitor VNF interface")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ vnf_interface = data.get("vnf_interface", None)
+ metric = data.get("metric", 'tx_packets')
+ cookie = data.get("cookie", 0)
+
try:
c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
# return monitor message response
- return str(c), 200
+ return str(c), 200, CORS_HEADER
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
class MonitorLinkAction(Resource):
"""
# the global net is set from the topology file, and connected via connectDCNetwork function in rest_api_endpoint.py
global net
- def put(self, vnf_src_name, vnf_dst_name):
+ def put(self):
logging.debug("REST CALL: monitor link flow add")
try:
command = 'add-flow'
- return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+ return self._MonitorLinkAction(command=command)
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
- def delete(self, vnf_src_name, vnf_dst_name):
+ def delete(self):
logging.debug("REST CALL: monitor link flow remove")
try:
command = 'del-flows'
- return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+ return self._MonitorLinkAction(command=command)
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
+ return ex.message, 500, CORS_HEADER
- def _MonitorLinkAction(self, vnf_src_name, vnf_dst_name, command=None):
+ def _MonitorLinkAction(self, command=None):
# call DCNetwork method, not really datacenter specific API for now...
# no check if vnfs are really connected to this datacenter...
+
try:
- # check if json data is a dict
- data = request.json
+ # get URL parameters
+ data = request.args
+ #then no data
if data is None:
data = {}
- elif type(data) is not dict:
- data = json.loads(request.json)
+
+ vnf_src_name = data.get("vnf_src_name")
+ vnf_dst_name = data.get("vnf_dst_name")
vnf_src_interface = data.get("vnf_src_interface")
vnf_dst_interface = data.get("vnf_dst_interface")
weight = data.get("weight")
c2 = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
# return setChain response
- return (str(c1) + " " + str(c2)), 200
+ return (str(c1) + " " + str(c2)), 200, CORS_HEADER
+ except Exception as ex:
+ logging.exception("API error.")
+ return ex.message, 500, CORS_HEADER
+
+class MonitorSkewAction(Resource):
+ """
+ Monitor the counters of a VNF interface
+ :param vnf_name: name of the VNF to be monitored
+ :param resource: the resource to be monitored (cpu, mem, ...)
+ :return: message string indicating if the monitor action is succesful or not
+ """
+ global net
+
+ def put(self):
+ logging.debug("REST CALL: start monitor skewness")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ resource_name = data.get("resource_name", 'cpu')
+ try:
+ # configure skewmon
+ c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='start')
+
+ # return monitor message response
+ return str(c), 200, CORS_HEADER
+ except Exception as ex:
+ logging.exception("API error.")
+ return ex.message, 500, CORS_HEADER
+
+ def delete(self):
+ logging.debug("REST CALL: stop monitor skewness")
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_name = data.get("vnf_name")
+ resource_name = data.get("resource_name", 'cpu')
+ try:
+ # configure skewmon
+ c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='stop')
+
+ # return monitor message response
+ return str(c), 200, CORS_HEADER
+ except Exception as ex:
+ logging.exception("API error.")
+ return ex.message, 500, CORS_HEADER
+
+class MonitorTerminal(Resource):
+ """
+ start a terminal for the selected VNFs
+ :param vnf_list: list of names of the VNFs to start a terminal from (all VNFs if None)
+ :return: message string indicating if the monitor action is succesful or not
+ """
+ global net
+
+ def get(self):
+ # get URL parameters
+ data = request.args
+ if data is None:
+ data = {}
+ vnf_list = data.get("vnf_list")
+ logging.debug("REST CALL: start terminal for: {}".format(vnf_list))
+ try:
+ # start terminals
+ c = net.monitor_agent.term(vnf_list)
+
+ # return monitor message response
+ return str(c), 200, CORS_HEADER
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
\ No newline at end of file
+ return ex.message, 500, CORS_HEADER
\ No newline at end of file