Newer
Older
var ignoredTableInserts = []string{
"sync_audit",
"audit_event",
"communication_log",
"sync_product_variant",
"webhook_event",
"notification_audit_event",
"rollup_shipments_charge",
"rollup_shipments_event",
"cron_delayed_shipment_patch",
"orders_rollup",
"shipments_rollup",
"revenue_rollup",
type QueryHook struct {
Debug bool
}
func (d QueryHook) BeforeQuery(ctx context.Context, _ *bun.QueryEvent) context.Context {
return ctx
}
func (d QueryHook) AfterQuery(_ context.Context, event *bun.QueryEvent) {
sqlQuery := event.Query
queryDuration := time.Now().Sub(event.StartTime)
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) {
shouldLogQuery = false
break
}
}
}
if d.Debug || shouldLogQuery {
InfoWithFields(map[string]interface{}{"sql": sqlQuery, "t": queryDuration.String()}, "")
func TableNameForQuery(event *bun.QueryEvent) string {
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
}