Merge pull request #170 from stevenvanrossem/master
fix a bug in son-monitor (deleting flow metrics sometimes crashes)
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index b5f0204..9cf2a3b 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -248,7 +248,6 @@
network_metric['metric_key'] = metric
self.monitor_lock.acquire()
-
self.network_metrics.append(network_metric)
self.monitor_lock.release()
@@ -333,9 +332,6 @@
return 'Error stopping monitoring metric: {0} on {1}:{2}'.format(metric, vnf_name, vnf_interface)
-
-
-
# get all metrics defined in the list and export it to Prometheus
def get_flow_metrics(self):
while self.start_monitoring:
@@ -429,11 +425,10 @@
metric_dict['previous_measurement'] = int(port_stat[metric_key])
metric_dict['previous_monitor_time'] = port_uptime
# do first measurement
- time.sleep(1)
- self.monitor_lock.release()
-
- metric_rate = self.get_network_metrics()
- return metric_rate
+ #time.sleep(1)
+ #self.monitor_lock.release()
+ # rate cannot be calculated yet (need a first measurement)
+ metric_rate = None
else:
time_delta = (port_uptime - metric_dict['previous_monitor_time'])
@@ -441,9 +436,11 @@
metric_dict['previous_measurement'] = this_measurement
metric_dict['previous_monitor_time'] = port_uptime
- return metric_rate
+ return
logging.exception('metric {0} not found on {1}:{2}'.format(metric_key, vnf_name, vnf_interface))
+ logging.exception('monport:{0}, dpid:{1}'.format(mon_port, switch_dpid))
+ logging.exception('port dict:{0}'.format(port_stat_dict))
return 'metric {0} not found on {1}:{2}'.format(metric_key, vnf_name, vnf_interface)
def set_flow_metric(self, metric_dict, flow_stat_dict):
@@ -463,8 +460,9 @@
elif 'packet' in metric_key:
counter += flow_stat['packet_count']
- flow_stat = flow_stat_dict[str(switch_dpid)][0]
- flow_uptime = flow_stat['duration_sec'] + flow_stat['duration_nsec'] * 10 ** (-9)
+ # flow_uptime disabled for now (can give error)
+ #flow_stat = flow_stat_dict[str(switch_dpid)][0]
+ #flow_uptime = flow_stat['duration_sec'] + flow_stat['duration_nsec'] * 10 ** (-9)
self.prom_metrics[metric_dict['metric_key']]. \
labels({'vnf_name': vnf_name, 'vnf_interface': vnf_interface, 'flow_id': cookie}). \
@@ -495,6 +493,7 @@
"-d",
"-p", "{0}:9091".format(port),
"--name", "pushgateway",
+ "--label", 'com.containernet=""',
"prom/pushgateway"
]
@@ -511,6 +510,7 @@
"--volume=/var/lib/docker/:/var/lib/docker:ro",
"--publish={0}:8080".format(port),
"--name=cadvisor",
+ "--label",'com.containernet=""',
"google/cadvisor:latest"
]
logging.info('Start cAdvisor container {0}'.format(cmd))
@@ -532,14 +532,14 @@
'''
if self.pushgateway_process is not None:
logging.info('stopping pushgateway container')
- self.pushgateway_process.terminate()
- self.pushgateway_process.kill()
+ #self.pushgateway_process.terminate()
+ #self.pushgateway_process.kill()
self._stop_container('pushgateway')
if self.cadvisor_process is not None:
logging.info('stopping cadvisor container')
- self.cadvisor_process.terminate()
- self.cadvisor_process.kill()
+ #self.cadvisor_process.terminate()
+ #self.cadvisor_process.kill()
self._stop_container('cadvisor')
def switch_tx_rx(self,metric=''):
@@ -553,13 +553,10 @@
return metric
def _stop_container(self, name):
- cmd = ["docker",
- "stop",
- name]
- Popen(cmd).wait()
cmd = ["docker",
"rm",
+ "-f",
name]
Popen(cmd).wait()