def send_kpi_data(self, data, is_check_response=True): """ Sends online data :param is_check_response: :type data: str """ url = self.data_address + "/submit.php?session_id=%s&signature=%s&test_id=%s&user_id=%s" url %= self['id'], self.data_signature, self['testId'], self['userId'] url += "&pq=0&target=%s&update=1" % self.kpi_target hdr = {"Content-Type": "application/json"} response = self._request(url, data, headers=hdr) if response and 'response_code' in response and response[ 'response_code'] != 200: raise TaurusNetworkError("Failed to feed data, response code %s" % response['response_code']) if response and 'result' in response and is_check_response: result = response['result']['session'] self.log.debug("Result: %s", result) if 'statusCode' in result and result['statusCode'] > 100: self.log.info("Test was stopped through Web UI: %s", result['status']) raise ManualShutdown("The test was interrupted through Web UI")
def draw_screen(self, size, canvas): """ :param size: :type canvas: urwid.Canvas """ if not self.root: raise ManualShutdown("GUI window was closed") # enable changes self.text.config(state=Tkinter.NORMAL) self.text.delete("1.0", Tkinter.END) for idx, row in enumerate(canvas.content()): pos = 0 for part in row: txt = part[2] if isinstance(txt, six.text_type): strlen = len(txt) else: strlen = len(txt.decode('utf8')) self.text.insert(Tkinter.END, txt) if part[0] is not None: self.text.tag_add(part[0], "%s.%s" % (idx + 1, pos), "%s.%s" % (idx + 1, pos + strlen)) pos += strlen self.text.insert(Tkinter.END, "\n") # disable changes self.text.config(state=Tkinter.DISABLED) self.root.update()
def _wait(self): """ Wait modules for finish :return: """ self.log.info("Waiting for finish...") prev = time.time() modules = [] if self.provisioning: modules.append(self.provisioning) if self.aggregator: modules.append(self.aggregator) modules += self.services + self.reporters while not EngineModule.check_modules_list(modules): now = time.time() diff = now - prev delay = self.check_interval - diff self.log.debug("Iteration took %.3f sec, sleeping for %.3f sec...", diff, delay) if delay > 0: time.sleep(delay) prev = time.time() if self.interrupted: raise ManualShutdown() self.config.dump()
def send_kpi_data(self, data_buffer, is_check_response=True): """ Sends online data :param is_check_response: :type data_buffer: list[bzt.modules.aggregator.DataPoint] """ data = [] for sec in data_buffer: self.first_ts = min(self.first_ts, sec[DataPoint.TIMESTAMP]) self.last_ts = max(self.last_ts, sec[DataPoint.TIMESTAMP]) for lbl, item in iteritems(sec[DataPoint.CURRENT]): if lbl == '': label = "ALL" else: label = lbl json_item = None for lbl_item in data: if lbl_item["name"] == label: json_item = lbl_item break if not json_item: json_item = self.__label_skel(label) data.append(json_item) interval_item = self.__interval_json(item, sec) for r_code, cnt in iteritems(item[KPISet.RESP_CODES]): interval_item['rc'].append({"n": cnt, "rc": r_code}) json_item['intervals'].append(interval_item) cumul = sec[DataPoint.CUMULATIVE][lbl] json_item['n'] = cumul[KPISet.SAMPLE_COUNT] json_item["summary"] = self.__summary_json(cumul) data = {"labels": data} url = self.data_address + "/submit.php?session_id=%s&signature=%s&test_id=%s&user_id=%s" url = url % (self.active_session_id, self.data_signature, self.test_id, self.user_id) url += "&pq=0&target=labels_bulk&update=1" hdr = {"Content-Type": " application/json"} response = self._request(url, to_json(data), headers=hdr) if response and 'response_code' in response and response[ 'response_code'] != 200: raise RuntimeError("Failed to feed data, response code %s" % response['response_code']) if response and 'result' in response and is_check_response: result = response['result']['session'] self.log.debug("Result: %s", result) if 'statusCode' in result and result['statusCode'] > 100: self.log.info("Test was stopped through Web UI: %s", result['status']) raise ManualShutdown("The test was interrupted through Web UI")
def signal_handler(sig, frame): """ required for non-tty python runs to interrupt :param frame: :param sig: """ del sig, frame raise ManualShutdown()
def __wait(self): self.log.info("Waiting for finish...") prev = time.time() while not self.provisioning.check() and not self.aggregator.check() \ and not EngineModule.check_modules_list(self.reporters): now = time.time() diff = now - prev delay = self.check_interval - diff self.log.debug("Iteration took %.3f sec, sleeping for %.3f sec...", diff, delay) if delay > 0: time.sleep(delay) prev = time.time() if self.interrupted: raise ManualShutdown() self.config.dump()
def prepare(self): if self.settings.get("dump-locations", False): self.log.warning( "Dumping available locations instead of running the test") self._configure_client() info = self.client.get_user_info() locations = self.client.get_available_locations() for item in info['locations']: if item['id'] in locations: self.log.info("Location: %s\t%s", item['id'], item['title']) raise ManualShutdown("Done listing locations") super(CloudProvisioning, self).prepare() self.browser_open = self.settings.get("browser-open", self.browser_open) self._configure_client() self.__prepare_locations() config = self.__get_config_for_cloud() rfiles = self.__get_rfiles() def file_replacer(container): if isinstance(container, dict): for key, val in iteritems(container): if val in rfiles: container[key] = os.path.basename(val) if container[key] != val: self.log.info("Replaced %s with %s in %s", val, container[key], key) BetterDict.traverse(config, file_replacer) bza_plugin = self.__get_bza_test_config() finder = ProjectFinder(self.parameters, self.settings, self.client, self.engine) finder.default_test_name = "Taurus Cloud Test" self.test_id = finder.resolve_test_id(bza_plugin, config, rfiles) self.test_name = finder.test_name self.widget = CloudProvWidget(self) if isinstance(self.engine.aggregator, ConsolidatingAggregator): self.results_reader = ResultsFromBZA(self.client) self.results_reader.log = self.log self.engine.aggregator.add_underling(self.results_reader)
def _wait(self): """ Wait modules for finish :return: """ prev = time.time() while not self._check_modules_list(): now = time.time() diff = now - prev delay = self.check_interval - diff self.engine_loop_utilization = diff / self.check_interval self.log.debug("Iteration took %.3f sec, sleeping for %.3f sec...", diff, delay) if delay > 0: time.sleep(delay) prev = time.time() if self.interrupted: raise ManualShutdown() self.config.dump()
def test_background_task_completed(self): task = {"command": "sleep 1", "background": True} blocking_task = {"command": "sleep 2", "background": False} self.obj.parameters.merge({"prepare": [task, blocking_task]}) if is_windows(): varspec = '%TAURUS_EXIT_CODE%' else: varspec = "$TAURUS_EXIT_CODE" self.obj.parameters.merge({"shutdown": ["echo " + varspec]}) self.obj.parameters.merge({"post-process": ["echo " + varspec]}) self.obj.prepare() self.obj.shutdown() getvalue = self.log_recorder.debug_buff.getvalue() self.log_recorder.debug_buff.truncate(0) self.log_recorder.debug_buff.seek(0) self.assertIn("Output for echo " + varspec + ":\n0", getvalue) self.obj.engine.stopping_reason = ManualShutdown() self.obj.post_process() buff_getvalue = self.log_recorder.debug_buff.getvalue() self.assertIn("Task was finished with exit code 0: sleep 1", buff_getvalue) self.assertIn("Output for echo " + varspec + ":\n2", buff_getvalue)