Merge pull request '升级trace追踪' (#1) from feature/upgrade_trace into master
Reviewed-on: #1
This commit is contained in:
		
							
								
								
									
										18
									
								
								define.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								define.go
									
									
									
									
									
								
							| @ -20,13 +20,15 @@ const ( | ||||
| // | ||||
| // Date : 23:10 2022/10/14 | ||||
| type Behavior struct { | ||||
| 	ID              int                    `json:"id"`                // 行为ID | ||||
| 	StartBehaviorID int                    `json:"start_behavior_id"` // 开始行为的ID,仅对 finish 类型的行为有效 | ||||
| 	Stack           CallStack              `json:"stack"`             // 调用堆栈信息 | ||||
| 	Action          string                 `json:"action"`            // 行为 | ||||
| 	Type            string                 `json:"type"`              // 行为记录类型 | ||||
| 	Timestamp       int64                  `json:"timestamp"`         // 触发行为的时间,纳秒时间戳 | ||||
| 	Data            map[string]interface{} `json:"data"`              // 本次行为附带的数据 | ||||
| 	ID              int            `json:"id"`                // 行为ID | ||||
| 	StartBehaviorID int            `json:"start_behavior_id"` // 开始行为的ID,仅对 finish 类型的行为有效 | ||||
| 	Stack           CallStack      `json:"stack"`             // 调用堆栈信息 | ||||
| 	Action          string         `json:"action"`            // 行为 | ||||
| 	Type            string         `json:"type"`              // 行为记录类型 | ||||
| 	Timestamp       int64          `json:"timestamp"`         // 触发行为的时间,纳秒时间戳 | ||||
| 	CostNano        int64          `json:"cost_nano"`         // 行为耗时,纳秒 | ||||
| 	CostMs          int64          `json:"cost_ms"`           // 行为耗时,毫秒 | ||||
| 	Data            map[string]any `json:"data"`              // 本次行为附带的数据 | ||||
| } | ||||
|  | ||||
| // CallStack 调用堆栈 | ||||
| @ -38,3 +40,5 @@ type CallStack struct { | ||||
| 	FilePath string `json:"file_path"` // 文件路径 | ||||
| 	LineNo   int    `json:"line_no"`   // 所在行号 | ||||
| } | ||||
|  | ||||
| type LogicFunc func() error | ||||
|  | ||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
								
							| @ -11,17 +11,12 @@ require ( | ||||
|  | ||||
| require ( | ||||
| 	git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250328040304-7e4a6f9f148c // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd // indirect | ||||
| 	github.com/BurntSushi/toml v1.5.0 // indirect | ||||
| 	github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect | ||||
| 	github.com/go-ini/ini v1.67.0 // indirect | ||||
| 	github.com/mitchellh/go-homedir v1.1.0 // indirect | ||||
| 	github.com/mozillazg/go-pinyin v0.20.0 // indirect | ||||
| 	github.com/pkg/errors v0.9.1 // indirect | ||||
| 	github.com/spaolacci/murmur3 v1.1.0 // indirect | ||||
| 	github.com/stretchr/testify v1.9.0 // indirect | ||||
| 	github.com/tidwall/gjson v1.18.0 // indirect | ||||
| 	github.com/tidwall/match v1.1.1 // indirect | ||||
| 	github.com/tidwall/pretty v1.2.1 // indirect | ||||
|  | ||||
							
								
								
									
										41
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,61 +1,26 @@ | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230811030300-6f850372c88c h1:Dan3iSVU6XTKt8r3/qixfPHPpfLZjkYlPmaJios7wtE= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230811030300-6f850372c88c/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b h1:C7KftnLh7dOqzNRs5dn/9yqMDvuqMn5RCglvV6bY758= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250328040304-7e4a6f9f148c h1:cl3gQGXQpJ8ugDs0C/hQLfcvF4lGBm5BeABLvROFDoM= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250328040304-7e4a6f9f148c/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230307094841-e437ba87af10 h1:+Lg4vXFEiWVKjhUJdXuoP0AgjGT49oqJ3301STnZErk= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230307094841-e437ba87af10/go.mod h1:+Lc0zYF8sylRi75A7NGmObrLxugwAZa8WVpWh2eh5X0= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230826152035-90f7ba59144a h1:B37yGkb/ETYInbS3j5JR6lgXPsvGjKcY26fsIlSpKxA= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230826152035-90f7ba59144a/go.mod h1:l9S40lsDnTd/VAZjh1kmfYvz0B9z+7oT86pMQ/KurWo= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20231214080859-68e33b965b7c h1:CK+u0DAyt90NPgUAVH+/V/8nkeACQ1e5Hsj76oe3e3w= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20231214080859-68e33b965b7c/go.mod h1:KoFI1FFfouXsGQSsNdXW+cBj4+JKxQeVx6raYD4Ha7Q= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 h1:s6d4b6yY+NaK1AzoBD1pxqsuygEHQz0Oie86c45geDw= | ||||
| git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4/go.mod h1:V4Dfg1v/JVIZGEKCm6/aehs8hK+Xow1dkL1yiQymXlQ= | ||||
| git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 h1:gUDlQMuJ4xNfP2Abl1Msmpa3fASLWYkNlqDFF/6GN0Y= | ||||
| git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0/go.mod h1:VHb9qmhaPDAQDcS6vUiDCamYjZ4R5lD1XtVsh55KsMI= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230811032817-e6ad534a9a10 h1:orhcMAKrcOajsBJCgssnb9O8YcLsPJvWuXF511gs5dc= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230811032817-e6ad534a9a10/go.mod h1:CzX5/WwGDTnKmewarnjkK5XcSRbgszTQTdTL3OUc/s4= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230909065133-098dcddf1fca h1:CoazDbdGF/bKooOdbyW4R9bmu+i+XvymKuxNFEi/UCE= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230909065133-098dcddf1fca/go.mod h1:AWyjclAKRM7HiUNzm2wKhYw+s4Jz7fg8YngN+PYdKNo= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231201104703-2a8ebdc5697a h1:gWBA5Wu5744oAk5B4heZBrF/Q36xA8cpUVcVQ6/1gl8= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231201104703-2a8ebdc5697a/go.mod h1:w7kG4zyTJ1uPFaTWhze+OQuaUBINT2XnDxpyiM6ctc0= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd h1:q7GG14qgXKB4MEXQFOe7/UYebsqMfPaSX80TcPdOosI= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd/go.mod h1:+D6uPSljwHywjVY5WSBY4TRVMj26TN5f5cFGEYMldjs= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b h1:vnmxYrNdX6f5sEVjjkM1fIR+i32kHJ4g9DJqug9KKek= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b/go.mod h1:Yum5+tgP+Wf1GWUAyQz1Qh8Ab9m5+90GYkYdzqVs0lA= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92 h1:p1GVRYJc3NNoZeLs4CukitAbM3O/ALNq3l31cnbBQDM= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92/go.mod h1:6OBeuwKy2J1TjdAwStEyC6aYC3kStmJiCg1eFC7g0fk= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e h1:Q973S6CcWr1ICZhFI1STFOJ+KUImCl2BaIXm6YppBqI= | ||||
| git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e/go.mod h1:VpPjBlwz8U+OxZuxzHQBv1aEEZ3pStH6bZvT21ADEbI= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20230811071513-cfc46e8d82e1 h1:k2iu9KgRxeroytB+N+/XapAxt1di7o2pNTISjFlYDJ8= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20230811071513-cfc46e8d82e1/go.mod h1:kvjAbtGTo14gKCS0X4rxnb2sPkskHOUy2NXcx34t6Mw= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20231025094615-31780bd924d4 h1:l5I137czueY/TNUaB9JqGzqFiVTjaIHmzS61zft3w00= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20231025094615-31780bd924d4/go.mod h1:Tc2lghiT9WjiBq2mpJ57GMeBaVrVRD4fxMPuMKkaep8= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20231206133222-a427bc63c50f h1:tUUVEGf8AFCyX6ZhWZVFToVqxf8YRoJ0rWjWrv81DkI= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20231206133222-a427bc63c50f/go.mod h1:LEWSEoHhJg2+JXj6TR+fC7dVHTBsJw1V1N6jyt/5f/0= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740 h1:zPUoylfJTbc0EcxW+NEzOTBmoeFZ2I/rLFBnEzxb4Wk= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740/go.mod h1:1ct92dbVc49pmXusA/iGfcQUJzcYmJ+cjAhgc3sDv1I= | ||||
| github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= | ||||
| github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= | ||||
| github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= | ||||
| github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= | ||||
| github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= | ||||
| github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= | ||||
| github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= | ||||
| github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | ||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ= | ||||
| github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= | ||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= | ||||
| github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
| github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= | ||||
| github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= | ||||
| github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= | ||||
|  | ||||
							
								
								
									
										46
									
								
								runtime.go
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								runtime.go
									
									
									
									
									
								
							| @ -53,9 +53,9 @@ type Runtime struct { | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 23:41 2022/10/14 | ||||
| func (r *Runtime) StartBehavior(action string, data map[string]interface{}) int { | ||||
| func (r *Runtime) StartBehavior(action string, data map[string]any) *Behavior { | ||||
| 	if nil == data { | ||||
| 		data = make(map[string]interface{}) | ||||
| 		data = make(map[string]any) | ||||
| 	} | ||||
| 	r.lock.Lock() | ||||
| 	defer r.lock.Unlock() | ||||
| @ -68,7 +68,7 @@ func (r *Runtime) StartBehavior(action string, data map[string]interface{}) int | ||||
| 		Data:      data, | ||||
| 	} | ||||
| 	r.behaviorList = append(r.behaviorList, b) | ||||
| 	return b.ID | ||||
| 	return &b | ||||
| } | ||||
|  | ||||
| // FinishBehavior 结束某一个行为 | ||||
| @ -76,22 +76,25 @@ func (r *Runtime) StartBehavior(action string, data map[string]interface{}) int | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 23:53 2022/10/14 | ||||
| func (r *Runtime) FinishBehavior(behaviorID int, data map[string]interface{}) { | ||||
| func (r *Runtime) FinishBehavior(b *Behavior, data map[string]any) { | ||||
| 	if nil == data { | ||||
| 		data = make(map[string]interface{}) | ||||
| 		data = make(map[string]any) | ||||
| 	} | ||||
| 	r.lock.Lock() | ||||
| 	defer r.lock.Unlock() | ||||
| 	b := Behavior{ | ||||
| 	finishTimestamp := time.Now().UnixNano() | ||||
| 	fb := Behavior{ | ||||
| 		ID:              len(r.behaviorList), | ||||
| 		StartBehaviorID: behaviorID, | ||||
| 		StartBehaviorID: b.StartBehaviorID, | ||||
| 		Stack:           GetTraceFileInfo(r.stackOffset), | ||||
| 		Action:          r.behaviorList[behaviorID].Action, | ||||
| 		Action:          b.Action, | ||||
| 		Type:            BehaviorActionTypeFinish, | ||||
| 		Timestamp:       time.Now().UnixNano(), | ||||
| 		Timestamp:       finishTimestamp, | ||||
| 		CostNano:        finishTimestamp - b.Timestamp, | ||||
| 		CostMs:          (finishTimestamp - b.Timestamp) / 1e6, | ||||
| 		Data:            data, | ||||
| 	} | ||||
| 	r.behaviorList = append(r.behaviorList, b) | ||||
| 	r.behaviorList = append(r.behaviorList, fb) | ||||
| } | ||||
|  | ||||
| // WrapRun ... | ||||
| @ -99,14 +102,27 @@ func (r *Runtime) FinishBehavior(behaviorID int, data map[string]interface{}) { | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 00:17 2022/10/15 | ||||
| func (r *Runtime) WrapRun(action string, startData map[string]interface{}, logic func()) { | ||||
| func (r *Runtime) WrapRun(action string, startData map[string]any, logic LogicFunc) error { | ||||
| 	if nil == logic { | ||||
| 		return | ||||
| 		return nil | ||||
| 	} | ||||
| 	behaviorID := r.StartBehavior(action, startData) | ||||
| 	var ( | ||||
| 		err error | ||||
| 	) | ||||
|  | ||||
| 	b := r.StartBehavior(action, startData) | ||||
| 	// 执行逻辑 | ||||
| 	logic() | ||||
| 	defer r.FinishBehavior(behaviorID, nil) | ||||
| 	err = logic() | ||||
| 	finishData := map[string]any{} | ||||
| 	if nil != err { | ||||
| 		finishData["error"] = err.Error() | ||||
| 		finishData["success"] = false | ||||
| 	} else { | ||||
| 		finishData["success"] = true | ||||
| 		finishData["error"] = "success" | ||||
| 	} | ||||
| 	r.FinishBehavior(b, finishData) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // GetTraceID 获取 trace id | ||||
|  | ||||
		Reference in New Issue
	
	Block a user