aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/network_services/collector/subscriber.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/network_services/collector/subscriber.py')
-rw-r--r--yardstick/network_services/collector/subscriber.py59
1 files changed, 52 insertions, 7 deletions
diff --git a/yardstick/network_services/collector/subscriber.py b/yardstick/network_services/collector/subscriber.py
index 3bcb20876..db52e0b45 100644
--- a/yardstick/network_services/collector/subscriber.py
+++ b/yardstick/network_services/collector/subscriber.py
@@ -12,28 +12,73 @@
# See the License for the specific language governing permissions and
# limitations under the License.
"""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, traffic_profile, vnfs):
+ @staticmethod
+ def make_resource_profile(node, timeout):
+ # node dict works as mgmt dict
+ # don't need port names, there is no way we can
+ # tell what port is used on the compute node
+ collectd_options = node["collectd"]
+ plugins = collectd_options.get("plugins", {})
+ interval = collectd_options.get("interval")
+
+ # use default cores = None to MatchAllCores
+ return ResourceProfile(node, plugins=plugins, interval=interval, timeout=timeout)
+
+ def __init__(self, vnfs, nodes, traffic_profile, timeout=3600):
super(Collector, self).__init__()
self.traffic_profile = traffic_profile
- self.service = vnfs
+ self.vnfs = vnfs
+ self.nodes = nodes
+ self.timeout = timeout
+ self.bin_path = get_nsb_option('bin_path', '')
+ self.resource_profiles = {node_name: self.make_resource_profile(node, self.timeout)
+ for node_name, node in self.nodes.items()
+ if node.get("collectd")}
def start(self):
"""Nothing to do, yet"""
- pass
+ for resource in self.resource_profiles.values():
+ resource.initiate_systemagent(self.bin_path)
+ resource.start()
+ resource.amqp_process_for_nfvi_kpi()
def stop(self):
"""Nothing to do, yet"""
- pass
+ for resource in self.resource_profiles.values():
+ resource.stop()
- @classmethod
- def get_kpi(cls, vnf):
+ def get_kpi(self):
"""Returns dictionary of results in yardstick-plot format
:return:
"""
- return {vnf.name: vnf.collect_kpi()}
+ results = {}
+ for vnf in self.vnfs:
+ # Result example:
+ # {"VNF1: { "tput" : [1000, 999] }, "VNF2": { "latency": 100 }}
+ LOG.debug("collect KPI for %s", vnf.name)
+ results[vnf.name] = vnf.collect_kpi()
+
+ for node_name, resource in self.resource_profiles.items():
+ # Result example:
+ # {"VNF1: { "tput" : [1000, 999] }, "VNF2": { "latency": 100 }}
+ LOG.debug("collect KPI for %s", node_name)
+ if not resource.check_if_sa_running("collectd")[0]:
+ continue
+
+ try:
+ results[node_name] = {"core": resource.amqp_collect_nfvi_kpi()}
+ except Exception:
+ LOG.exception("")
+ return results