diff --git a/internal/api/errors/errors.go b/internal/api/errors/errors.go index 657dcf9..ad1bc1b 100644 --- a/internal/api/errors/errors.go +++ b/internal/api/errors/errors.go @@ -2,10 +2,10 @@ package errors import ( "errors" - "fmt" "net/http" "github.com/gin-gonic/gin" + "go.uber.org/zap" ) func ReturnError(err error) error { @@ -28,8 +28,8 @@ func Return404(c *gin.Context) { } func RaiseInternalErr(c *gin.Context, err error) { - intErr := fmt.Errorf("%w: %w", ErrInternalError, err) - c.AbortWithStatusJSON(http.StatusInternalServerError, ReturnError(intErr)) + zap.L().Error("internal server error", zap.Error(err)) + c.AbortWithStatusJSON(http.StatusInternalServerError, ReturnError(ErrInternalError)) } func RaiseBadRequestErr(c *gin.Context, err error) { diff --git a/internal/db/db.go b/internal/db/db.go index ff0820b..cf0c2de 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -15,6 +15,14 @@ import ( "github.com/stackmon/otc-status-dashboard/internal/event" ) +// Connection pool defaults. +const ( + dbMaxOpenConns = 25 + dbMaxIdleConns = 10 + dbConnMaxLifetime = 5 * time.Minute + dbConnMaxIdleTime = 30 * time.Second +) + type DB struct { g *gorm.DB } @@ -40,6 +48,16 @@ func New(c *conf.Config) (*DB, error) { return nil, err } + sqlDB, err := g.DB() + if err != nil { + return nil, fmt.Errorf("getting underlying sql.DB: %w", err) + } + + sqlDB.SetMaxOpenConns(dbMaxOpenConns) + sqlDB.SetMaxIdleConns(dbMaxIdleConns) + sqlDB.SetConnMaxLifetime(dbConnMaxLifetime) + sqlDB.SetConnMaxIdleTime(dbConnMaxIdleTime) + return &DB{g: g}, nil }