From f2481c577a4892623fd3376097085578adfc5da0 Mon Sep 17 00:00:00 2001 From: netixx Date: Thu, 2 Nov 2023 12:55:04 +0000 Subject: [PATCH] Implement WriteEvent on file output so that it can be used by 'inputs' components --- outputs/file/file_output.go | 55 ++++++++++++++++++++++++++++++++++++- outputs/output.go | 8 +++--- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/outputs/file/file_output.go b/outputs/file/file_output.go index e4312c33..14ebb724 100644 --- a/outputs/file/file_output.go +++ b/outputs/file/file_output.go @@ -267,7 +267,60 @@ func (f *File) Write(ctx context.Context, rsp proto.Message, meta outputs.Meta) } } -func (f *File) WriteEvent(ctx context.Context, ev *formatters.EventMsg) {} +func (f *File) WriteEvent(ctx context.Context, ev *formatters.EventMsg) { + select { + case <-ctx.Done(): + return + default: + } + var evs = []*formatters.EventMsg{ev} + for _, proc := range f.evps { + evs = proc.Apply(evs...) + } + toWrite := []byte{} + if f.Cfg.SplitEvents { + for _, pev := range evs { + var err error + var b []byte + if f.Cfg.Multiline { + b, err = json.MarshalIndent(pev, "", f.Cfg.Indent) + } else { + b, err = json.Marshal(pev) + } + if err != nil { + fmt.Printf("failed to WriteEvent: %v", err) + numberOfFailWriteMsgs.WithLabelValues(f.file.Name(), "marshal_error").Inc() + return + } + toWrite = append(toWrite, b...) + toWrite = append(toWrite, []byte(f.Cfg.Separator)...) + } + } else { + var err error + var b []byte + if f.Cfg.Multiline { + b, err = json.MarshalIndent(evs, "", f.Cfg.Indent) + } else { + b, err = json.Marshal(evs) + } + if err != nil { + fmt.Printf("failed to WriteEvent: %v", err) + numberOfFailWriteMsgs.WithLabelValues(f.file.Name(), "marshal_error").Inc() + return + } + toWrite = append(toWrite, b...) + toWrite = append(toWrite, []byte(f.Cfg.Separator)...) + } + + n, err := f.file.Write(toWrite) + if err != nil { + fmt.Printf("failed to WriteEvent: %v", err) + numberOfFailWriteMsgs.WithLabelValues(f.file.Name(), "write_error").Inc() + return + } + numberOfWrittenBytes.WithLabelValues(f.file.Name()).Add(float64(n)) + numberOfWrittenMsgs.WithLabelValues(f.file.Name()).Inc() +} // Close // func (f *File) Close() error { diff --git a/outputs/output.go b/outputs/output.go index db080c23..6fc12d66 100644 --- a/outputs/output.go +++ b/outputs/output.go @@ -140,11 +140,11 @@ var ( template.New("target-template"). Funcs(TemplateFuncs). Parse(defaultTargetTemplateString)) -) -var TemplateFuncs = template.FuncMap{ - "host": utils.GetHost, -} + TemplateFuncs = template.FuncMap{ + "host": utils.GetHost, + } +) const ( defaultTargetTemplateString = `