Skip to content

Commit 800db82

Browse files
committed
add grpc trace id example
1 parent 1f9ec0e commit 800db82

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

example/grpc/grpc.go

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package main
2+
3+
import (
4+
"github.com/deepflowio/deepflow-wasm-go-sdk/sdk"
5+
sdkpb "github.com/deepflowio/deepflow-wasm-go-sdk/sdk/pb"
6+
)
7+
8+
//go:generate mkdir -p pb
9+
//go:generate bash -c "cd protoc-gen-demo && go build"
10+
//go:generate protoc --go_out=./pb --demo_out=./pb --plugin=protoc-gen-demo=./protoc-gen-demo/protoc-gen-demo --go-vtproto_out=./pb --go-vtp roto_opt=features=unmarshal ./demo.proto
11+
12+
func main() {
13+
sdk.SetParser(SomeParser{})
14+
sdk.Warn("plugin loaded")
15+
}
16+
17+
type SomeParser struct {
18+
}
19+
20+
func (p SomeParser) OnCustomMessage(ctx *sdk.CustomMessageCtx) sdk.Action {
21+
return sdk.ActionNext()
22+
}
23+
24+
func (p SomeParser) OnNatsMessage(message sdkpb.NatsMessage) sdk.Action {
25+
return sdk.ActionNext()
26+
}
27+
28+
func (p SomeParser) CustomMessageHookIn() uint64 {
29+
return 0
30+
//return sdk.CustomMessageHookProtocol(sdk.PROTOCOL_HTTP2, true)
31+
}
32+
33+
func (p SomeParser) HookIn() []sdk.HookBitmap {
34+
return []sdk.HookBitmap{
35+
// 一般只需要 hook 协议解析
36+
sdk.HOOK_POINT_HTTP_REQ,
37+
sdk.HOOK_POINT_HTTP_RESP,
38+
}
39+
}
40+
41+
func (p SomeParser) OnHttpReq(ctx *sdk.HttpReqCtx) sdk.Action {
42+
info := &sdk.L7ProtocolInfo{
43+
Req: &sdk.Request{},
44+
ProtocolMerge: true,
45+
IsEnd: true,
46+
Trace: &sdk.Trace{
47+
TraceID: "this-trace-id-from-wasm",
48+
},
49+
}
50+
return sdk.ParseActionAbortWithL7Info([]*sdk.L7ProtocolInfo{info})
51+
}
52+
53+
func (p SomeParser) OnHttpResp(ctx *sdk.HttpRespCtx) sdk.Action {
54+
return sdk.ActionNext()
55+
}
56+
57+
func (p SomeParser) OnCheckPayload(ctx *sdk.ParseCtx) (uint8, string) {
58+
// 这里是协议判断的逻辑, 返回 0 表示失败
59+
// return 0, ""
60+
return 1, "GrpcTraceID"
61+
}
62+
63+
func (p SomeParser) OnParsePayload(ctx *sdk.ParseCtx) sdk.Action {
64+
// 这里是解析协议的逻辑
65+
if ctx.L4 != sdk.TCP || ctx.L7 != 1 {
66+
return sdk.ActionNext()
67+
}
68+
return sdk.ActionNext()
69+
}

0 commit comments

Comments
 (0)