Exemplo n.º 1
0
    def dynamic_wrapper(wrapped, instance, args, kwargs):
        tracker = current_tracker()

        if tracker is None:
            return wrapped(*args, **kwargs)

        _name = name
        _params = params
        _label = label
        _group = group

        if callable(name):
            if instance is not None:
                _name = name(instance, *args, **kwargs)
            else:
                _name = name(*args, **kwargs)
        elif name is None:
            _name = callable_name(wrapped)

        if callable(group):
            if instance is not None:
                _group = group(instance, *args, **kwargs)
            else:
                _group = group(*args, **kwargs)

        with FunctionTracker(tracker, _name, _group, _label, _params):
            return wrapped(*args, **kwargs)
Exemplo n.º 2
0
def process_cross_trace(headers):
    """
    """
    if headers is None:
        headers = {}

    # sunyan: hack begin!
    #from py_zipkin import zipkin
    #headers.update(zipkin.create_http_headers_for_new_span())
    #print("new headers>>>>>>")
    #for k, v in headers.items():
    #    print("k:{0}".format(k))
    #    print("v:{0}".format(v))
    #print("new headers<<<<<<")
    # sunyan: hack end!

    tracker = current_tracker()
    if not tracker or not tracker.enabled:
        return headers

    if not tracker.settings.transaction_tracer.enabled:
        return headers

    headers['X-Tingyun-Id'] = tracker.settings.x_tingyun_id % (
        tracker._tingyun_id, tracker.generate_trace_id())

    return headers
Exemplo n.º 3
0
    def literal_wrapper(wrapped, instance, args, kwargs):
        tracker = current_tracker()

        if tracker is None:
            return wrapped(*args, **kwargs)

        with ExternalTrace(tracker, library, url, kwargs):
            return wrapped(*args, **kwargs)
Exemplo n.º 4
0
def wrap_exception(wrapped, action_url, parameters, *args, **kwargs):
    """
    """

    tracker = current_tracker()
    if tracker is None:
        return wrapped(*args, **kwargs)

    url = action_url if not callable(action_url) else action_url(
        *args, **kwargs)
    params = parameters if not callable(parameters) else parameters(
        *args, **kwargs)

    http_status = 500
    error_code = 0
    params = parse_parameters(url, params)

    try:
        rtv = wrapped(*args, **kwargs)
    except ReadTimeout:
        error_code = TIMEOUT_EXCEPTION_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise
    except (ConnectTimeout, ConnectionError, SSLError):
        error_code = CONNECT_EXCEPTION_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise
    except (InvalidURL, URLRequired):
        error_code = MALFORMED_URL_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise
    except (InvalidSchema, MissingSchema):
        error_code = CLIENT_PROTOCOL_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise
    except (ChunkedEncodingError, ContentDecodingError, StreamConsumedError):
        error_code = ILLEGAL_RESPONSE_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise
    except Exception:
        error_code = OTHER_ERROR_CODE
        tracker.record_external_error(url, error_code, http_status,
                                      sys.exc_info(), params)
        raise

    if int(getattr(rtv, 'status_code', 0)) != 200:
        tracker.record_external_error(url, error_code,
                                      getattr(rtv, 'status_code', 500),
                                      sys.exc_info(), params)

    return rtv
Exemplo n.º 5
0
        def rollback(self):
            """
            :return:
            """
            tracker = current_tracker()
            if not tracker:
                return self.connection.rollback()

            with DatabaseTracker(tracker, 'ROLLBACK', dbtype, module):
                return self.connection.rollback()
Exemplo n.º 6
0
    def literal_wrapper(wrapped, instance, args, kwargs):
        tracker = current_tracker()

        if tracker is None:
            return wrapped(*args, **kwargs)

        _name = name or callable_name(wrapped)

        with FunctionTracker(tracker, _name, group, label, params):
            return wrapped(*args, **kwargs)
Exemplo n.º 7
0
    def create_node(self):
        tracker = current_tracker()
        if tracker:
            tracker.db_time = self.duration

        return DatabaseNode(dbapi=self.dbapi, sql=self.sql, children=self.children, start_time=self.start_time,
                            end_time=self.end_time, duration=self.duration, exclusive=self.exclusive,
                            dbtype=self.db_type, stack_trace=self.stack_trace, sql_format=self.sql_format,
                            connect_params=self.connect_params, cursor_params=self.cursor_params,
                            execute_params=self.execute_params)
Exemplo n.º 8
0
        def commit(self):
            """
            :return:
            """
            tracker = current_tracker()
            if not tracker:
                return self.connection.commit()

            with DatabaseTracker(tracker, 'COMMIT', dbtype, module):
                return self.connection.commit()
Exemplo n.º 9
0
    def wrapper(wrapped, instance, args, kwargs):
        tracker = current_tracker()
        if not tracker:
            return wrapped(*args, **kwargs)

        tracker.set_tracker_name(callable_name(wrapped), priority=3)
        with FunctionTracker(tracker, callable_name(wrapped)):
            try:
                return wrapped(*args, **kwargs)
            except Exception as _:
                tracker.record_exception()
                raise
Exemplo n.º 10
0
        def executemany(self, sql, *args, **kwargs):
            """
            :param sql:
            :param args:
            :param kwargs:
            :return:
            """
            tracker = current_tracker()
            if not tracker:
                return self.cursor.executemany(sql, *args, **kwargs)

            with DatabaseTracker(tracker, sql, dbtype, module):
                return self.cursor.executemany(sql, *args, **kwargs)
Exemplo n.º 11
0
    def create_node(self):
        tracker = current_tracker()
        if tracker:
            tracker.external_time = self.duration

        return ExternalNode(library=self.library,
                            url=self.url,
                            children=self.children,
                            protocol=self.protocol,
                            start_time=self.start_time,
                            end_time=self.end_time,
                            duration=self.duration,
                            exclusive=self.exclusive)
Exemplo n.º 12
0
        def callproc(self, procname, *args, **kwargs):
            """
            :param procname:
            :param args:
            :param kwargs:
            :return:
            """
            tracker = current_tracker()
            if not tracker:
                return self.cursor.callproc(procname, *args, **kwargs)

            with DatabaseTracker(tracker, 'CALL %s' % procname, dbtype,
                                 module):
                return self.cursor.callproc(procname, *args, **kwargs)
Exemplo n.º 13
0
    def _wrapper(wrapped, instance, args, kwargs):
        """
        :param wrapped:
        :param instance:
        :param args:
        :param kwargs:
        :return:
        """
        tracker = current_tracker()
        if not tracker:
            return wrapped(*args, **kwargs)

        tracker.set_tracker_name(callable_name(wrapped), priority=priority)
        with FunctionTracker(tracker, callable_name(wrapped)):
            return wrapped(*args, **kwargs)
Exemplo n.º 14
0
def handle_exception_wrapper(wrapped, instance, args, kwargs):
    """used to trace the exception errors.
    :param wrapped:
    :param instance:
    :param args:
    :param kwargs:
    :return:
    """
    tracker = current_tracker()
    if not tracker:
        return wrapped(*args, **kwargs)

    # just record the exception info
    tracker.record_exception()

    return wrapped(*args, **kwargs)
Exemplo n.º 15
0
    def wrapper(wrapped, instance, args, kwargs):
        console.info("args===>")
        console.info(args)
        console.info("args<===")
        tracker = current_tracker()
        console.info("wsgi_wrapper_inline>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        console.info("current_tracker:1: %s" % tracker)
        if tracker:
            console.info("current_tracker:2: None")
            console.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
            return wrapped(*args, **kwargs)

        environ, start_response = parse_wsgi_protocol(target, *args, **kwargs)
        disable_agent = environ.get(AGENT_REQUEST_SWITCH, None)
        if disable_agent:
            console.debug("Current trace is disabled with http request environment. %s", environ)
            return wrapped(*args, **kwargs)

        tracker = Tracer(proxy_instance(), environ, framework)
        tracker.generate_trace_id()
        tracker.start_work()

        def _start_response(status, response_headers, *args):
            # deal the response header/data
            process_header(tracker, response_headers)
            tracker.deal_response(status, response_headers, *args)
            _write = start_response(status, response_headers, *args)

            return _write

        result = []
        try:
            tracker.set_tracker_name(callable_name(wrapped), priority=1)
            application = function_trace_wrapper(wrapped)
            console.info("current_tracker:2: %s" % tracker)
            with FunctionTracker(tracker, name='Application', group='Python.WSGI'):
                result = TingYunWSGIBrowserRumMiddleware(tracker, application, _start_response, environ)()  # sunyan: 1
                # result = application(environ, start_response)
            console.info("wsgi_wrapper_inline<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
        except:
            console.exception("wsgi_entrance")
            tracker.finish_work(*sys.exc_info())
            raise

        return WSGIApplicationResponse(tracker, result)
    def wrapper(wrapped, instance, args, kwargs):

        incoming_message = args[0][0]
        msg = incoming_message.message
        console.info("msg:")
        console.info(msg)
        ctxt = incoming_message.ctxt
        console.info("ctxt:")
        console.info(ctxt)

        oslo_messaging_trace_id = ctxt['oslo_messaging_trace_id'] if 'oslo_messaging_trace_id' in ctxt else None

        tracker = current_tracker()
        console.info("oslo_messaging_wrapper_inline>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        console.info("current_tracker:1: %s" % tracker)
        if tracker:
            console.info("current_tracker:2: None")
            console.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
            return wrapped(*args, **kwargs)

        environ = {
            'k1': 'v1'
        }

        tracker = Tracer(proxy_instance(), environ, framework)
        if oslo_messaging_trace_id is not None:
            tracker._trace_id = oslo_messaging_trace_id
        tracker.generate_trace_id()
        tracker.start_work()

        result = None
        try:
            tracker.set_tracker_name(callable_name(wrapped), priority=1)
            with FunctionTracker(tracker, name='Application', group='Python.oslo_messaging', params=msg['args']):
                result = wrapped(*args, **kwargs)
            console.info("oslo_messaging_wrapper_inline<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
        except:
            console.exception("oslo_messaging_entrance")
            tracker.finish_work(*sys.exc_info())
            raise
        else:
            tracker.finish_work(None, None, None)

        return result
Exemplo n.º 17
0
    def dynamic_wrapper(wrapped, instance, args, kwargs):
        tracker = current_tracker()

        if tracker is None:
            return wrapped(*args, **kwargs)

        _url = url
        if callable(url):
            if instance is not None:
                _url = url(instance, *args, **kwargs)
            else:
                _url = url(*args, **kwargs)

        with ExternalTrace(tracker, library, _url, kwargs):
            if not callable(params):
                if callable(exception_wrapper):
                    return exception_wrapper(wrapped, _url, params, *args,
                                             **kwargs)

                return wrapped(*args, **kwargs)
            else:
                _args, _kwargs = params(*args, **kwargs)
                if callable(exception_wrapper):
                    ret = exception_wrapper(wrapped, _url,
                                            _kwargs.get("params"), *_args,
                                            **_kwargs)
                else:
                    ret = wrapped(*_args, **_kwargs)

                try:
                    # for requests/urllib3
                    if hasattr(ret, 'headers'):
                        tracker._called_traced_data = eval(
                            ret.headers.get("X-Tingyun-Tx-Data", '{}'))

                    # for httplib2, note: the httplib2 will trans the upper case to lower case
                    if isinstance(ret, tuple):
                        tracker._called_traced_data = eval(ret[0].get(
                            "x-tingyun-tx-data", '{}'))
                except Exception as err:
                    console.debug(err)

                return ret
Exemplo n.º 18
0
def pika_channel_publish_wrapper(wrapped, instance, args, kwargs):
    try:
        console.info('pika_channel_publish_wrapper before')

        console.info(args)
        console.info(kwargs)

        tracker = current_tracker()
        if not tracker:
            return wrapped(*args, **kwargs)

        tracker.set_tracker_name(callable_name(wrapped), priority=4)
        with FunctionTracker(tracker, callable_name(wrapped), params=kwargs):
            kwargs['body'] = json.dumps({
                'pika_trace_id': tracker._trace_id,
                'body': kwargs['body']
            })
            console.info('pika_channel_publish_wrapper after')
            console.info(args)
            console.info(kwargs)
            return wrapped(*args, **kwargs)
    except Exception as e:
        console.exception("pika_channel_publish_wrapper error")
Exemplo n.º 19
0
    def wrapper(wrapped, instance, args, kwargs):

        console.info('args:')
        console.info(args)
        console.info('kwargs:')
        console.info(kwargs)

        method = args[0]
        header = args[1]
        body = None
        pika_trace_id = None
        try:
            wrapped_message = json.loads(args[2])
            if 'pika_trace_id' in wrapped_message:
                pika_trace_id = wrapped_message['pika_trace_id']
                body = wrapped_message['body']
            else:
                body = args[2]
        except Exception:
            body = args[2]
        args = (method, header, body)
        params = {
            #'method': str(method),
            #'header': str(header),
            'body': body
        }

        tracker = current_tracker()
        console.info(
            "pika_wrapper_inline>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        console.info("current_tracker:1: %s" % tracker)
        if tracker:
            console.info("current_tracker:2: None")
            console.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
            return wrapped(*args, **kwargs)

        environ = {'k1': 'v1'}

        tracker = Tracer(proxy_instance(), environ, framework)

        if pika_trace_id is not None:
            tracker._trace_id = pika_trace_id
        tracker.generate_trace_id()
        tracker.start_work()

        result = None
        try:
            tracker.set_tracker_name(callable_name(wrapped), priority=1)
            with FunctionTracker(tracker,
                                 name='Application',
                                 group='Python.pika',
                                 params=params):
                result = wrapped(*args, **kwargs)
            console.info(
                "pika_wrapper_inline<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
        except:
            console.exception("pika_wrapper_inline")
            tracker.finish_work(*sys.exc_info())
            raise
        else:
            tracker.finish_work(None, None, None)

        return result