add files for son-monitor test
diff --git a/src/emuvim/cli/compute.py b/src/emuvim/cli/compute.py
index dcb499d..d01dfed 100755
--- a/src/emuvim/cli/compute.py
+++ b/src/emuvim/cli/compute.py
@@ -30,7 +30,6 @@
nw_list = list()
if args.get("network") is not None:
nw_list = self._parse_network(args.get("network"))
-
r = self.c.compute_action_start(
args.get("datacenter"),
args.get("name"),
diff --git a/src/emuvim/cli/monitor.py b/src/emuvim/cli/monitor.py
index 34853a6..79ff25b 100755
--- a/src/emuvim/cli/monitor.py
+++ b/src/emuvim/cli/monitor.py
@@ -5,20 +5,24 @@
import argparse
import pprint
-from tabulate import tabulate
import zerorpc
-import time
-
+import prometheus
pp = pprint.PrettyPrinter(indent=4)
class ZeroRpcClient(object):
def __init__(self):
+ # network zerorpc
self.c = zerorpc.Client()
# TODO connect to DCNetwork API
#self.c.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later
self.c.connect("tcp://127.0.0.1:5151")
+
+ # compute zerorpc
+ self.compute_api = zerorpc.Client(heartbeat=None, timeout=120) # heartbeat=None, timeout=120
+ self.compute_api.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later
+
self.cmds = {}
def execute_command(self, args):
@@ -66,7 +70,7 @@
args.get("cookie"))
pp.pprint(r)
- def prometheus(self, args):
+ def prometheus_zrpc(self, args):
vnf_name = self._parse_vnf_name(args.get("vnf_name"))
vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
r = self.c.prometheus(
@@ -76,6 +80,18 @@
args.get("query"))
pp.pprint(r)
+ def prometheus(self, args):
+ vnf_name = self._parse_vnf_name(args.get("vnf_name"))
+ vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
+ dc_label = args.get("datacenter")
+ query = args.get("query")
+ vnf_status = self.compute_api.compute_status(dc_label, vnf_name)
+ uuid = vnf_status['id']
+ query = query.replace('<uuid>', uuid)
+
+ r = prometheus.query_Prometheus(query)
+ pp.pprint(r)
+
def _parse_vnf_name(self, vnf_name_str):
vnf_name = vnf_name_str.split(':')[0]
@@ -93,7 +109,7 @@
parser.add_argument(
"command",
choices=['setup_metric', 'stop_metric', 'setup_flow', 'stop_flow','prometheus'],
- help="setup/stop a metric/flow to be monitored or Prometheus query")
+ help="setup/stop a metric/flow to be monitored or query Prometheus")
parser.add_argument(
"--vnf_name", "-vnf", dest="vnf_name",
help="vnf name:interface to be monitored")
diff --git a/src/emuvim/cli/prometheus.py b/src/emuvim/cli/prometheus.py
new file mode 100755
index 0000000..8d87d89
--- /dev/null
+++ b/src/emuvim/cli/prometheus.py
@@ -0,0 +1,28 @@
+"""
+Prometheus API helper functions
+(c) 2016 by Steven Van Rossem <steven.vanrossem@intec.ugent.be>
+"""
+
+import urllib2
+import ast
+
+prometheus_ip = '0.0.0.0'
+prometheus_port = '9090'
+prometheus_REST_api = 'http://{0}:{1}'.format(prometheus_ip, prometheus_port)
+
+
+def query_Prometheus(query):
+ url = prometheus_REST_api + '/' + 'api/v1/query?query=' + query
+ # logging.info('query:{0}'.format(url))
+ req = urllib2.Request(url)
+ ret = urllib2.urlopen(req).read()
+ ret = ast.literal_eval(ret)
+ if ret['status'] == 'success':
+ # logging.info('return:{0}'.format(ret))
+ try:
+ ret = ret['data']['result'][0]['value']
+ except:
+ ret = None
+ else:
+ ret = None
+ return ret
\ No newline at end of file
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index e663cae..8db10da 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -75,8 +75,8 @@
self.monitor_flow_thread.start()
# helper tools
- self.pushgateway_process = self.start_PushGateway()
- self.prometheus_process = self.start_Prometheus()
+ #self.pushgateway_process = self.start_PushGateway()
+ #self.prometheus_process = self.start_Prometheus()
self.cadvisor_process = self.start_cadvisor()
# first set some parameters, before measurement can start
@@ -496,6 +496,7 @@
self.monitor_thread.join()
self.monitor_flow_thread.join()
+ '''
if self.prometheus_process is not None:
logging.info('stopping prometheus container')
self.prometheus_process.terminate()
@@ -507,6 +508,7 @@
self.pushgateway_process.terminate()
self.pushgateway_process.kill()
self._stop_container('pushgateway')
+ '''
if self.cadvisor_process is not None:
logging.info('stopping cadvisor container')
diff --git a/src/emuvim/test/integrationtests/test_sdk_monitor.sh b/src/emuvim/test/integrationtests/test_sdk_monitor.sh
new file mode 100755
index 0000000..26f939f
--- /dev/null
+++ b/src/emuvim/test/integrationtests/test_sdk_monitor.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# test if a vnf can be monitored and deployed
+
+cpu_load=$(son-emu-cli monitor prometheus -d datacenter1 -vnf vnf1 -q 'sum(rate(container_cpu_usage_seconds_total{id="/docker/<uuid>"}[10s]))')
+
+# test if prometheus query worked
+regex="[0-9.]+, [0-9.']+"
+if [[ $cpu_load =~ $regex ]] ; then
+ echo "OK"
+ exit 0
+else
+ echo $cpu_load
+ echo "not OK"
+ exit 1
+fi