diff options
Diffstat (limited to 'fluent-bit/examples/filter_wasm_go/filter.go')
-rw-r--r-- | fluent-bit/examples/filter_wasm_go/filter.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/fluent-bit/examples/filter_wasm_go/filter.go b/fluent-bit/examples/filter_wasm_go/filter.go new file mode 100644 index 000000000..fe7303c68 --- /dev/null +++ b/fluent-bit/examples/filter_wasm_go/filter.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "time" + "unsafe" + + "github.com/valyala/fastjson" +) + +//export go_filter +func go_filter(tag *uint8, tag_len uint, time_sec uint, time_nsec uint, record *uint8, record_len uint) *uint8 { + btag := unsafe.Slice(tag, tag_len) // Note, requires Go 1.17 (tinygo 0.20) + brecord := unsafe.Slice(record, record_len) + now := time.Unix(int64(time_sec), int64(time_nsec)) + + br := string(brecord) + var p fastjson.Parser + value, err := p.Parse(br) + if err != nil { + fmt.Println(err) + return nil + } + obj, err := value.Object() + if err != nil { + fmt.Println(err) + return nil + } + + var arena fastjson.Arena + obj.Set("time", arena.NewString(now.String())) + obj.Set("tag", arena.NewString(string(btag))) + obj.Set("original", arena.NewString(br)) + s := obj.String() + s += string(rune(0)) // Note: explicit null terminator. + rv := []byte(s) + + return &rv[0] +} + +func main() {} |