diff --git a/go.mod b/go.mod index 4b526921401238367865074970d531eb8638bf58..48d3b18fc6e61957ca22bae496536bc4f6fe32c9 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 f38fffc633065ef5c85e6f9ce0e02a1a9f5c2d03..ced4cbe68e8121644c9d84ede9813e8258650960 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 ecec9f782c9b93b129c483e31ddc73f04afc259e..fcc0c4ef98fb88dd96c9c0a1344442563df74787 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 +}