"""
import logging
-from flask_restful import Resource
+from flask_restful import Resource, reqparse
from flask import request
import json
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig()
CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
"""
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)
logging.exception("API error.")
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)
"""
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
logging.exception("API error.")
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
# 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
+ # check json payload
+ logging.debug("json: {}".format(request.json))
+ logging.debug("args: {}".format(request.args))
+
data = request.json
+ if data is None:
+ data = request.args
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
"""
global net
- def put(self, vnf_name, resource_name='cpu'):
+ 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
+ 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, resource_name='cpu'):
+ 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
+ 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, CORS_HEADER