+ def stop_flow(self, vnf_name, vnf_interface=None, metric=None, cookie=0,):\r
+\r
+ # check if port is specified (vnf:port)\r
+ if vnf_interface is None and metric is not None:\r
+ # take first interface by default\r
+ connected_sw = self.net.DCNetwork_graph.neighbors(vnf_name)[0]\r
+ link_dict = self.net.DCNetwork_graph[vnf_name][connected_sw]\r
+ vnf_interface = link_dict[0]['src_port_id']\r
+\r
+ for flow_dict in self.flow_metrics:\r
+ if flow_dict['vnf_name'] == vnf_name and flow_dict['vnf_interface'] == vnf_interface \\r
+ and flow_dict['metric_key'] == metric and flow_dict['cookie'] == cookie:\r
+\r
+ self.monitor_flow_lock.acquire()\r
+\r
+ self.flow_metrics.remove(flow_dict)\r
+\r
+ for collector in self.registry._collectors:\r
+ if (vnf_name, vnf_interface, cookie) in collector._metrics:\r
+ collector.remove(vnf_name, vnf_interface, cookie)\r
+\r
+ delete_from_gateway(self.pushgateway, job='sonemu-SDNcontroller')\r
+\r
+ self.monitor_flow_lock.release()\r
+\r
+ logging.info('Stopped monitoring flow {3}: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric, cookie))\r
+ return 'Stopped monitoring flow {3}: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric, cookie)\r
+\r
+ return 'Error stopping monitoring flow: {0} on {1}:{2}'.format(metric, vnf_name, vnf_interface)\r
+\r