Skip to content

Commit dfb63c3

Browse files
author
Hein
committed
refactor(db): remove metrics enabling methods from adapters
1 parent e8d0ab2 commit dfb63c3

File tree

6 files changed

+201
-103
lines changed

6 files changed

+201
-103
lines changed

pkg/common/adapters/database/bun.go

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,6 @@ func (b *BunAdapter) SetMetricsEnabled(enabled bool) *BunAdapter {
122122
return b
123123
}
124124

125-
// EnableMetrics enables query metrics for this adapter.
126-
func (b *BunAdapter) EnableMetrics() *BunAdapter {
127-
return b.SetMetricsEnabled(true)
128-
}
129-
130-
// DisableMetrics disables query metrics for this adapter.
131-
func (b *BunAdapter) DisableMetrics() *BunAdapter {
132-
return b.SetMetricsEnabled(false)
133-
}
134-
135125
func (b *BunAdapter) getDB() *bun.DB {
136126
b.dbMu.RLock()
137127
defer b.dbMu.RUnlock()
@@ -1249,30 +1239,28 @@ func (b *BunSelectQuery) Having(having string, args ...interface{}) common.Selec
12491239
}
12501240

12511241
func (b *BunSelectQuery) Scan(ctx context.Context, dest interface{}) (err error) {
1242+
startedAt := time.Now()
12521243
defer func() {
12531244
if r := recover(); r != nil {
12541245
err = logger.HandlePanic("BunSelectQuery.Scan", r)
12551246
}
1247+
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, err)
12561248
}()
1257-
startedAt := time.Now()
12581249
if dest == nil {
1259-
return fmt.Errorf("destination cannot be nil")
1250+
err = fmt.Errorf("destination cannot be nil")
1251+
return err
12601252
}
12611253

12621254
err = b.query.Scan(ctx, dest)
12631255
if err != nil {
1264-
// Log SQL string for debugging
12651256
sqlStr := b.query.String()
12661257
logger.Error("BunSelectQuery.Scan failed. SQL: %s. Error: %v", sqlStr, err)
1267-
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, err)
1268-
return err
12691258
}
1270-
1271-
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, nil)
1272-
return nil
1259+
return err
12731260
}
12741261

12751262
func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
1263+
startedAt := time.Now()
12761264
defer func() {
12771265
if r := recover(); r != nil {
12781266
// Enhanced panic recovery with model information
@@ -1282,7 +1270,6 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
12821270
modelValue := model.Value()
12831271
modelInfo = fmt.Sprintf("Model type: %T", modelValue)
12841272

1285-
// Try to get the model's underlying struct type
12861273
v := reflect.ValueOf(modelValue)
12871274
if v.Kind() == reflect.Ptr {
12881275
v = v.Elem()
@@ -1302,11 +1289,12 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
13021289
logger.Error("Panic in BunSelectQuery.ScanModel: %v. %s. SQL: %s", r, modelInfo, sqlStr)
13031290
err = logger.HandlePanic("BunSelectQuery.ScanModel", r)
13041291
}
1292+
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, err)
13051293
}()
13061294
if b.query.GetModel() == nil {
1307-
return fmt.Errorf("model is nil")
1295+
err = fmt.Errorf("model is nil")
1296+
return err
13081297
}
1309-
startedAt := time.Now()
13101298

13111299
// Optional: Enable detailed field-level debugging (set to true to debug)
13121300
const enableDetailedDebug = true
@@ -1321,45 +1309,40 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
13211309

13221310
err = b.query.Scan(ctx)
13231311
if err != nil {
1324-
// Log SQL string for debugging
13251312
sqlStr := b.query.String()
13261313
logger.Error("BunSelectQuery.ScanModel failed. SQL: %s. Error: %v", sqlStr, err)
1327-
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, err)
13281314
return err
13291315
}
13301316

13311317
// After main query, load custom preloads using separate queries
13321318
if len(b.customPreloads) > 0 {
13331319
logger.Info("Loading %d custom preload(s) with separate queries", len(b.customPreloads))
1334-
if err := b.loadCustomPreloads(ctx); err != nil {
1320+
if err = b.loadCustomPreloads(ctx); err != nil {
13351321
logger.Error("Failed to load custom preloads: %v", err)
1336-
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, err)
13371322
return err
13381323
}
13391324
}
13401325

1341-
recordQueryMetrics(b.metricsEnabled, "SELECT", b.schema, b.entity, b.tableName, startedAt, nil)
13421326
return nil
13431327
}
13441328

13451329
func (b *BunSelectQuery) Count(ctx context.Context) (count int, err error) {
1330+
startedAt := time.Now()
13461331
defer func() {
13471332
if r := recover(); r != nil {
13481333
err = logger.HandlePanic("BunSelectQuery.Count", r)
13491334
count = 0
13501335
}
1336+
recordQueryMetrics(b.metricsEnabled, "COUNT", b.schema, b.entity, b.tableName, startedAt, err)
13511337
}()
1352-
startedAt := time.Now()
13531338
// If Model() was set, use bun's native Count() which works properly
13541339
if b.hasModel {
1355-
count, err := b.query.Count(ctx)
1340+
count, err = b.query.Count(ctx) // assign to named returns, not shadow vars
13561341
if err != nil {
1357-
// Log SQL string for debugging
13581342
sqlStr := b.query.String()
13591343
logger.Error("BunSelectQuery.Count failed. SQL: %s. Error: %v", sqlStr, err)
13601344
}
1361-
recordQueryMetrics(b.metricsEnabled, "COUNT", b.schema, b.entity, b.tableName, startedAt, err)
1362-
return count, err
1345+
return
13631346
}
13641347

13651348
// Otherwise, wrap as subquery to avoid "Model(nil)" error
@@ -1369,30 +1352,27 @@ func (b *BunSelectQuery) Count(ctx context.Context) (count int, err error) {
13691352
ColumnExpr("COUNT(*)")
13701353
err = countQuery.Scan(ctx, &count)
13711354
if err != nil {
1372-
// Log SQL string for debugging
13731355
sqlStr := countQuery.String()
13741356
logger.Error("BunSelectQuery.Count (subquery) failed. SQL: %s. Error: %v", sqlStr, err)
13751357
}
1376-
recordQueryMetrics(b.metricsEnabled, "COUNT", b.schema, b.entity, b.tableName, startedAt, err)
1377-
return count, err
1358+
return
13781359
}
13791360

13801361
func (b *BunSelectQuery) Exists(ctx context.Context) (exists bool, err error) {
1362+
startedAt := time.Now()
13811363
defer func() {
13821364
if r := recover(); r != nil {
13831365
err = logger.HandlePanic("BunSelectQuery.Exists", r)
13841366
exists = false
13851367
}
1368+
recordQueryMetrics(b.metricsEnabled, "EXISTS", b.schema, b.entity, b.tableName, startedAt, err)
13861369
}()
1387-
startedAt := time.Now()
13881370
exists, err = b.query.Exists(ctx)
13891371
if err != nil {
1390-
// Log SQL string for debugging
13911372
sqlStr := b.query.String()
13921373
logger.Error("BunSelectQuery.Exists failed. SQL: %s. Error: %v", sqlStr, err)
13931374
}
1394-
recordQueryMetrics(b.metricsEnabled, "EXISTS", b.schema, b.entity, b.tableName, startedAt, err)
1395-
return exists, err
1375+
return
13961376
}
13971377

13981378
// BunInsertQuery implements InsertQuery for Bun

pkg/common/adapters/database/gorm.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,6 @@ func (g *GormAdapter) SetMetricsEnabled(enabled bool) *GormAdapter {
4444
return g
4545
}
4646

47-
// EnableMetrics enables query metrics for this adapter.
48-
func (g *GormAdapter) EnableMetrics() *GormAdapter {
49-
return g.SetMetricsEnabled(true)
50-
}
51-
52-
// DisableMetrics disables query metrics for this adapter.
53-
func (g *GormAdapter) DisableMetrics() *GormAdapter {
54-
return g.SetMetricsEnabled(false)
55-
}
56-
5747
func (g *GormAdapter) getDB() *gorm.DB {
5848
g.dbMu.RLock()
5949
defer g.dbMu.RUnlock()
@@ -131,15 +121,15 @@ func (g *GormAdapter) NewSelect() common.SelectQuery {
131121
}
132122

133123
func (g *GormAdapter) NewInsert() common.InsertQuery {
134-
return &GormInsertQuery{db: g.getDB(), reconnect: g.reconnectDB, metricsEnabled: g.metricsEnabled}
124+
return &GormInsertQuery{db: g.getDB(), reconnect: g.reconnectDB, driverName: g.driverName, metricsEnabled: g.metricsEnabled}
135125
}
136126

137127
func (g *GormAdapter) NewUpdate() common.UpdateQuery {
138-
return &GormUpdateQuery{db: g.getDB(), reconnect: g.reconnectDB, metricsEnabled: g.metricsEnabled}
128+
return &GormUpdateQuery{db: g.getDB(), reconnect: g.reconnectDB, driverName: g.driverName, metricsEnabled: g.metricsEnabled}
139129
}
140130

141131
func (g *GormAdapter) NewDelete() common.DeleteQuery {
142-
return &GormDeleteQuery{db: g.getDB(), reconnect: g.reconnectDB, metricsEnabled: g.metricsEnabled}
132+
return &GormDeleteQuery{db: g.getDB(), reconnect: g.reconnectDB, driverName: g.driverName, metricsEnabled: g.metricsEnabled}
143133
}
144134

145135
func (g *GormAdapter) Exec(ctx context.Context, query string, args ...interface{}) (res common.Result, err error) {
@@ -693,20 +683,21 @@ type GormInsertQuery struct {
693683
schema string
694684
tableName string
695685
entity string
686+
driverName string
696687
metricsEnabled bool
697688
}
698689

699690
func (g *GormInsertQuery) Model(model interface{}) common.InsertQuery {
700691
g.model = model
701692
g.db = g.db.Model(model)
702-
g.schema, g.tableName = schemaAndTableFromModel(model, g.db.Name())
693+
g.schema, g.tableName = schemaAndTableFromModel(model, g.driverName)
703694
g.entity = entityNameFromModel(model, g.tableName)
704695
return g
705696
}
706697

707698
func (g *GormInsertQuery) Table(table string) common.InsertQuery {
708699
g.db = g.db.Table(table)
709-
g.schema, g.tableName = parseTableName(table, g.db.Name())
700+
g.schema, g.tableName = parseTableName(table, g.driverName)
710701
if g.entity == "" {
711702
g.entity = cleanMetricIdentifier(g.tableName)
712703
}
@@ -767,20 +758,21 @@ type GormUpdateQuery struct {
767758
schema string
768759
tableName string
769760
entity string
761+
driverName string
770762
metricsEnabled bool
771763
}
772764

773765
func (g *GormUpdateQuery) Model(model interface{}) common.UpdateQuery {
774766
g.model = model
775767
g.db = g.db.Model(model)
776-
g.schema, g.tableName = schemaAndTableFromModel(model, g.db.Name())
768+
g.schema, g.tableName = schemaAndTableFromModel(model, g.driverName)
777769
g.entity = entityNameFromModel(model, g.tableName)
778770
return g
779771
}
780772

781773
func (g *GormUpdateQuery) Table(table string) common.UpdateQuery {
782774
g.db = g.db.Table(table)
783-
g.schema, g.tableName = parseTableName(table, g.db.Name())
775+
g.schema, g.tableName = parseTableName(table, g.driverName)
784776
if g.entity == "" {
785777
g.entity = cleanMetricIdentifier(g.tableName)
786778
}
@@ -879,20 +871,21 @@ type GormDeleteQuery struct {
879871
schema string
880872
tableName string
881873
entity string
874+
driverName string
882875
metricsEnabled bool
883876
}
884877

885878
func (g *GormDeleteQuery) Model(model interface{}) common.DeleteQuery {
886879
g.model = model
887880
g.db = g.db.Model(model)
888-
g.schema, g.tableName = schemaAndTableFromModel(model, g.db.Name())
881+
g.schema, g.tableName = schemaAndTableFromModel(model, g.driverName)
889882
g.entity = entityNameFromModel(model, g.tableName)
890883
return g
891884
}
892885

893886
func (g *GormDeleteQuery) Table(table string) common.DeleteQuery {
894887
g.db = g.db.Table(table)
895-
g.schema, g.tableName = parseTableName(table, g.db.Name())
888+
g.schema, g.tableName = parseTableName(table, g.driverName)
896889
if g.entity == "" {
897890
g.entity = cleanMetricIdentifier(g.tableName)
898891
}

0 commit comments

Comments
 (0)