mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
feat(go): use single db handle; use connection pool;
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gravitl/netmaker/db"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/servercfg"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
@@ -34,15 +37,18 @@ func getPGConnString() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func initPGDB() error {
|
func initPGDB() error {
|
||||||
connString := getPGConnString()
|
gormDB := db.FromContext(db.WithContext(context.TODO()))
|
||||||
|
|
||||||
var dbOpenErr error
|
var dbOpenErr error
|
||||||
PGDB, dbOpenErr = sql.Open("postgres", connString)
|
PGDB, dbOpenErr = gormDB.DB()
|
||||||
if dbOpenErr != nil {
|
if dbOpenErr != nil {
|
||||||
return dbOpenErr
|
return dbOpenErr
|
||||||
}
|
}
|
||||||
dbOpenErr = PGDB.Ping()
|
|
||||||
|
|
||||||
return dbOpenErr
|
PGDB.SetMaxOpenConns(5)
|
||||||
|
PGDB.SetConnMaxLifetime(time.Hour)
|
||||||
|
|
||||||
|
return PGDB.Ping()
|
||||||
}
|
}
|
||||||
|
|
||||||
func pgCreateTable(tableName string) error {
|
func pgCreateTable(tableName string) error {
|
||||||
@@ -134,7 +140,7 @@ func pgFetchRecords(tableName string) (map[string]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pgCloseDB() {
|
func pgCloseDB() {
|
||||||
PGDB.Close()
|
//PGDB.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func pgIsConnected() bool {
|
func pgIsConnected() bool {
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
"github.com/gravitl/netmaker/db"
|
||||||
"path/filepath"
|
"time"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3" // need to blank import this package
|
_ "github.com/mattn/go-sqlite3" // need to blank import this package
|
||||||
)
|
)
|
||||||
@@ -29,21 +30,17 @@ var SQLITE_FUNCTIONS = map[string]interface{}{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func initSqliteDB() error {
|
func initSqliteDB() error {
|
||||||
// == create db file if not present ==
|
gormDB := db.FromContext(db.WithContext(context.TODO()))
|
||||||
if _, err := os.Stat("data"); os.IsNotExist(err) {
|
|
||||||
os.Mkdir("data", 0700)
|
|
||||||
}
|
|
||||||
dbFilePath := filepath.Join("data", dbFilename)
|
|
||||||
if _, err := os.Stat(dbFilePath); os.IsNotExist(err) {
|
|
||||||
os.Create(dbFilePath)
|
|
||||||
}
|
|
||||||
// == "connect" the database ==
|
|
||||||
var dbOpenErr error
|
var dbOpenErr error
|
||||||
SqliteDB, dbOpenErr = sql.Open("sqlite3", dbFilePath)
|
SqliteDB, dbOpenErr = gormDB.DB()
|
||||||
if dbOpenErr != nil {
|
if dbOpenErr != nil {
|
||||||
return dbOpenErr
|
return dbOpenErr
|
||||||
}
|
}
|
||||||
SqliteDB.SetMaxOpenConns(1)
|
|
||||||
|
SqliteDB.SetMaxOpenConns(5)
|
||||||
|
SqliteDB.SetConnMaxLifetime(time.Hour)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +131,7 @@ func sqliteFetchRecords(tableName string) (map[string]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sqliteCloseDB() {
|
func sqliteCloseDB() {
|
||||||
SqliteDB.Close()
|
//SqliteDB.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func sqliteConnected() bool {
|
func sqliteConnected() bool {
|
||||||
|
16
main.go
16
main.go
@@ -7,6 +7,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gravitl/netmaker/db"
|
||||||
|
"github.com/gravitl/netmaker/schema"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -18,7 +20,6 @@ import (
|
|||||||
"github.com/gravitl/netmaker/config"
|
"github.com/gravitl/netmaker/config"
|
||||||
controller "github.com/gravitl/netmaker/controllers"
|
controller "github.com/gravitl/netmaker/controllers"
|
||||||
"github.com/gravitl/netmaker/database"
|
"github.com/gravitl/netmaker/database"
|
||||||
"github.com/gravitl/netmaker/db"
|
|
||||||
"github.com/gravitl/netmaker/functions"
|
"github.com/gravitl/netmaker/functions"
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
@@ -26,7 +27,6 @@ import (
|
|||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/mq"
|
"github.com/gravitl/netmaker/mq"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
"github.com/gravitl/netmaker/schema"
|
|
||||||
"github.com/gravitl/netmaker/servercfg"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"github.com/gravitl/netmaker/serverctl"
|
"github.com/gravitl/netmaker/serverctl"
|
||||||
_ "go.uber.org/automaxprocs"
|
_ "go.uber.org/automaxprocs"
|
||||||
@@ -102,15 +102,19 @@ func initialize() { // Client Mode Prereq Check
|
|||||||
logger.FatalLog("error: must set NODE_ID, currently blank")
|
logger.FatalLog("error: must set NODE_ID, currently blank")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = database.InitializeDatabase(); err != nil {
|
|
||||||
logger.FatalLog("Error connecting to database: ", err.Error())
|
|
||||||
}
|
|
||||||
// initialize sql schema db.
|
// initialize sql schema db.
|
||||||
err = db.InitializeDB(schema.ListModels()...)
|
err = db.InitializeDB(schema.ListModels()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.FatalLog("Error connecting to v1 database: ", err.Error())
|
logger.FatalLog("error connecting to database: ", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Log(0, "database successfully connected")
|
logger.Log(0, "database successfully connected")
|
||||||
|
|
||||||
|
// initialize kv schema db.
|
||||||
|
if err = database.InitializeDatabase(); err != nil {
|
||||||
|
logger.FatalLog("error initializing database: ", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
initializeUUID()
|
initializeUUID()
|
||||||
//initialize cache
|
//initialize cache
|
||||||
_, _ = logic.GetNetworks()
|
_, _ = logic.GetNetworks()
|
||||||
|
Reference in New Issue
Block a user