From 7272b7d9205cea94989253ad7885d12681aa9624 Mon Sep 17 00:00:00 2001 From: Johan de Klerk <johan@shiplogic.com> Date: Tue, 3 Oct 2023 11:17:39 +0200 Subject: [PATCH] Don't log SQL queries for certain tables --- go.mod | 2 ++ go.sum | 4 ++++ logs/database_logs.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/go.mod b/go.mod index 4b52692..48d3b18 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/opensearch-project/opensearch-go/v2 v2.2.0 github.com/pkg/errors v0.9.1 github.com/r3labs/diff/v2 v2.14.2 + github.com/samber/lo v1.38.1 github.com/sirupsen/logrus v1.8.1 github.com/thoas/go-funk v0.9.1 github.com/uptrace/bun v1.1.14 @@ -41,6 +42,7 @@ require ( github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/sys v0.8.0 // indirect google.golang.org/appengine v1.6.6 // indirect diff --git a/go.sum b/go.sum index f38fffc..ced4cbe 100644 --- a/go.sum +++ b/go.sum @@ -129,6 +129,8 @@ github.com/r3labs/diff/v2 v2.14.2 h1:1HVhQKwg1YnoCWzCYlOWYLG4C3yfTudZo5AcrTSgCTc github.com/r3labs/diff/v2 v2.14.2/go.mod h1:I8noH9Fc2fjSaMxqF3G2lhDdC0b+JXCfyx85tWFM9kc= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= +github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= @@ -176,6 +178,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= diff --git a/logs/database_logs.go b/logs/database_logs.go index ecec9f7..fcc0c4e 100644 --- a/logs/database_logs.go +++ b/logs/database_logs.go @@ -2,11 +2,21 @@ package logs import ( "context" + "github.com/samber/lo" "github.com/uptrace/bun" + "reflect" "strings" "time" ) +var ignoredTableInserts = []string{ + "sync_audit", + "audit", + "communication_logs", + "sync_product_variants", + "webhook_events", +} + type QueryHook struct { Debug bool } @@ -22,6 +32,13 @@ func (d QueryHook) AfterQuery(_ context.Context, event *bun.QueryEvent) { queryPrefixesToIgnore := []string{"SELECT", "BEGIN", "COMMIT"} shouldLogQuery := !strings.Contains(sqlQuery, "api_key") + + // Don't log queries for certain tables + tableName := TableNameForQuery(event) + if lo.Contains(ignoredTableInserts, tableName) { + shouldLogQuery = false + } + if shouldLogQuery { for _, prefixToIgnore := range queryPrefixesToIgnore { if strings.HasPrefix(sqlQuery, prefixToIgnore) { @@ -36,3 +53,23 @@ func (d QueryHook) AfterQuery(_ context.Context, event *bun.QueryEvent) { } return } + +func TableNameForQuery(event *bun.QueryEvent) string { + model := event.Model.Value() + + var modelObject reflect.Type + t := reflect.TypeOf(model) + pointerToObject := t.Elem() + + if pointerToObject.Kind() == reflect.Slice { + // Object is an array of objects. Get the struct type from the array + sliceObject := pointerToObject.Elem() + modelObject = sliceObject + } else { + // Object is a struct + modelObject = pointerToObject + } + + tableName := event.DB.Table(modelObject).Alias + return tableName +} -- GitLab