NewGormDbEx acts like NewGormDb but accept extra sessionConfig
(configReader config.ConfigReader, logger log.Logger, sessionConfig *dal.SessionConfig)
| 49 | |
| 50 | // NewGormDbEx acts like NewGormDb but accept extra sessionConfig |
| 51 | func NewGormDbEx(configReader config.ConfigReader, logger log.Logger, sessionConfig *dal.SessionConfig) (*gorm.DB, errors.Error) { |
| 52 | dbLoggingLevel := gormLogger.Error |
| 53 | switch strings.ToLower(configReader.GetString("DB_LOGGING_LEVEL")) { |
| 54 | case "silent": |
| 55 | dbLoggingLevel = gormLogger.Silent |
| 56 | case "warn": |
| 57 | dbLoggingLevel = gormLogger.Warn |
| 58 | case "info": |
| 59 | dbLoggingLevel = gormLogger.Info |
| 60 | } |
| 61 | |
| 62 | idleConns := configReader.GetInt("DB_IDLE_CONNS") |
| 63 | if idleConns == 0 { |
| 64 | idleConns = 10 |
| 65 | } |
| 66 | dbMaxOpenConns := configReader.GetInt("DB_MAX_CONNS") |
| 67 | if dbMaxOpenConns <= 0 { |
| 68 | dbMaxOpenConns = 100 |
| 69 | } |
| 70 | |
| 71 | dbConfig := &gorm.Config{ |
| 72 | Logger: gormLogger.New( |
| 73 | logger, |
| 74 | gormLogger.Config{ |
| 75 | SlowThreshold: time.Second, // Slow SQL threshold |
| 76 | LogLevel: dbLoggingLevel, // Log level |
| 77 | IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger |
| 78 | Colorful: true, // Disable color |
| 79 | }, |
| 80 | ), |
| 81 | // PrepareStmt: sessionConfig.PrepareStmt, |
| 82 | SkipDefaultTransaction: sessionConfig.SkipDefaultTransaction, |
| 83 | } |
| 84 | dbUrl := configReader.GetString("DB_URL") |
| 85 | if dbUrl == "" { |
| 86 | return nil, errors.BadInput.New("DB_URL is required, please set it in environment variable or .env file") |
| 87 | } |
| 88 | db, err := MakeDbConnection(dbUrl, dbConfig) |
| 89 | if err != nil { |
| 90 | return nil, errors.Convert(err) |
| 91 | } |
| 92 | sqlDB, err := db.DB() |
| 93 | if err != nil { |
| 94 | return nil, errors.Convert(err) |
| 95 | } |
| 96 | sqlDB.SetMaxIdleConns(idleConns) |
| 97 | sqlDB.SetMaxOpenConns(dbMaxOpenConns) |
| 98 | sqlDB.SetConnMaxLifetime(time.Hour) |
| 99 | |
| 100 | return db, errors.Convert(err) |
| 101 | } |
| 102 | |
| 103 | func getUserString(u *url.URL) string { |
| 104 | userString := u.User.Username() |