Skip to content

Commit adbe970

Browse files
committed
feat: Change db to go-pg
1 parent 19c14b0 commit adbe970

4 files changed

Lines changed: 59 additions & 267 deletions

File tree

‎api/db/db.go‎

Lines changed: 14 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
11
package db
22

33
import (
4-
"fmt"
5-
"log"
4+
"context"
5+
"net"
66
"time"
77

8-
"github.com/jackc/pgx/v4"
9-
"github.com/jackc/pgx/v4/stdlib"
10-
"github.com/uptrace/bun"
11-
"github.com/uptrace/bun/dialect/pgdialect"
8+
"github.com/go-pg/pg/v10"
129
"go.uber.org/zap"
13-
"gorm.io/driver/postgres"
1410
"gorm.io/gorm"
1511
gormlogger "gorm.io/gorm/logger"
1612
"moul.io/zapgorm2"
1713

1814
"agones-minecraft/config"
19-
gamev1Model "agones-minecraft/models/v1/game"
20-
twitchv1Model "agones-minecraft/models/v1/twitch"
21-
userv1Model "agones-minecraft/models/v1/user"
2215
)
2316

2417
const (
@@ -27,36 +20,18 @@ const (
2720

2821
var db *gorm.DB
2922

30-
func New() *bun.DB {
23+
func New() *pg.DB {
3124
dbconfig := config.GetDBConfig()
3225

33-
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%s/%s?sslmode=disable",
34-
dbconfig.User,
35-
dbconfig.Password,
36-
dbconfig.Hostname,
37-
dbconfig.Port,
38-
dbconfig.Name,
39-
)
40-
41-
config, err := pgx.ParseConfig(dsn)
42-
if err != nil {
43-
panic(err)
44-
}
45-
46-
// disable prepared statements
47-
config.PreferSimpleProtocol = true
48-
49-
sqldb := stdlib.OpenDB(*config)
50-
51-
if err != nil {
52-
log.Fatal("error connecting to datbase")
53-
}
54-
55-
return bun.NewDB(sqldb, pgdialect.New())
26+
return pg.Connect(&pg.Options{
27+
Addr: net.JoinHostPort(dbconfig.Hostname, dbconfig.Port),
28+
User: dbconfig.User,
29+
Password: dbconfig.Password,
30+
Database: dbconfig.Name,
31+
})
5632
}
5733

5834
func Init() {
59-
var err error
6035
logger := zapgorm2.New(zap.L())
6136
logger.SlowThreshold = DefaultThreshold
6237

@@ -66,30 +41,13 @@ func Init() {
6641
logger.LogLevel = gormlogger.Info
6742
}
6843

69-
dbconfig := config.GetDBConfig()
44+
db := New()
7045

71-
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%s/%s",
72-
dbconfig.User,
73-
dbconfig.Password,
74-
dbconfig.Hostname,
75-
dbconfig.Port,
76-
dbconfig.Name,
77-
)
78-
79-
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{Logger: logger})
80-
if err != nil {
81-
zap.L().Fatal("error connecting to db", zap.Error(err))
46+
if err := db.Ping(context.Background()); err != nil {
47+
zap.L().Fatal("error pinging database", zap.Error(err))
8248
}
8349

84-
if config.GetEnv() == config.Development {
85-
if err = db.AutoMigrate(
86-
&userv1Model.User{},
87-
&twitchv1Model.TwitchToken{},
88-
&gamev1Model.Game{},
89-
); err != nil {
90-
zap.L().Fatal("error auto-migrating db", zap.Error(err))
91-
}
92-
}
50+
db.AddQueryHook(NewLogger(zap.L()))
9351

9452
}
9553

‎api/db/log.go‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package db
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/go-pg/pg/v10"
8+
"go.uber.org/zap"
9+
)
10+
11+
const (
12+
SlowThreshold time.Duration = 500 * time.Millisecond
13+
)
14+
15+
type DBLogger struct {
16+
logger *zap.Logger
17+
}
18+
19+
func NewLogger(logger *zap.Logger) pg.QueryHook {
20+
return &DBLogger{logger}
21+
}
22+
23+
func (l *DBLogger) BeforeQuery(ctx context.Context, _ *pg.QueryEvent) (context.Context, error) {
24+
return ctx, nil
25+
}
26+
27+
func (l *DBLogger) AfterQuery(ctx context.Context, q *pg.QueryEvent) error {
28+
elapsed := time.Since(q.StartTime)
29+
rows := q.Result.RowsAffected()
30+
31+
err := q.Err
32+
sql, _ := q.FormattedQuery() // err is always nil?
33+
34+
if err != nil {
35+
l.logger.Warn("trace", zap.Error(err), zap.Duration("elapsed", elapsed), zap.Int("rows", rows), zap.String("sql", string(sql)))
36+
} else if elapsed > SlowThreshold {
37+
l.logger.Warn("trace", zap.Duration("elapsed", elapsed), zap.Int("rows", rows), zap.String("sql", string(sql)))
38+
} else {
39+
l.logger.Info("trace", zap.Duration("elapsed", elapsed), zap.Int("rows", rows), zap.String("sql", string(sql)))
40+
}
41+
42+
return nil
43+
}

‎api/go.mod‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ require (
1717
github.com/google/uuid v1.2.0
1818
github.com/gorilla/sessions v1.2.1 // indirect
1919
github.com/imdario/mergo v0.3.8 // indirect
20-
github.com/jackc/pgproto3/v2 v2.0.7 // indirect
21-
github.com/jackc/pgx/v4 v4.11.0
2220
github.com/json-iterator/go v1.1.11 // indirect
21+
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
2322
github.com/leodido/go-urn v1.2.1 // indirect
2423
github.com/lestrrat-go/jwx v1.2.0
2524
github.com/magiconair/properties v1.8.5 // indirect
@@ -32,8 +31,6 @@ require (
3231
github.com/spf13/jwalterweatherman v1.1.0 // indirect
3332
github.com/spf13/viper v1.7.1
3433
github.com/ugorji/go v1.2.6 // indirect
35-
github.com/uptrace/bun v0.1.17
36-
github.com/uptrace/bun/dialect/pgdialect v0.1.17
3734
github.com/urfave/cli/v2 v2.3.0
3835
go.uber.org/multierr v1.7.0 // indirect
3936
go.uber.org/zap v1.16.0
@@ -43,7 +40,6 @@ require (
4340
golang.org/x/sys v0.0.0-20210608053332-aa57babbf139 // indirect
4441
gopkg.in/ini.v1 v1.62.0 // indirect
4542
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
46-
gorm.io/driver/postgres v1.1.0
4743
gorm.io/gorm v1.21.10
4844
k8s.io/api v0.21.1
4945
k8s.io/apimachinery v0.21.1

0 commit comments

Comments
 (0)