54 lines
957 B
Go
54 lines
957 B
Go
package config
|
|
|
|
import (
|
|
"github.com/namsral/flag"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type (
|
|
Database struct {
|
|
DSN string
|
|
Profiler string
|
|
}
|
|
)
|
|
|
|
var dbs map[string]*Database
|
|
|
|
func (c *Database) Validate() error {
|
|
if c == nil {
|
|
return nil
|
|
}
|
|
if c.DSN == "" {
|
|
return errors.New("No DB DSN is set, can't connect to database")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (*Database) Init(prefix ...string) *Database {
|
|
if dbs == nil {
|
|
dbs = make(map[string]*Database)
|
|
}
|
|
|
|
name := "default"
|
|
if len(prefix) > 0 {
|
|
name = prefix[0]
|
|
}
|
|
|
|
if db := dbs[name]; db != nil {
|
|
return db
|
|
}
|
|
|
|
p := func(s string) string {
|
|
if len(prefix) > 0 {
|
|
return prefix[0] + "-" + s
|
|
}
|
|
return s
|
|
}
|
|
|
|
db := new(Database)
|
|
flag.StringVar(&db.DSN, p("db-dsn"), "", "DSN for database connection (e.g. user:pass@tcp(db1:3306)/dbname?collation=utf8mb4_general_ci)")
|
|
flag.StringVar(&db.Profiler, p("db-profiler"), "", "Profiler for DB queries (none, stdout)")
|
|
dbs[name] = db
|
|
return db
|
|
}
|