Skip to content

Commit 4f18d26

Browse files
committed
api call with propagation
1 parent efc5946 commit 4f18d26

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

scouterx/strace/tracemain.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"github.com/scouter-contrib/scouter-agent-golang/scouterx/common"
7+
"github.com/scouter-contrib/scouter-agent-golang/scouterx/common/util/keygen"
78
"github.com/scouter-contrib/scouter-agent-golang/scouterx/conf"
89
"github.com/scouter-contrib/scouter-agent-golang/scouterx/counter"
910
"github.com/scouter-contrib/scouter-agent-golang/scouterx/netio"
@@ -543,18 +544,53 @@ func StartApiCall(ctx context.Context, apiCallName string, address string) *netd
543544
return nil
544545
}
545546

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 {
546580
step := netdata.NewApiCallStep()
547581
step.Hash = netio.SendApicall(apiCallName)
548582
step.StartTime = util.MillisToNow(tctx.StartTime)
549583
if address != "" {
550584
step.Opt = 1
551585
}
552586
step.Address = address
587+
step.Txid = keygen.Next()
553588
tctx.Profile.Push(step)
554589

555590
return step
556591
}
557592

593+
558594
func EndApiCall(ctx context.Context, step *netdata.ApiCallStep, err error) {
559595
defer common.ReportScouterPanic()
560596

0 commit comments

Comments
 (0)