升级trace逻辑
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 | ||||
|  | ||||
							
								
								
									
										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