Create Dockerfile to create a yardstick-image of docker
[yardstick.git] / yardstick / network_services / collector / subscriber.py
index 322b3f5..937c266 100644 (file)
 """This module implements stub for publishing results in yardstick format."""
 import logging
 
+from yardstick.network_services.nfvi.resource import ResourceProfile
+from yardstick.network_services.utils import get_nsb_option
+
+
 LOG = logging.getLogger(__name__)
 
 
 class Collector(object):
     """Class that handles dictionary of results in yardstick-plot format."""
 
-    def __init__(self, vnfs):
+    def __init__(self, vnfs, contexts_nodes, timeout=3600):
         super(Collector, self).__init__()
         self.vnfs = vnfs
+        self.nodes = contexts_nodes
+        self.bin_path = get_nsb_option('bin_path', '')
+        self.resource_profiles = {}
+
+        for ctx_name, nodes in contexts_nodes.items():
+            for node in (node for node in nodes if node.get('collectd')):
+                name = ".".join([node['name'], ctx_name])
+                self.resource_profiles.update(
+                    {name: ResourceProfile.make_from_node(node, timeout)}
+                    )
 
     def start(self):
+        for resource in self.resource_profiles.values():
+            resource.initiate_systemagent(self.bin_path)
+            resource.start()
+            resource.amqp_process_for_nfvi_kpi()
+
         for vnf in self.vnfs:
             vnf.start_collect()
 
@@ -32,6 +51,9 @@ class Collector(object):
         for vnf in self.vnfs:
             vnf.stop_collect()
 
+        for resource in self.resource_profiles.values():
+            resource.stop()
+
     def get_kpi(self):
         """Returns dictionary of results in yardstick-plot format
 
@@ -42,7 +64,12 @@ class Collector(object):
         for vnf in self.vnfs:
             # Result example:
             # {"VNF1: { "tput" : [1000, 999] }, "VNF2": { "latency": 100 }}
-            LOG.debug("collect KPI for %s", vnf.name)
+            LOG.debug("collect KPI for vnf %s", vnf.name)
             results[vnf.name] = vnf.collect_kpi()
 
+        for node_name, resource in self.resource_profiles.items():
+            LOG.debug("collect KPI for nfvi_node %s", node_name)
+            results[node_name] = {"core": resource.amqp_collect_nfvi_kpi()}
+            LOG.debug("%s collect KPIs %s", node_name, results[node_name]['core'])
+
         return results