示例#1
0
    def test_node_time(self):
        """
        :return:
        """
        base_time = time.time()
        root = Node(start_time=base_time, end_time=base_time + 20)
        child_1 = Node(start_time=base_time + 10, end_time=base_time + 15)
        child_2 = Node(start_time=base_time + 12, end_time=base_time + 14)

        # test the relative start time
        ret_1 = node_start_time(root, child_1)
        ret_2 = node_start_time(root, child_2)
        self.assertEqual(ret_1, 10000, "first child start time error.")
        self.assertEqual(ret_2, 12000, "first child start time error.")

        # test the relative end time
        ret_1 = node_end_time(root, child_1)
        ret_2 = node_end_time(root, child_2)
        self.assertEqual(ret_1, 15000, "first child start time error.")
        self.assertEqual(ret_2, 14000, "first child start time error.")

        # test the duration time
        ret_0 = node_duration_time(root)
        ret_2 = node_duration_time(child_2)
        self.assertEqual(ret_0, 20000, "first child start time error.")
        self.assertEqual(ret_2, 2000, "first child start time error.")
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return: traced node
        """
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = self.path
        call_url = self.request_uri
        call_count = 1
        class_name = ""
        # 如果该节点未非根节点,强制使用常量名称
        method_name = self.name if root.is_root else "execute"
        params = {}
        children = []

        root.trace_node_count += 1
        for child in self.children:
            if root.trace_node_count > root.trace_node_limit:
                break

            children.append(child.trace_node(root))

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return: traced node
        """
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'Python/%s/%s' % (self.group, self.name)
        call_url = root.request_uri
        call_count = 1
        class_name = ""
        method_name = self.name
        params = {
            "sql": "",
            "stacktrace": root.format_stack_trace(self.stack_trace or []),
        }

        # exception不存在,不能加入该key值
        for ex in self.exception:
            params['exception'] = root.parse_exception_detail(ex)

        children = []

        root.trace_node_count += 1
        for child in self.children:
            if root.trace_node_count > root.trace_node_limit:
                break

            children.append(child.trace_node(root))

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
示例#4
0
    def trace_node(self, root):
        """
        :param root: the root node of the trakcer
        :return: traced node
        """
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'Python/%s/%s' % (self.group, self.name)
        call_url = root.request_uri
        call_count = 1
        class_name = ""
        method_name = self.name
        params = {"sql": "", "explainPlan": {}, "stacktrace": []}
        children = []

        root.trace_node_count += 1
        for child in self.children:
            if root.trace_node_count > root.trace_node_limit:
                break

            children.append(child.trace_node(root))

        if self.stack_trace:
            for line in self.stack_trace:
                if len(line) >= 4 and 'tingyun' not in line[0]:
                    params['stacktrace'].append("%s(%s:%s)" %
                                                (line[2], line[0], line[1]))

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
示例#5
0
    def trace_node(self, root):
        """作为调用方时,txData无法回传,此时需要将externalId往服务端传递
        :param root:
        :return:
        """
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        params = {}
        children = []

        # 当作为调用者时,该数据才会从上报,否则该id会跟着跨应用数据上报服务器
        if self.external_id:
            params['externalId'] = self.external_id

        if root.trace_id:
            params['txId'] = root.trace_id

        root.trace_node_count += 1
        for child in self.children:
            if root.trace_node_count > root.trace_node_limit:
                break

            children.append(child.trace_node(root))

        # 由于MQ产生的跨应用数据无法回传,txdata需要在被调方处理跨应用数据
        name = 'Message %s/%s:%s%%2F%s%%2F%s/%s' % (self.vendor, self.host,
                                                    self.port, self.name_type,
                                                    self.name, self.role)

        return [
            start_time, end_time, name, '', 1, self.wrapped_info[0],
            self.wrapped_info[1], params, children
        ]
示例#6
0
    def trace_node(self, root):
        """
        :param root:
        :return:
        """
        method = str(self.method).upper()
        params = {}
        children = []
        call_count = 1
        class_name = ""
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        db, collection, _ = self.parse_db(self.schema)
        metric_name = "MongoDB/%s:%s%%2F%s%%2F%s/%s" % (self.host, self.port,
                                                        db, collection, method)

        # exception不存在,不能加入该key值
        if self.exception:
            params['exception'] = root.parse_exception_detail(self.exception)

        return [
            start_time, end_time, metric_name, "", call_count, class_name,
            method, params, children
        ]
示例#7
0
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return:
        """
        params = {}
        children = []
        call_count = 1
        class_name = ""
        method_name = self.library
        call_url = self.url
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'External/%s/%s' % (self.url.replace(
            "/", "%2F"), self.library)

        # 当作为调用者时,该数据才会从上报,否则该id会跟着跨应用数据上报服务器
        if self.external_id:
            params['externalId'] = self.external_id

        if root.trace_id and root.trace_data:
            params['txId'] = root.trace_id
            params['txData'] = root.trace_data

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
示例#8
0
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return:
        """
        dbtype = r" %s" % self.dbtype
        params = {"sql": "", "explainPlan": {}, "stacktrace": []}
        children = []
        call_count = 1
        class_name = ""
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        operation = str(self.operation).upper() or 'CALL'
        method_name = '%s.%s' % (self.dbtype, operation)
        metric_name = "Database%s/%s:%s%%2F%s%%2FUnknown/%s" % (
            dbtype, self.host, self.port, self.db_name, operation)
        call_url = ""
        host, port, db_name = self.host, self.port, self.db_name
        sql = self.formatted or ''
        # Note, use local setting only.
        _settings = global_settings()

        # exception不存在,不能加入该key值
        if self.exception:
            params['exception'] = root.parse_exception_detail(self.exception)

        if self.table:
            metric_name = "Database %s/%s:%s%%2F%s%%2F%s/%s" % (
                dbtype, host, port, db_name, self.table, operation)
        else:
            console.debug("Can not get table for operate `%s` to `%s`",
                          operation, dbtype)

        if self.formatted:
            params['sql'] = sql

            if _settings.action_tracer.log_sql:
                console.info(
                    "Log sql is opened. sql upload is disabled, sql sentence is %s",
                    self.formatted)
                params['sql'] = ""

            if self.explain_plan:
                params['explainPlan'] = self.explain_plan

            if self.stack_trace:
                params['stacktrace'] = root.format_stack_trace(
                    self.stack_trace)

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return:
        """
        dbtype = r" %s" % self.dbtype
        params = {"sql": "", "explainPlan": {}, "stacktrace": []}
        children = []
        call_count = 1
        class_name = ""
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        operation = str(self.operation).upper() or 'CALL'
        method_name = '%s.%s' % (self.dbtype, operation)
        metric_name = "Database%s/%s:%s%%2F%s%%2FUnknown/%s" % (
            dbtype, self.host, self.port, self.db_name, operation)
        call_url = ""
        host, port, db_name = self.host, self.port, self.db_name

        if self.table:
            metric_name = "Database %s/%s:%s%%2F%s%%2F%s/%s" % (
                dbtype, host, port, db_name, self.table, operation)
        else:
            console.debug("Can not get table for operate `%s` to `%s`",
                          operation, dbtype)

        if self.formatted:
            # Note, use local setting only.
            _settings = global_settings()
            params['sql'] = self.formatted

            if _settings.action_tracer.log_sql:
                console.info(
                    "Log sql is opened. sql upload is disabled, sql sentence is %s",
                    self.formatted)
                params['sql'] = ""

            if self.explain_plan:
                params['explainPlan'] = self.explain_plan

            if self.stack_trace:
                for line in self.stack_trace:
                    line = [line.filename, line.lineno, line.name, line.locals]
                    if len(line) >= 4 and 'tingyun' not in line[0]:
                        params['stacktrace'].append(
                            "%s(%s:%s)" % (line[2], line[0], line[1]))

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, method_name, params, children
        ]
示例#10
0
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return: traced node
        """
        command = str(self.command).upper()
        params = {}
        children = []
        call_count = 1
        class_name = ""
        method_name = root.name
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'Memcached/%s:%s/%s' % (self.host, self.port, command)
        call_url = metric_name

        return [start_time, end_time, metric_name, "", call_count, class_name, command, params, children]
示例#11
0
    def trace_node(self, root):
        """
        :param root:
        :return:
        """
        method = str(self.method).upper()
        params = {}
        children = []
        call_count = 1
        class_name = ""
        method_name = root.name
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        db, collection, _ = self.parse_db(self.schema)
        metric_name = "MongoDB/%s:%s%%2F%s%%2F%s/%s" % (self.host, self.port, db, collection, method)
        call_url = metric_name

        return [start_time, end_time, metric_name, "", call_count, class_name, method, params, children]
示例#12
0
    def trace_node(self, root):
        """
        :param root:
        :return:
        """
        command = str(self.command).upper()
        params = {}
        children = []
        call_count = 1
        class_name = ""
        method_name = root.name
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'Redis/%s:%s%%2F%s/%s' % (self.host, self.port, self.db,
                                                command)
        call_url = metric_name

        return [
            start_time, end_time, metric_name, call_url, call_count,
            class_name, command, params, children
        ]
示例#13
0
    def trace_node(self, root):
        """
        :param root: the root node of the tracker
        :return: traced node
        """
        command = "Memcached:%s" % self.command
        params = {}
        children = []
        call_count = 1
        class_name = ""
        root.trace_node_count += 1
        start_time = node_start_time(root, self)
        end_time = node_end_time(root, self)
        metric_name = 'Memcached/%s:%s/%s' % (self.host, self.port, command)

        # exception不存在,不能加入该key值
        if self.exception:
            params['exception'] = root.parse_exception_detail(self.exception)

        return [
            start_time, end_time, metric_name, "", call_count, class_name,
            command, params, children
        ]