def test_get_physical_node_from_server(self, mock_get_ctx): ctx_obj = DummyContextClass() self.addCleanup(self._remove_ctx, ctx_obj) mock_get_ctx.return_value = ctx_obj result = Context.get_physical_node_from_server("mock_server") mock_get_ctx.assert_called_once() self.assertIsNone(result)
def collect_kpi(self): # check if the tg processes have exited physical_node = Context.get_physical_node_from_server( self.scenario_helper.nodes[self.name]) result = {"physical_node": physical_node} for proc in (self._tg_process, self._traffic_process): check_if_process_failed(proc) result["collect_stats"] = self.resource_helper.collect_kpi() LOG.debug("%s collect KPIs %s", self.APP_NAME, result) return result
def collect_kpi(self): # we can't get KPIs if the VNF is down check_if_process_failed(self._vnf_process, 0.01) stats = self.get_stats() m = re.search(self.COLLECT_KPI, stats, re.MULTILINE) physical_node = Context.get_physical_node_from_server( self.scenario_helper.nodes[self.name]) result = {"physical_node": physical_node} if m: result.update({k: int(m.group(v)) for k, v in self.COLLECT_MAP.items()}) result["collect_stats"] = self.resource_helper.collect_kpi() else: result.update({"packets_in": 0, "packets_fwd": 0, "packets_dropped": 0}) LOG.debug("%s collect KPIs %s", self.APP_NAME, result) return result
def collect_kpi(self): # Implement stats collection ip_link_stats = '/sbin/ip -s link' stdout = self.ssh_helper.execute(ip_link_stats)[1] link_stats = self.get_stats(stdout) # get RX/TX from link_stats and assign to results physical_node = Context.get_physical_node_from_server( self.scenario_helper.nodes[self.name]) result = { "physical_node": physical_node, "packets_in": 0, "packets_dropped": 0, "packets_fwd": 0, "link_stats": link_stats } LOG.debug("%s collect KPIs %s", "RouterVNF", result) return result
def collect_kpi(self): # check if the tg processes have exited physical_node = Context.get_physical_node_from_server( self.scenario_helper.nodes[self.name]) result = {"physical_node": physical_node} for proc in (self._tg_process, self._traffic_process): check_if_process_failed(proc) if self.resource_helper is None: return result if self.irq_cores is None: self.setup_helper.build_config_file() self.irq_cores = self.get_irq_cores() data = self.resource_helper.sut.irq_core_stats(self.irq_cores) new_data = copy.deepcopy(data) self.end_test_time = time.time() self.resource_helper.sut.reset_stats() if self.start_test_time is None: new_data = {} else: test_time = self.end_test_time - self.start_test_time for index, item in data.items(): for counter, value in item.items(): if counter.startswith("bucket_") or \ counter.startswith("overflow"): if value is 0: del new_data[index][counter] else: new_data[index][counter] = float(value) / test_time self.start_test_time = time.time() result["collect_stats"] = new_data LOG.debug("%s collect KPIs %s", self.APP_NAME, result) return result