Ejemplo n.º 1
0
    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")
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
def signal_handler(sig, frame):
    """
    required for non-tty python runs to interrupt
    :param frame:
    :param sig:
    """
    del sig, frame
    raise ManualShutdown()
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)