Skip to content

Commit c3e8614

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

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

example/grpc/grpc.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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-vtproto_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+
}
31+
32+
func (p SomeParser) HookIn() []sdk.HookBitmap {
33+
return []sdk.HookBitmap{
34+
// 这里的钩子是在 HTTP/HTTP2/gRPC 解析中,目的是增强 HTTP/HTTP2/gRPC 协议解析的能力,
35+
// 解析方法和内容由用户自定义,但是日志解析后的协议字段依旧为 HTTP/HTTP2/gRPC.
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 1, "GrpcTraceID"
60+
}
61+
62+
func (p SomeParser) OnParsePayload(ctx *sdk.ParseCtx) sdk.Action {
63+
// 这里是解析协议的逻辑
64+
if ctx.L4 != sdk.TCP || ctx.L7 != 1 {
65+
return sdk.ActionNext()
66+
}
67+
return sdk.ActionNext()
68+
}

0 commit comments

Comments
 (0)