From 2e12643fe51948e87b99267fe1443056ddbdda64 Mon Sep 17 00:00:00 2001 From: Rambatino Date: Fri, 12 Apr 2024 10:48:41 +0100 Subject: [PATCH 1/6] fix: added a sigterm listener into main --- cmd/axiom-syslog-proxy/main.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/axiom-syslog-proxy/main.go b/cmd/axiom-syslog-proxy/main.go index 4708fd6..a55ff13 100644 --- a/cmd/axiom-syslog-proxy/main.go +++ b/cmd/axiom-syslog-proxy/main.go @@ -4,6 +4,8 @@ import ( "context" "flag" "os" + "os/signal" + "syscall" "github.com/axiomhq/axiom-go/axiom" "github.com/axiomhq/pkg/cmd" @@ -24,7 +26,7 @@ func main() { ) } -func run(_ context.Context, _ *zap.Logger, client *axiom.Client) error { +func run(ctx context.Context, _ *zap.Logger, client *axiom.Client) error { flag.Parse() config := &server.Config{ @@ -38,7 +40,15 @@ func run(_ context.Context, _ *zap.Logger, client *axiom.Client) error { return cmd.Error("create server", err) } - srv.Run() + // Setup cancellation context that will be cancelled on receiving a signal + ctx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM) + defer stop() - return nil + go func() { + srv.Run() + }() + + <-ctx.Done() + + return ctx.Err() } From 1fd5260e31a11cb51ee0bea760447b6fa4c41af9 Mon Sep 17 00:00:00 2001 From: Rambatino Date: Fri, 12 Apr 2024 11:23:59 +0100 Subject: [PATCH 2/6] fix(go.mod): added patch to go ver --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c73794e..f90c16b 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/axiomhq/axiom-syslog-proxy -go 1.22 +go 1.22.2 require ( github.com/axiomhq/axiom-go v0.17.5 From ddabe196f321db46fc7f53048eeff6a72aae69d1 Mon Sep 17 00:00:00 2001 From: Rambatino Date: Fri, 12 Apr 2024 11:25:58 +0100 Subject: [PATCH 3/6] fix(json): dont clean text as it removes the \ --- parser/syslog.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parser/syslog.go b/parser/syslog.go index 4ab04da..303a055 100755 --- a/parser/syslog.go +++ b/parser/syslog.go @@ -303,7 +303,7 @@ func parseRFC5424(msg *Log, data []byte, length int) error { if !valid { return errCorruptedData } - msg.Text = cleanString(textData, false) + msg.Text = textData parseMetadata(msg, data[i:]) From ed1a5c98de2a32ff0a3f1746f4bdbba1c52462c5 Mon Sep 17 00:00:00 2001 From: Rambatino Date: Fri, 12 Apr 2024 11:32:48 +0100 Subject: [PATCH 4/6] tests: added a couple of test with escape characters --- parser/parse_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/parser/parse_test.go b/parser/parse_test.go index 98bfece..a9eebdd 100755 --- a/parser/parse_test.go +++ b/parser/parse_test.go @@ -105,6 +105,24 @@ func (s *ParseTestSuite) TestParseJson() { severity: int64(Trace), metadata: map[string]interface{}{"forwind.favourites.artist": "Rune Clausen", "bool": "true", "forwind.favourites.release.link.type.origin": "home", "forwind.favourites.album": "Blindlight", "forwind.favourites.release.duration": int64(100), "forwind.favourites.release.catno": "fwd09", "forwind.favourites.release.link.url": "http://www.forwind.net"}, }, + { + raw: []byte(fmt.Sprintf("<34>1 %s mymachine.example.com su - ID47 - {\"level\":\"error\",\"service\":\"public-service\",\"env\":\"production\",\"error\":\"fail\",\"time\":\"2024-04-05T05:47:24Z\",\"req_id\":\"req-id\",\"message_inside\":\"this will work due to \\\" quote foobar\"}", nowFormatted)), + time: now, + application: "su", + hostname: "mymachine.example.com", + text: "{\"level\":\"error\",\"service\":\"public-service\",\"env\":\"production\",\"error\":\"fail\",\"time\":\"2024-04-05T05:47:24Z\",\"req_id\":\"req-id\",\"message_inside\":\"this will work due to \\\" quote foobar\"}", + severity: int64(Error), + metadata: map[string]interface{}{"error": "fail", "time": "2024-04-05T05:47:24Z", "req_id": "req-id", "message_inside": "this will work due to \" quote foobar", "service": "public-service", "env": "production"}, + }, + { + raw: []byte(fmt.Sprintf("<34>1 %s mymachine.example.com su - ID47 - {\"level\":\"error\",\"service\":\"public-service\",\"env\":\"production\",\"error\":\"fail\",\"time\":\"2024-04-05T05:47:24Z\",\"req_id\":\"req-id\",\"message\":\"this will work due to \\\" quote foobar\"}", nowFormatted)), + time: now, + application: "su", + hostname: "mymachine.example.com", + text: "this will work due to \" quote foobar", + severity: int64(Error), + metadata: map[string]interface{}{"service": "public-service", "env": "production", "error": "fail", "time": "2024-04-05T05:47:24Z", "req_id": "req-id"}, + }, } for number, c := range cases { From 1704c5b43287f5aa52000211c8e51f9f7ca29bda Mon Sep 17 00:00:00 2001 From: Rambatino Date: Tue, 16 Apr 2024 10:42:06 +0100 Subject: [PATCH 5/6] fix(cmd): cleaner context cancellation --- cmd/axiom-syslog-proxy/main.go | 14 ++------------ server/server.go | 6 +++--- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/cmd/axiom-syslog-proxy/main.go b/cmd/axiom-syslog-proxy/main.go index a55ff13..0dcc291 100644 --- a/cmd/axiom-syslog-proxy/main.go +++ b/cmd/axiom-syslog-proxy/main.go @@ -4,8 +4,6 @@ import ( "context" "flag" "os" - "os/signal" - "syscall" "github.com/axiomhq/axiom-go/axiom" "github.com/axiomhq/pkg/cmd" @@ -40,15 +38,7 @@ func run(ctx context.Context, _ *zap.Logger, client *axiom.Client) error { return cmd.Error("create server", err) } - // Setup cancellation context that will be cancelled on receiving a signal - ctx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM) - defer stop() + srv.Run(ctx) - go func() { - srv.Run() - }() - - <-ctx.Done() - - return ctx.Err() + return nil } diff --git a/server/server.go b/server/server.go index 21c9c59..9583be0 100644 --- a/server/server.go +++ b/server/server.go @@ -110,7 +110,7 @@ func (srv *Server) Flush() error { return nil } -func (srv *Server) Run() { +func (srv *Server) Run(ctx context.Context) { if srv.started { log.Print("server already running") return @@ -118,11 +118,11 @@ func (srv *Server) Run() { srv.started = true ticker := time.NewTicker(5 * time.Second) - done := make(chan bool) for { select { - case <-done: + case <-ctx.Done(): + srv.Flush() return case <-ticker.C: srv.Flush() From fde2c603fa595de956676746865b55a944efcdd2 Mon Sep 17 00:00:00 2001 From: Rambatino Date: Tue, 16 Apr 2024 11:18:40 +0100 Subject: [PATCH 6/6] chore(server): close before flush --- server/server.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/server.go b/server/server.go index 9583be0..f21099d 100644 --- a/server/server.go +++ b/server/server.go @@ -122,6 +122,8 @@ func (srv *Server) Run(ctx context.Context) { for { select { case <-ctx.Done(): + srv.tcpCloser.Close() + srv.udpCloser.Close() srv.Flush() return case <-ticker.C: