trace

package
v1.2.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 11, 2021 License: MIT Imports: 5 Imported by: 4

README

trace

一个用于开发调试的辅助工具。

可以实时显示当前页面的操作的请求信息、运行情况、SQL执行、错误提示等。

  • trace.go 主入口文件;
  • dialog.go 处理 third_party_requests 记录;
  • debug.go 处理 debug 记录;
数据格式
trace_id

当前 trace 的 ID,例如:938ff86be98439c6c1a7,便于搜索使用。

request

请求信息,会包括:

  • ttl 请求超时时间,例如:2s 或 un-limit
  • method 请求方式,例如:GET 或 POST
  • decoded_url 请求地址
  • header 请求头信息
  • body 请求体信息
response
  • header 响应头信息
  • body 响应提信息
  • business_code 业务码,例如:10010
  • business_code_msg 业务码信息,例如:签名错误
  • http_code HTTP 状态码,例如:200
  • http_code_msg HTTP 状态码信息,例如:OK
  • cost_seconds 耗费时长:单位秒,比如 0.001105661
third_party_requests

每一个第三方 http 请求都会生成如下的一组数据,多个请求会生成多组数据。

  • request,同上 request 结构一致
  • response,同上 response 结构一致
  • success,是否成功,true 或 false
  • cost_seconds,耗费时长:单位秒

注意:response 中的 business_code、business_code_msg 为空,因为各个第三方返回结构不同,这两个字段为空。

sqls

执行的 SQL 信息,多个 SQL 会记录多组数据。

  • timestamp,时间,格式:2006-01-02 15:04:05
  • stack,文件地址和行号
  • cost_seconds,执行时长,单位:秒
  • sql,SQL 语句
  • rows_affected,影响行数
debugs
  • key 打印的标示
  • value 打印的值
// 调试时,使用这个方法:
p.Print("key", "value", p.WithTrace(c.Trace()))

只有参数中增加了 p.WithTrace(c.Trace()),才会记录到 debugs 中。

success

是否成功,true 或 false

success = !ctx.IsAborted() && ctx.Writer.Status() == http.StatusOK
cost_seconds

耗费时长:单位秒,比如 0.001105661

Documentation

Index

Constants

View Source
const Header = "TRACE-ID"

Variables

This section is empty.

Functions

This section is empty.

Types

type D

type D interface {
	AppendResponse(resp *Response)
	// contains filtered or unexported methods
}

type Debug

type Debug struct {
	Key         string      `json:"key"`          // 标示
	Value       interface{} `json:"value"`        // 值
	CostSeconds float64     `json:"cost_seconds"` // 执行时间(单位秒)
}

type Dialog

type Dialog struct {
	Request     *Request    `json:"request"`      // 请求信息
	Responses   []*Response `json:"responses"`    // 返回信息
	Success     bool        `json:"success"`      // 是否成功,true 或 false
	CostSeconds float64     `json:"cost_seconds"` // 执行时长(单位秒)
	// contains filtered or unexported fields
}

Dialog 内部调用其它方接口的会话信息;失败时会有retry操作,所以 response 会有多次。

func (*Dialog) AppendResponse

func (d *Dialog) AppendResponse(resp *Response)

AppendResponse 按转的追加response信息

type Grpc

type Grpc struct {
	Timestamp   string                 `json:"timestamp"`             // 时间,格式:2006-01-02 15:04:05
	Addr        string                 `json:"addr"`                  // 地址
	Method      string                 `json:"method"`                // 操作方法
	Meta        metadata.MD            `json:"meta"`                  // Mate
	Request     map[string]interface{} `json:"request"`               // 请求信息
	Response    map[string]interface{} `json:"response"`              // 返回信息
	CostSeconds float64                `json:"cost_seconds"`          // 执行时间(单位秒)
	Code        string                 `json:"err_code,omitempty"`    // 错误码
	Message     string                 `json:"err_message,omitempty"` // 错误信息
}

type Redis

type Redis struct {
	Timestamp   string  `json:"timestamp"`       // 时间,格式:2006-01-02 15:04:05
	Handle      string  `json:"handle"`          // 操作,SET/GET 等
	Key         string  `json:"key"`             // Key
	Value       string  `json:"value,omitempty"` // Value
	TTL         float64 `json:"ttl,omitempty"`   // 超时时长(单位分)
	CostSeconds float64 `json:"cost_seconds"`    // 执行时间(单位秒)
}

type Request

type Request struct {
	TTL        string      `json:"ttl"`         // 请求超时时间
	Method     string      `json:"method"`      // 请求方式
	DecodedURL string      `json:"decoded_url"` // 请求地址
	Header     interface{} `json:"header"`      // 请求 Header 信息
	Body       interface{} `json:"body"`        // 请求 Body 信息
}

Request 请求信息

type Response

type Response struct {
	Header          interface{} `json:"header"`                      // Header 信息
	Body            interface{} `json:"body"`                        // Body 信息
	BusinessCode    int         `json:"business_code,omitempty"`     // 业务码
	BusinessCodeMsg string      `json:"business_code_msg,omitempty"` // 提示信息
	HttpCode        int         `json:"http_code"`                   // HTTP 状态码
	HttpCodeMsg     string      `json:"http_code_msg"`               // HTTP 状态码信息
	CostSeconds     float64     `json:"cost_seconds"`                // 执行时间(单位秒)
}

Response 响应信息

type SQL

type SQL struct {
	Timestamp   string  `json:"timestamp"`     // 时间,格式:2006-01-02 15:04:05
	Stack       string  `json:"stack"`         // 文件地址和行号
	SQL         string  `json:"sql"`           // SQL 语句
	Rows        int64   `json:"rows_affected"` // 影响行数
	CostSeconds float64 `json:"cost_seconds"`  // 执行时长(单位秒)
}

type T

type T interface {
	ID() string
	WithRequest(req *Request) *Trace
	WithResponse(resp *Response) *Trace
	AppendDialog(dialog *Dialog) *Trace
	AppendSQL(sql *SQL) *Trace
	AppendRedis(redis *Redis) *Trace
	AppendGRPC(grpc *Grpc) *Trace
	// contains filtered or unexported methods
}

type Trace

type Trace struct {
	Identifier         string    `json:"trace_id"`             // 链路ID
	Request            *Request  `json:"request"`              // 请求信息
	Response           *Response `json:"response"`             // 返回信息
	ThirdPartyRequests []*Dialog `json:"third_party_requests"` // 调用第三方接口的信息
	Debugs             []*Debug  `json:"debugs"`               // 调试信息
	SQLs               []*SQL    `json:"sqls"`                 // 执行的 SQL 信息
	Redis              []*Redis  `json:"redis"`                // 执行的 Redis 信息
	GRPCs              []*Grpc   `json:"grpc"`                 // 执行的 gRPC 信息
	Success            bool      `json:"success"`              // 请求结果 true or false
	CostSeconds        float64   `json:"cost_seconds"`         // 执行时长(单位秒)
	// contains filtered or unexported fields
}

Trace 记录的参数

func New

func New(id string) *Trace

func (*Trace) AppendDebug

func (t *Trace) AppendDebug(debug *Debug) *Trace

AppendDebug 追加 debug

func (*Trace) AppendDialog

func (t *Trace) AppendDialog(dialog *Dialog) *Trace

AppendDialog 安全的追加内部调用过程dialog

func (*Trace) AppendGRPC

func (t *Trace) AppendGRPC(grpc *Grpc) *Trace

AppendGRPC 追加 gRPC 调用信息

func (*Trace) AppendRedis

func (t *Trace) AppendRedis(redis *Redis) *Trace

AppendRedis 追加 Redis

func (*Trace) AppendSQL

func (t *Trace) AppendSQL(sql *SQL) *Trace

AppendSQL 追加 SQL

func (*Trace) ID

func (t *Trace) ID() string

ID 唯一标识符

func (*Trace) WithRequest

func (t *Trace) WithRequest(req *Request) *Trace

WithRequest 设置request

func (*Trace) WithResponse

func (t *Trace) WithResponse(resp *Response) *Trace

WithResponse 设置response

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL