refactor(tracing): 统一替换 span 结束函数,增强链路追踪安全性
All checks were successful
continuous-integration/drone/push Build is passing

- 将所有 card_sender 相关文件中 defer span.End() 替换为 otelTrace.SafeEndSpan(span)
- 统一修改第三方供应商池中多个文件的链路追踪 span 结束调用
- 增强异步和同步上下文中对 span 结束的安全处理
- 优化日志埋点的链路追踪一致性与容错能力
This commit is contained in:
danial
2025-12-17 17:26:07 +08:00
parent 32361013b7
commit 27f8d31e00
24 changed files with 33 additions and 33 deletions

View File

@@ -99,7 +99,7 @@ func (s *SendCardTaskTypeCamel) channelOne(ctx context.Context, orderItem OrderP
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
payUrl, err := url.Parse(orderItem.PayURL) payUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {
@@ -180,7 +180,7 @@ func (s *SendCardTaskTypeCamel) HandleSendCardTask(ctx context.Context, orderIte
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "47.243.53.92") { if strings.Contains(orderItem.PayURL, "47.243.53.92") {
return s.channelOne(ctx, orderItem, task) return s.channelOne(ctx, orderItem, task)
} }

View File

@@ -130,7 +130,7 @@ func (s *SendCardTaskTypeCareless) channelOne(ctx context.Context, orderItem Ord
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
payUrl, err := url.Parse(orderItem.PayURL) payUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {
@@ -264,7 +264,7 @@ func (s *SendCardTaskTypeCareless) HandleSendCardTask(ctx context.Context, order
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "pay50.baolong18080.com") { if strings.Contains(orderItem.PayURL, "pay50.baolong18080.com") {
return (&SendCardTaskTypeNuclear{}).HandleSendCardTask(ctx, orderItem, task) return (&SendCardTaskTypeNuclear{}).HandleSendCardTask(ctx, orderItem, task)
} }

View File

@@ -42,7 +42,7 @@ func (s *SendCardTaskTypeEggplant) CreateOrder(ctx context.Context, roadUid stri
attribute.String("roadUid", roadUid), attribute.String("roadUid", roadUid),
attribute.Float64("faceValue", faceValue), attribute.Float64("faceValue", faceValue),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
cfg := new(config.Config) cfg := new(config.Config)
roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid)
@@ -115,7 +115,7 @@ func (s *SendCardTaskTypeEggplant) HandleSendCardTask(ctx context.Context, order
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
forwardUrl, err := url.Parse(orderItem.PayURL) forwardUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {
otelTrace.Logger.WithContext(ctx).Error("解析失败", zap.Error(err)) otelTrace.Logger.WithContext(ctx).Error("解析失败", zap.Error(err))

View File

@@ -161,7 +161,7 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
queryUrl, err := url.Parse(orderItem.PayURL) queryUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {

View File

@@ -111,7 +111,7 @@ func (s *SendCardTaskTypeFavorableClouds) HandleSendCardTask(ctx context.Context
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
payUrl, err := url.Parse(orderItem.PayURL) payUrl, err := url.Parse(orderItem.PayURL)
roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid)

View File

@@ -188,7 +188,7 @@ func (s *SendCardTaskTypeFlyFish) HandleSendCardTask(ctx context.Context, orderI
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
// 解析url // 解析url
payUrl, err := url.Parse(orderItem.PayURL) payUrl, err := url.Parse(orderItem.PayURL)

View File

@@ -93,7 +93,7 @@ func (s *SendCardTaskTypeFlyFishV2) HandleSendCardTask(ctx context.Context, orde
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
queryUrl, err := url.Parse(orderItem.PayURL) queryUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {

View File

@@ -122,7 +122,7 @@ func (s *SendCardTaskTypeJinke) HandleSendCardTask(ctx context.Context, orderIte
trace.WithAttributes(attribute.String("orderItem", convertor.ToString(orderItem))), trace.WithAttributes(attribute.String("orderItem", convertor.ToString(orderItem))),
trace.WithAttributes(attribute.String("task", convertor.ToString(task))), trace.WithAttributes(attribute.String("task", convertor.ToString(task))),
) )
defer span.End() defer otelTrace.SafeEndSpan(span)
favorableClouds := SendCardTaskTypeFavorableClouds{} favorableClouds := SendCardTaskTypeFavorableClouds{}
@@ -162,7 +162,7 @@ func (s *SendCardTaskTypeJinke) channelOne(ctx context.Context, orderItem OrderP
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
queryUrl, err := url.Parse(orderItem.PayURL) queryUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {
return errors.New("解析提交地址失败") return errors.New("解析提交地址失败")

View File

@@ -146,7 +146,7 @@ func (s *SendCardTaskTypeLianIns) HandleSendCardTask(ctx context.Context, orderI
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "api.xxsbm.com") { if strings.Contains(orderItem.PayURL, "api.xxsbm.com") {
err2 := (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task) err2 := (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task)
return err2 return err2

View File

@@ -291,7 +291,7 @@ func (s *SendCardTaskTypeLuban) HandleSendCardTask(ctx context.Context, orderIte
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "api.xxsbm.com") { if strings.Contains(orderItem.PayURL, "api.xxsbm.com") {
err2 := (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task) err2 := (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task)
return err2 return err2

View File

@@ -141,7 +141,7 @@ func (s *SendCardTaskTypeMagicFish) HandleSendCardTask(ctx context.Context, orde
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
return (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task) return (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task)
} }

View File

@@ -60,7 +60,7 @@ func (s *SendCardTaskTypeMyself) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
attribute.String("remoteOrderId", orderItem.RemoteOrderID), attribute.String("remoteOrderId", orderItem.RemoteOrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid)
if _, err2 := client.SubmitOrder(ctx, &client.SubmitOrderReq{ if _, err2 := client.SubmitOrder(ctx, &client.SubmitOrderReq{

View File

@@ -504,7 +504,7 @@ func (s *SendCardTaskTypeNuclear) HandleSendCardTask(ctx context.Context, orderI
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
attribute.String("remoteOrderId", orderItem.RemoteOrderID), attribute.String("remoteOrderId", orderItem.RemoteOrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "baolong18080.com") { if strings.Contains(orderItem.PayURL, "baolong18080.com") {
return s.channelOne(ctx, orderItem, task) return s.channelOne(ctx, orderItem, task)
} }

View File

@@ -118,7 +118,7 @@ func (s *SendCardTaskTypeOrigin) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
attribute.String("payUrl", orderItem.PayURL), attribute.String("payUrl", orderItem.PayURL),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "sgdemo.wotingwen.com") { if strings.Contains(orderItem.PayURL, "sgdemo.wotingwen.com") {
if err := (&SendCardTaskTypeCareless{}).HandleSendCardTask(ctx, orderItem, task); err != nil { if err := (&SendCardTaskTypeCareless{}).HandleSendCardTask(ctx, orderItem, task); err != nil {
return err return err

View File

@@ -109,7 +109,7 @@ func (s *SendCardTaskTypeSdPay) HandleSendCardTask(ctx context.Context, orderIte
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "121.40.59.64:8081") { if strings.Contains(orderItem.PayURL, "121.40.59.64:8081") {
return s.handleSendCardOne(ctx, orderItem, task, "http://121.40.59.64:8081") return s.handleSendCardOne(ctx, orderItem, task, "http://121.40.59.64:8081")
} }

View File

@@ -121,7 +121,7 @@ func (s *SendCardTaskTypeSesame) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if !strings.Contains(orderItem.PayURL, "/") { if !strings.Contains(orderItem.PayURL, "/") {
return errors.New("支付URL格式错误") return errors.New("支付URL格式错误")
} }
@@ -190,7 +190,7 @@ func (s *SendCardTaskTypeSesame) QueryOrder(ctx context.Context, orderItem Order
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid)
//查询当前订单 //查询当前订单
orderInfo := order.GetOrderByBankOrderId(ctx, task.LocalOrderID) orderInfo := order.GetOrderByBankOrderId(ctx, task.LocalOrderID)

View File

@@ -99,7 +99,7 @@ func (s *SendCardTaskTypeShanfu) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
// 提交卡密 // 提交卡密
req := httplib.NewBeegoRequestWithCtx(ctx, orderItem.PayURL, "POST"). req := httplib.NewBeegoRequestWithCtx(ctx, orderItem.PayURL, "POST").

View File

@@ -141,7 +141,7 @@ func (s *SendCardTaskTypeShengtian) HandleSendCardTask(ctx context.Context, orde
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
queryUrl, err := url.Parse(orderItem.PayURL) queryUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {
@@ -212,7 +212,7 @@ func (s *SendCardTaskTypeShengtian) QueryOrder(ctx context.Context, orderItem Or
attribute.String("cardNo", task.CardInfo.CardNo), attribute.String("cardNo", task.CardInfo.CardNo),
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, orderItem.RoadUid)
//查询当前订单 //查询当前订单
orderInfo := order.GetOrderByBankOrderId(ctx, task.LocalOrderID) orderInfo := order.GetOrderByBankOrderId(ctx, task.LocalOrderID)

View File

@@ -35,7 +35,7 @@ func (s *SendCardTaskTypeUp) CreateOrder(ctx context.Context, roadUid string, fa
attribute.String("roadUid", roadUid), attribute.String("roadUid", roadUid),
attribute.Float64("faceValue", faceValue), attribute.Float64("faceValue", faceValue),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
orderPoolItem := OrderPoolItem{} orderPoolItem := OrderPoolItem{}
roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid)
@@ -105,7 +105,7 @@ func (s *SendCardTaskTypeUp) HandleSendCardTask(ctx context.Context, orderItem O
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
if strings.Contains(orderItem.PayURL, "sgdemo.wotingwen.com") { if strings.Contains(orderItem.PayURL, "sgdemo.wotingwen.com") {
if err := (&SendCardTaskTypeCareless{}).HandleSendCardTask(ctx, orderItem, task); err != nil { if err := (&SendCardTaskTypeCareless{}).HandleSendCardTask(ctx, orderItem, task); err != nil {

View File

@@ -99,7 +99,7 @@ func (s *SendCardTaskTypeWanXin) HandleSendCardTask(ctx context.Context, orderIt
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
// 解析 // 解析
forwardUrl, err := url.Parse(orderItem.PayURL) forwardUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {

View File

@@ -33,7 +33,7 @@ func (s *SendCardTaskTypeWowsPay) CreateOrder(ctx context.Context, roadUid strin
trace.WithAttributes(attribute.Float64("roadUid", faceValue)), trace.WithAttributes(attribute.Float64("roadUid", faceValue)),
trace.WithAttributes(attribute.String("roadUid", roadUid)), trace.WithAttributes(attribute.String("roadUid", roadUid)),
) )
defer span.End() defer otelTrace.SafeEndSpan(span)
roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid) roadInfo := road.GetRoadInfoByRoadUid(ctx, roadUid)
cfg := new(config.Config) cfg := new(config.Config)
@@ -115,7 +115,7 @@ func (s *SendCardTaskTypeWowsPay) HandleSendCardTask(ctx context.Context, orderI
trace.WithAttributes(attribute.String("orderItem", convertor.ToString(orderItem))), trace.WithAttributes(attribute.String("orderItem", convertor.ToString(orderItem))),
trace.WithAttributes(attribute.String("task", convertor.ToString(task))), trace.WithAttributes(attribute.String("task", convertor.ToString(task))),
) )
defer span.End() defer otelTrace.SafeEndSpan(span)
mmUrl, err := url.Parse(orderItem.PayURL) mmUrl, err := url.Parse(orderItem.PayURL)
if err != nil { if err != nil {

View File

@@ -109,7 +109,7 @@ func (s *SendCardTaskTypeWtr) HandleSendCardTask(ctx context.Context, orderItem
attribute.String("cardPassword", task.CardInfo.Data), attribute.String("cardPassword", task.CardInfo.Data),
attribute.String("orderId", orderItem.OrderID), attribute.String("orderId", orderItem.OrderID),
)) ))
defer span.End() defer otelTrace.SafeEndSpan(span)
queryOrderId := "" queryOrderId := ""
pathSchemas := strings.Split(orderItem.PayURL, "/") pathSchemas := strings.Split(orderItem.PayURL, "/")

View File

@@ -362,7 +362,7 @@ func (s *OrderPoolServiceImpl) matchOrders(ctx context.Context) {
// matchOrdersForFaceValue 处理单个面值的订单匹配 // matchOrdersForFaceValue 处理单个面值的订单匹配
func (s *OrderPoolServiceImpl) matchOrdersForFaceValue(ctx context.Context, channel card_sender.SendCardTaskEnum, roadUid string, faceValue float64) { func (s *OrderPoolServiceImpl) matchOrdersForFaceValue(ctx context.Context, channel card_sender.SendCardTaskEnum, roadUid string, faceValue float64) {
ctx, span := otelTrace.CreateAsyncContext(ctx, "matchOrdersForFaceValue") ctx, span := otelTrace.CreateAsyncContext(ctx, "matchOrdersForFaceValue")
defer span.End() defer otelTrace.SafeEndSpan(span)
// 获取用户订单池中的订单 // 获取用户订单池中的订单
customerKey := fmt.Sprintf("%s:%s:%.2f", s.config.CustomerOrderPoolKey, roadUid, faceValue) customerKey := fmt.Sprintf("%s:%s:%.2f", s.config.CustomerOrderPoolKey, roadUid, faceValue)
@@ -587,7 +587,7 @@ func (s *OrderPoolServiceImpl) SubmitOrder(ctx context.Context, task card_sender
attribute.String("localOrderId", task.LocalOrderID), attribute.String("localOrderId", task.LocalOrderID),
), ),
) )
defer span.End() defer otelTrace.SafeEndSpan(span)
var err error var err error
var orderItem card_sender.OrderPoolItem var orderItem card_sender.OrderPoolItem

View File

@@ -104,7 +104,7 @@ type RefreshOrderTask struct {
func (t *RefreshOrderTask) Execute(ctx context.Context) error { func (t *RefreshOrderTask) Execute(ctx context.Context) error {
ctx, span := otelTrace.CreateLinkContext(ctx, "RefreshOrderTask") ctx, span := otelTrace.CreateLinkContext(ctx, "RefreshOrderTask")
defer span.End() defer otelTrace.SafeEndSpan(span)
key := fmt.Sprintf("%s:%s:%.2f", t.service.config.ProduceOrderPoolKey, t.roadUid, t.faceValue) key := fmt.Sprintf("%s:%s:%.2f", t.service.config.ProduceOrderPoolKey, t.roadUid, t.faceValue)
order, err2 := t.channel.GetSendCardTaskType().CreateOrder(ctx, t.roadUid, t.faceValue) order, err2 := t.channel.GetSendCardTaskType().CreateOrder(ctx, t.roadUid, t.faceValue)
span.AddEvent("endCreated", trace.WithTimestamp(time.Now())) span.AddEvent("endCreated", trace.WithTimestamp(time.Now()))