Пример #1
0
def main():
    """ main loop """
    parser = options.ConnectorOptions()
    opts, _ = parser.parse_args()

    ecode = 0
    threads = []
    results = []
    errors = []
    stats = None
    opts.conn_reconnect = "false"

    if opts.log_stats == 'connector':
        stats = []

    if opts.log_lib is not None:
        utils.set_up_client_logging(opts.log_lib)

    try:
        # main loop
        for i in range(opts.count):
            connector = threading.Thread(target=run_connectors,
                                         args=(opts, results, errors, stats))
            threads.append(connector)
            connector.start()

        for i in range(len(threads)):
            threads[i].join()

    except Exception:  # pylint: disable=broad-except
        ecode = 1

    result = [sum(i_res) for i_res in zip(*results)]
    ecode = (len(result) == 3 and result[1] > 0) or ecode
    stdout = ' '.join(str(val) for val in result)

    for err in errors:
        utils.dump_error(err)

    if opts.log_stats == 'connector':
        for stat in stats:
            print("STATS", stat)
    print(stdout)
    sys.exit(ecode)
Пример #2
0
    def prepare_content_from_file(filename):
        """
        reads and returns file contents

        :param filename: path to file to be opened and read
        :type filename: str
        :return: contents of filename as unicode string
        :rtype: str (unicode) or None
        """
        try:
            content_file = open(filename, "r")
            content = content_file.read()
            content_file.close()
        except IOError as exc:
            utils.dump_error(exc)
            return None

        content = content.rstrip()
        try:
            # python2.x convert to unicode
            return content.decode(sys.getfilesystemencoding())
        except AttributeError:
            return content
Пример #3
0
    def on_unhandled(self, name, event):
        """
        Universal handler which sees all events when added as global handler to reactor.

        .. seealso::
           node_data/clients/python/receiver.py
           and node_data/clients/python/sender.py

        :param name: event name
        :type name: str
        :param event: event object
        :type event: proton.Event
        """

        dlv = event.delivery
        # trx_declare_failed
        if ((dlv is not None) and (hasattr(event, "transaction"))
                and (event.transaction is not None)
                and (dlv == event.transaction._declare)  # pylint: disable=protected-access
                and (dlv.remote_state == proton.Delivery.REJECTED)):
            raise ClientException("Transaction error: %s ..." %
                                  "Transaction declare failed")

        # trx_failed
        if ((dlv is not None) and (hasattr(event, "transaction"))
                and (event.transaction is not None)
                and (dlv == event.transaction._discharge)  # pylint: disable=protected-access
                and (dlv.remote_state == proton.Delivery.REJECTED)
                and (not event.transaction.failed)):
            raise ClientException("Transaction error: %s ..." %
                                  "Transaction failed")

        # connection_err
        if ((name == "on_connection_remote_close")
                and event.connection.remote_condition):
            err_message = "Connection error: %s ..." \
                          % self._evaluate_endpoint_error(event.connection, "connection")
            if self.conn_reconnect == "false":
                raise ClientException(err_message)
            else:
                utils.dump_error(err_message)

        # link_err
        if ((name == "on_link_remote_close") and event.link.remote_condition):
            raise ClientException(
                "Link error: %s ..." %
                self._evaluate_endpoint_error(event.link, "link"))

        # session_err
        if ((name == "on_session_remote_close")
                and event.session.remote_condition):
            raise ClientException(
                "Session error: %s ..." %
                self._evaluate_endpoint_error(event.session, "session"))

        # transport_err
        if name == "on_transport_error":
            err_message = "Transport error: %s - %s" % (
                event.transport.condition.name,
                event.transport.condition.description)
            if ("authentication"
                    in event.transport.condition.description.lower()
                    or self.conn_reconnect == "false"):
                raise ClientException(err_message)
            else:
                utils.dump_error(err_message)

        # select_err
        if name == "on_selectable_error":
            raise ClientException("Selector error: %s ..." %
                                  "Selectable error ...")

        # delivery rejected err
        if (name == "on_delivery"
                and ((dlv is not None)
                     and dlv.remote_state == proton.Delivery.REJECTED)):
            raise ClientException("Message delivery error: %s ..." %
                                  "REJECTED")