|
4 | 4 | "context" |
5 | 5 | "fmt" |
6 | 6 | "github.com/scouter-contrib/scouter-agent-golang/scouterx/common" |
| 7 | + "github.com/scouter-contrib/scouter-agent-golang/scouterx/common/util/keygen" |
7 | 8 | "github.com/scouter-contrib/scouter-agent-golang/scouterx/conf" |
8 | 9 | "github.com/scouter-contrib/scouter-agent-golang/scouterx/counter" |
9 | 10 | "github.com/scouter-contrib/scouter-agent-golang/scouterx/netio" |
@@ -543,18 +544,53 @@ func StartApiCall(ctx context.Context, apiCallName string, address string) *netd |
543 | 544 | return nil |
544 | 545 | } |
545 | 546 |
|
| 547 | + return startApiCall(apiCallName, tctx, address) |
| 548 | +} |
| 549 | + |
| 550 | +const interserviceGxidHeaderKey = "X-Scouter-Gxid" |
| 551 | +const interserviceCallerHeaderKey = "X-Scouter-Caller" |
| 552 | +const interserviceCalleeHeaderKey = "X-Scouter-Callee" |
| 553 | +const interserviceCallerObjHeaderKey = "X-Scouter-Caller-Obj" |
| 554 | + |
| 555 | +func StartApiCallWithPropagation(ctx context.Context, req *http.Request, apiCallName string, address string) *netdata.ApiCallStep { |
| 556 | + defer common.ReportScouterPanic() |
| 557 | + if ctx == nil { |
| 558 | + return nil |
| 559 | + } |
| 560 | + tctx := tctxmanager.GetTraceContext(ctx) |
| 561 | + if tctx == nil { |
| 562 | + return nil |
| 563 | + } |
| 564 | + |
| 565 | + step := startApiCall(apiCallName, tctx, address) |
| 566 | + if tctx.Gxid == 0 { |
| 567 | + tctx.Gxid = tctx.Txid |
| 568 | + } |
| 569 | + if req != nil { |
| 570 | + req.Header.Add(interserviceGxidHeaderKey, util.IntToXlogString32(tctx.Gxid)) |
| 571 | + req.Header.Add(interserviceCallerHeaderKey, util.IntToXlogString32(tctx.Txid)) |
| 572 | + req.Header.Add(interserviceCalleeHeaderKey, util.IntToXlogString32(step.Txid)) |
| 573 | + req.Header.Add(interserviceCallerObjHeaderKey, strconv.FormatInt(int64(ac.ObjHash), 10)) |
| 574 | + } |
| 575 | + |
| 576 | + return step |
| 577 | +} |
| 578 | + |
| 579 | +func startApiCall(apiCallName string, tctx *netio.TraceContext, address string) *netdata.ApiCallStep { |
546 | 580 | step := netdata.NewApiCallStep() |
547 | 581 | step.Hash = netio.SendApicall(apiCallName) |
548 | 582 | step.StartTime = util.MillisToNow(tctx.StartTime) |
549 | 583 | if address != "" { |
550 | 584 | step.Opt = 1 |
551 | 585 | } |
552 | 586 | step.Address = address |
| 587 | + step.Txid = keygen.Next() |
553 | 588 | tctx.Profile.Push(step) |
554 | 589 |
|
555 | 590 | return step |
556 | 591 | } |
557 | 592 |
|
| 593 | + |
558 | 594 | func EndApiCall(ctx context.Context, step *netdata.ApiCallStep, err error) { |
559 | 595 | defer common.ReportScouterPanic() |
560 | 596 |
|
|
0 commit comments