display assigned ip's and interfaces on dashboard
[osm/vim-emu.git] / src / emuvim / dcemulator / monitoring.py
index d0e45da..78b8007 100755 (executable)
@@ -34,7 +34,7 @@ import time
 from prometheus_client import start_http_server, Summary, Histogram, Gauge, Counter, REGISTRY, CollectorRegistry, \\r
     pushadd_to_gateway, push_to_gateway, delete_from_gateway\r
 import threading\r
-from subprocess import Popen\r
+from subprocess import Popen, check_call\r
 import os\r
 import docker\r
 import json\r
@@ -202,7 +202,7 @@ class DCNetworkMonitor():
         network_metric = {}\r
 \r
         # check if port is specified (vnf:port)\r
-        if vnf_interface is None:\r
+        if vnf_interface is None or vnf_interface == '':\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
@@ -404,8 +404,10 @@ class DCNetworkMonitor():
         previous_measurement = metric_dict['previous_measurement']\r
         previous_monitor_time = metric_dict['previous_monitor_time']\r
         mon_port = metric_dict['mon_port']\r
-\r
         for port_stat in port_stat_dict[str(switch_dpid)]:\r
+            # ovs output also gives back 'LOCAL' port\r
+            if port_stat['port_no'] == 'LOCAL':\r
+                continue\r
             if int(port_stat['port_no']) == int(mon_port):\r
                 port_uptime = port_stat['duration_sec'] + port_stat['duration_nsec'] * 10 ** (-9)\r
                 this_measurement = int(port_stat[metric_key])\r
@@ -502,7 +504,11 @@ class DCNetworkMonitor():
                "--publish={0}:8080".format(port),\r
                "--name=cadvisor",\r
                "--label",'com.containernet=""',\r
-               "google/cadvisor:latest"\r
+               "--detach=true",\r
+               "google/cadvisor:latest",\r
+               #"--storage_duration=1m0s",\r
+               #"--allow_dynamic_housekeeping=true",\r
+               #"--housekeeping_interval=1s",\r
                ]\r
         logging.info('Start cAdvisor container {0}'.format(cmd))\r
         return Popen(cmd)\r
@@ -535,8 +541,15 @@ class DCNetworkMonitor():
 \r
     def _stop_container(self, name):\r
 \r
-        container = self.dockercli.containers.get(name)\r
-        container.remove(force=True)\r
+        #container = self.dockercli.containers.get(name)\r
+        #container.stop()\r
+        #container.remove(force=True)\r
+\r
+        # the only robust way to stop these containers is via Popen, it seems\r
+        time.sleep(1)\r
+        cmd = ['docker', 'rm', '-f', name]\r
+        Popen(cmd)\r
+\r
 \r
     def update_skewmon(self, vnf_name, resource_name, action):\r
 \r
@@ -600,6 +613,18 @@ class DCNetworkMonitor():
                                           labels=['com.containernet'],\r
                                           name='skewmon'\r
                                           )\r
+            # Wait a while for containers to be completely started\r
+            started = False\r
+            wait_time = 0\r
+            while not started:\r
+                list1 = self.dockercli.containers.list(filters={'status': 'running', 'name': 'prometheus'})\r
+                if len(list1) >= 1:\r
+                    time.sleep(1)\r
+                    started = True\r
+                if wait_time > 5:\r
+                    return 'skewmon not started'\r
+                time.sleep(1)\r
+                wait_time += 1\r
         return ret\r
 \r
 \r