Add DB configuration pool settings, as options to set, with defaults set.
diff --git a/api/api.go b/api/api.go
index 32a28aa..d378de1 100644
--- a/api/api.go
+++ b/api/api.go
@@ -27,10 +27,16 @@
)
const (
- configAPIListen = "api_listen"
- configExpVarPath = "api_expvar_path"
- configReadyPath = "api_ready"
- configHealthyPath = "api_healthy"
+ configAPIListen = "api_listen"
+ configExpVarPath = "api_expvar_path"
+ configReadyPath = "api_ready"
+ configHealthyPath = "api_healthy"
+ ConfigDBMaxConns = "db_config_max_conns"
+ ConfigDBIdleConns = "db_config_idle_conns"
+ ConfigDBConnsTimeout = "db_config_conns_timeout_seconds"
+ dbDefaultMaxConnsLimit = 1000
+ dbDefaultIdleConnsLimit = 1000
+ dbMaxConnTimeoutLimit = 120
)
var log apid.LogService
@@ -45,6 +51,10 @@
config.SetDefault(configReadyPath, "/ready")
config.SetDefault(configHealthyPath, "/healthy")
+ config.SetDefault(ConfigDBMaxConns, dbDefaultMaxConnsLimit)
+ config.SetDefault(ConfigDBIdleConns, dbDefaultIdleConnsLimit)
+ config.SetDefault(ConfigDBConnsTimeout, dbMaxConnTimeoutLimit)
+
listen := config.GetString(configAPIListen)
h, p, err := net.SplitHostPort(listen)
if err != nil {
diff --git a/data/data.go b/data/data.go
index 61aabb9..c5b0925 100644
--- a/data/data.go
+++ b/data/data.go
@@ -18,11 +18,15 @@
"database/sql"
"fmt"
"github.com/30x/apid-core"
+ "github.com/30x/apid-core/api"
"github.com/30x/apid-core/data/wrap"
+ "github.com/30x/apid-core/logger"
+ "github.com/Sirupsen/logrus"
"github.com/mattn/go-sqlite3"
"os"
"path"
"runtime"
+ "strings"
"sync"
"time"
)
@@ -171,10 +175,14 @@
log.Errorf("error enabling foreign_keys: %s", err)
return
}
- dbLvl := config.GetString("log_level")
- if dbLvl == "Debug" {
+ dbLvl := config.GetString(logger.ConfigLevel)
+ if strings.EqualFold(dbLvl, logrus.DebugLevel.String()) {
go printDBStatsInfo(db, versionedID)
}
+
+ db.SetMaxOpenConns(config.GetInt(api.ConfigDBMaxConns))
+ db.SetMaxIdleConns(config.GetInt(api.ConfigDBIdleConns))
+ db.SetConnMaxLifetime(time.Duration(config.GetInt(api.ConfigDBConnsTimeout)) * time.Second)
dbMap[versionedID] = db
return
}
diff --git a/logger/logger.go b/logger/logger.go
index 39f6e8b..7c16b17 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -24,7 +24,7 @@
)
const (
- configLevel = "log_level"
+ ConfigLevel = "log_level"
defaultLevel = logrus.ErrorLevel
@@ -42,10 +42,10 @@
func Base() apid.LogService {
if std == nil {
config = apid.Config()
- config.SetDefault(configLevel, defaultLevel.String())
- logLevel := config.GetString(configLevel)
+ config.SetDefault(ConfigLevel, defaultLevel.String())
+ logLevel := config.GetString(ConfigLevel)
fmt.Printf("Base log level: %s\n", logLevel)
- std = NewLogger(configLevel, logLevel)
+ std = NewLogger(ConfigLevel, logLevel)
}
return std
}
@@ -62,7 +62,7 @@
// note: config module xx log level using config var: xx_log_level = "debug"
func (l *logger) ForModule(name string) apid.LogService {
- configKey := fmt.Sprintf("%s_%s", name, configLevel)
+ configKey := fmt.Sprintf("%s_%s", name, ConfigLevel)
log := NewLogger(configKey, config.GetString(configKey)).WithField(moduleField, name)
std.Debugf("created logger '%s' at level %s", name, log.(loggerPlus).Level())
return log