add skewness monitor control
[osm/vim-emu.git] / src / emuvim / api / rest / rest_api_endpoint.py
index d6c1185..7168f37 100755 (executable)
@@ -32,21 +32,19 @@ from flask_restful import Api
 
 # need to import total module to set its global variable dcs
 import compute
-from compute import dcs, ComputeList, ComputeStart, ComputeStatus, ComputeStop, DatacenterList, DatacenterStatus
+from compute import dcs, ComputeList, Compute, DatacenterList, DatacenterStatus
 
 # need to import total module to set its global variable net
 import network
 from network import NetworkAction
 
 import monitor
-from monitor import MonitorInterfaceAction, MonitorFlowAction
+from monitor import MonitorInterfaceAction, MonitorFlowAction, MonitorLinkAction, MonitorSkewAction
 
 logging.basicConfig(level=logging.INFO)
 
 
-
 class RestApiEndpoint(object):
-
     """
     Simple API endpoint that offers a REST
     interface. This interface will be used by the
@@ -62,27 +60,51 @@ class RestApiEndpoint(object):
         self.api = Api(self.app)
 
         # setup endpoints
-        self.api.add_resource(ComputeList, "/restapi/compute/<dc_label>")
-        self.api.add_resource(ComputeStart, "/restapi/compute/<dc_label>/<compute_name>/start")
-        self.api.add_resource(ComputeStop, "/restapi/compute/<dc_label>/<compute_name>/stop")
-        self.api.add_resource(ComputeStatus, "/restapi/compute/<dc_label>/<compute_name>")
-        self.api.add_resource(DatacenterList, "/restapi/datacenter")
+
+        # compute related actions (start/stop VNFs, get info)
+        self.api.add_resource(Compute,
+                              "/restapi/compute/<dc_label>/<compute_name>",
+                              "/restapi/compute/<dc_label>/<compute_name>/<resource>/<value>")
+        self.api.add_resource(ComputeList,
+                      "/restapi/compute",
+                      "/restapi/compute/<dc_label>")
+
         self.api.add_resource(DatacenterStatus, "/restapi/datacenter/<dc_label>")
+        self.api.add_resource(DatacenterList, "/restapi/datacenter")
 
-        self.api.add_resource(NetworkAction, "/restapi/network/<vnf_src_name>/<vnf_dst_name>")
 
-        self.api.add_resource(MonitorInterfaceAction, "/restapi/monitor/<vnf_name>/<vnf_interface>/<metric>")
-        self.api.add_resource(MonitorFlowAction, "/restapi/monitor/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+        # network related actions (setup chaining between VNFs)
+        self.api.add_resource(NetworkAction,
+                              "/restapi/network/<vnf_src_name>/<vnf_dst_name>")
+
+
+        # monitoring related actions
+        # export a network interface traffic rate counter
+        self.api.add_resource(MonitorInterfaceAction,
+                              "/restapi/monitor/interface/<vnf_name>/<metric>",
+                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>",
+                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+        # export flow traffic counter, of a manually pre-installed flow entry, specified by its cookie
+        self.api.add_resource(MonitorFlowAction,
+                              "/restapi/monitor/flow/<vnf_name>/<metric>/<cookie>",
+                              "/restapi/monitor/flow/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+        # install monitoring of a specific flow on a pre-existing link in the service.
+        # the traffic counters of the newly installed monitor flow are exported
+        self.api.add_resource(MonitorLinkAction,
+                              "/restapi/monitor/link/<vnf_src_name>/<vnf_dst_name>")
+        # install skewness monitor of resource usage disribution
+        # the skewness metric is exported
+        self.api.add_resource(MonitorSkewAction,
+                              "/restapi/monitor/skewness/<vnf_name>/<resource_name>")
 
         logging.debug("Created API endpoint %s(%s:%d)" % (self.__class__.__name__, self.ip, self.port))
 
-
     def connectDatacenter(self, dc):
         compute.dcs[dc.label] = dc
-        logging.info("Connected DC(%s) to API endpoint %s(%s:%d)" % (dc.label, self.__class__.__name__, self.ip, self.port))
+        logging.info(
+            "Connected DC(%s) to API endpoint %s(%s:%d)" % (dc.label, self.__class__.__name__, self.ip, self.port))
 
     def connectDCNetwork(self, DCnetwork):
-
         network.net = DCnetwork
         monitor.net = DCnetwork
 
@@ -90,11 +112,10 @@ class RestApiEndpoint(object):
             self.__class__.__name__, self.ip, self.port))
 
     def start(self):
-        thread = threading.Thread(target= self._start_flask, args=())
+        thread = threading.Thread(target=self._start_flask, args=())
         thread.daemon = True
         thread.start()
         logging.info("Started API endpoint @ http://%s:%d" % (self.ip, self.port))
 
-
     def _start_flask(self):
-        self.app.run(self.ip, self.port, debug=True, use_reloader=False)
\ No newline at end of file
+        self.app.run(self.ip, self.port, debug=True, use_reloader=False)