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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
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]
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]
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 ]
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 ]