logging.basicConfig(level=logging.INFO)
+CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
+
net = None
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):
logging.debug("REST CALL: stop monitor VNF interface")
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):
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):
logging.debug("REST CALL: stop monitor VNF interface")
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):
"""
- Add or remove chains between VNFs. These chain links are implemented as flow entries in the networks' SDN switches.
+ Add or remove flow monitoring on chains between VNFs.
+ These chain links are implemented as flow entries in the networks' SDN switches.
+ The monitoring is an extra flow entry on top of the existing chain, with a specific match. (preserving the chaining)
+ The counters of this new monitoring flow are exported
:param vnf_src_name: VNF name of the source of the link
:param vnf_dst_name: VNF name of the destination of the link
:param vnf_src_interface: VNF interface name of the source of the link
vnf_name = vnf_src_name
vnf_interface = vnf_src_interface
- c2 = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
+ c2 = 'command unknown'
+ if command == 'add-flow':
+ c2 = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
+ elif command == 'del-flows':
+ c2 = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
# return setChain response
return (str(c1) + " " + str(c2)), 200
except Exception as ex:
logging.exception("API error.")
- return ex.message, 500
\ No newline at end of file
+ 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, vnf_name, resource_name='cpu'):
+ logging.debug("REST CALL: start monitor skewness")
+ try:
+ # configure skewmon
+ c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='start')
+
+ # return monitor message response
+ return str(c), 200
+ except Exception as ex:
+ logging.exception("API error.")
+ return ex.message, 500
+
+ def delete(self, vnf_name, resource_name='cpu'):
+ logging.debug("REST CALL: stop monitor skewness")
+ try:
+ # configure skewmon
+ c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='stop')
+
+ # return monitor message response
+ return str(c), 200
+ except Exception as ex:
+ logging.exception("API error.")
+ return ex.message, 500, CORS_HEADER
+