add skewness monitor control
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 28c3df6..d0e45da 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -37,6 +37,7 @@
from subprocess import Popen
import os
import docker
+import json
logging.basicConfig(level=logging.INFO)
@@ -89,6 +90,7 @@
self.monitor_flow_lock = threading.Lock()
self.network_metrics = []
self.flow_metrics = []
+ self.skewmon_metrics = {}
# start monitoring thread
self.start_monitoring = True
@@ -536,4 +538,71 @@
container = self.dockercli.containers.get(name)
container.remove(force=True)
+ def update_skewmon(self, vnf_name, resource_name, action):
+
+ ret = ''
+
+ config_file_path = '/tmp/skewmon.cfg'
+ configfile = open(config_file_path, 'a+')
+ try:
+ config = json.load(configfile)
+ except:
+ #not a valid json file or empty
+ config = {}
+
+ #initialize config file
+ if len(self.skewmon_metrics) == 0:
+ config = {}
+ json.dump(config, configfile)
+ configfile.close()
+
+ docker_name = 'mn.' + vnf_name
+ vnf_container = self.dockercli.containers.get(docker_name)
+ key = resource_name + '_' + vnf_container.short_id
+ vnf_id = vnf_container.id
+
+ if action == 'start':
+ # add a new vnf to monitor
+ config[key] = dict(VNF_NAME=vnf_name,
+ VNF_ID=vnf_id,
+ VNF_METRIC=resource_name)
+ ret = 'adding to skewness monitor: {0} {1} '.format(vnf_name, resource_name)
+ logging.info(ret)
+ elif action == 'stop':
+ # remove vnf to monitor
+ config.pop(key)
+ ret = 'removing from skewness monitor: {0} {1} '.format(vnf_name, resource_name)
+ logging.info(ret)
+
+ self.skewmon_metrics = config
+ configfile = open(config_file_path, 'w')
+ json.dump(config, configfile)
+ configfile.close()
+
+ try:
+ skewmon_container = self.dockercli.containers.get('skewmon')
+
+ # remove container if config is empty
+ if len(config) == 0:
+ ret += 'stopping skewness monitor'
+ logging.info('stopping skewness monitor')
+ skewmon_container.remove(force=True)
+
+ except docker.errors.NotFound:
+ # start container if not running
+ ret += 'starting skewness monitor'
+ logging.info('starting skewness monitor')
+ volumes = {'/sys/fs/cgroup':{'bind':'/sys/fs/cgroup', 'mode':'ro'},
+ '/tmp/skewmon.cfg':{'bind':'/config.txt', 'mode':'ro'}}
+ self.dockercli.containers.run('skewmon',
+ detach=True,
+ volumes=volumes,
+ labels=['com.containernet'],
+ name='skewmon'
+ )
+ return ret
+
+
+
+