DBData encoding configuration

This commit is contained in:
DanB
2013-10-09 10:41:51 +02:00
parent 47c06835ea
commit 9c6de26fa5
9 changed files with 35 additions and 13 deletions

View File

@@ -312,7 +312,7 @@ func main() {
var logDb engine.LogStorage
var loadDb engine.LoadStorage
var cdrDb engine.CdrStorage
dataDb, err = engine.ConfigureDataStorage(cfg.DataDBType, cfg.DataDBHost, cfg.DataDBPort, cfg.DataDBName, cfg.DataDBUser, cfg.DataDBPass)
dataDb, err = engine.ConfigureDataStorage(cfg.DataDBType, cfg.DataDBHost, cfg.DataDBPort, cfg.DataDBName, cfg.DataDBUser, cfg.DataDBPass, cfg.DBDataEncoding)
if err != nil { // Cannot configure getter database, show stopper
engine.Logger.Crit(fmt.Sprintf("Could not configure dataDb: %s exiting!", err))
return
@@ -322,7 +322,7 @@ func main() {
if cfg.StorDBType == SAME {
logDb = dataDb.(engine.LogStorage)
} else {
logDb, err = engine.ConfigureLogStorage(cfg.StorDBType, cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass)
logDb, err = engine.ConfigureLogStorage(cfg.StorDBType, cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.DBDataEncoding)
if err != nil { // Cannot configure logger database, show stopper
engine.Logger.Crit(fmt.Sprintf("Could not configure logger database: %s exiting!", err))
return

View File

@@ -47,6 +47,8 @@ var (
stor_db_user = flag.String("stordb_user", cgrConfig.StorDBUser, "The storDb user to sign in as.")
stor_db_pass = flag.String("stordb_passwd", cgrConfig.StorDBPass, "The storDb user's password.")
dbdata_encoding = flag.String("dbdata_encoding", cgrConfig.DBDataEncoding, "The encoding used to store object data in strings")
flush = flag.Bool("flush", false, "Flush the database before importing")
tpid = flag.String("tpid", "", "The tariff plan id from the database")
dataPath = flag.String("path", ".", "The path containing the data files")
@@ -70,12 +72,12 @@ func main() {
var storDb engine.LoadStorage
// Init necessary db connections
if *fromStorDb {
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass)
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
} else if *toStorDb { // Import from csv files to storDb
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
} else { // Default load from csv files to dataDb
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass)
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding)
}
// Defer databases opened to be closed when we are done
for _, db := range []engine.Storage{dataDb, storDb} {

View File

@@ -45,12 +45,14 @@ type CGRConfig struct {
DataDBName string // The name of the database to connect to.
DataDBUser string // The user to sign in as.
DataDBPass string // The user's password.
DataDBEncoding string // The encoding used to store objects in string keys
StorDBType string // Should reflect the database type used to store logs
StorDBHost string // The host to connect to. Values that start with / are for UNIX domain sockets.
StorDBPort string // The port to bind to.
StorDBName string // The name of the database to connect to.
StorDBUser string // The user to sign in as.
StorDBPass string // The user's password.
DBDataEncoding string // The encoding used to store object data in strings: <msgpack|json>
RPCEncoding string // RPC encoding used on APIs: <gob|json>.
DefaultReqType string // Use this request type if not defined on top
DefaultTOR string // set default type of record
@@ -113,6 +115,7 @@ func (self *CGRConfig) setDefaults() error {
self.StorDBName = "cgrates"
self.StorDBUser = "cgrates"
self.StorDBPass = "CGRateS.org"
self.DBDataEncoding = utils.MSGPACK
self.RPCEncoding = JSON
self.DefaultReqType = utils.RATED
self.DefaultTOR = "0"
@@ -228,6 +231,9 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) {
if hasOpt = c.HasOption("global", "stordb_passwd"); hasOpt {
cfg.StorDBPass, _ = c.GetString("global", "stordb_passwd")
}
if hasOpt = c.HasOption("global", "dbdata_encoding"); hasOpt {
cfg.DBDataEncoding, _ = c.GetString("global", "dbdata_encoding")
}
if hasOpt = c.HasOption("global", "rpc_encoding"); hasOpt {
cfg.RPCEncoding, _ = c.GetString("global", "rpc_encoding")
}

View File

@@ -46,6 +46,7 @@ func TestDefaults(t *testing.T) {
eCfg.StorDBName = "cgrates"
eCfg.StorDBUser = "cgrates"
eCfg.StorDBPass = "CGRateS.org"
eCfg.DBDataEncoding = utils.MSGPACK
eCfg.RPCEncoding = JSON
eCfg.DefaultReqType = utils.RATED
eCfg.DefaultTOR = "0"
@@ -141,6 +142,7 @@ func TestConfigFromFile(t *testing.T) {
eCfg.StorDBName = "test"
eCfg.StorDBUser = "test"
eCfg.StorDBPass = "test"
eCfg.DBDataEncoding = "test"
eCfg.RPCEncoding = "test"
eCfg.DefaultReqType = "test"
eCfg.DefaultTOR = "test"

View File

@@ -14,6 +14,7 @@ stordb_port = test # The port to reach the logdb.
stordb_name = test # The name of the log database to connect to.
stordb_user = test # Username to use when connecting to logdb.
stordb_passwd = test # Password to use when connecting to logdb.
dbdata_encoding = test # The encoding used to store object data in strings: <msgpack|json>
rpc_encoding = test # RPC encoding used on APIs: <gob|json>.
default_reqtype = test # Default request type to consider when missing from requests: <""|prepaid|postpaid|pseudoprepaid|rated>.
default_tor = test # Default Type of Record to consider when missing from requests.

View File

@@ -17,6 +17,7 @@
# stordb_name = cgrates # The name of the log database to connect to.
# stordb_user = cgrates # Username to use when connecting to stordb.
# stordb_passwd = CGRateS.org # Password to use when connecting to stordb.
# dbdata_encoding = msgpack # The encoding used to store object data in strings: <msgpack|json>
# rpc_encoding = json # RPC encoding used on APIs: <gob|json>.
# default_reqtype = rated # Default request type to consider when missing from requests: <""|prepaid|postpaid|pseudoprepaid|rated>.
# default_tor = 0 # Default Type of Record to consider when missing from requests.

View File

@@ -34,7 +34,7 @@ type RedisStorage struct {
ms Marshaler
}
func NewRedisStorage(address string, db int, pass string) (Storage, error) {
func NewRedisStorage(address string, db int, pass, mrshlerStr string) (Storage, error) {
addrSplit := strings.Split(address, ":")
host := addrSplit[0]
port := 6379
@@ -56,7 +56,15 @@ func NewRedisStorage(address string, db int, pass string) (Storage, error) {
return nil, err
}
}
return &RedisStorage{db: ndb, dbNb: db, ms: NewCodecMsgpackMarshaler()}, nil
var mrshler Marshaler
if mrshlerStr == utils.MSGPACK {
mrshler = NewCodecMsgpackMarshaler()
} else if mrshlerStr == utils.JSON {
mrshler = new(JSONMarshaler)
} else {
return nil, fmt.Errorf("Unsupported marshaler: %v", mrshlerStr)
}
return &RedisStorage{db: ndb, dbNb: db, ms: mrshler}, nil
}
func (rs *RedisStorage) Close() {

View File

@@ -26,7 +26,7 @@ import (
// Various helpers to deal with database
func ConfigureDataStorage(db_type, host, port, name, user, pass string) (db DataStorage, err error) {
func ConfigureDataStorage(db_type, host, port, name, user, pass, marshaler string) (db DataStorage, err error) {
var d Storage
switch db_type {
case utils.REDIS:
@@ -39,7 +39,7 @@ func ConfigureDataStorage(db_type, host, port, name, user, pass string) (db Data
if port != "" {
host += ":" + port
}
d, err = NewRedisStorage(host, db_nb, pass)
d, err = NewRedisStorage(host, db_nb, pass, marshaler)
db = d.(DataStorage)
case utils.MONGO:
d, err = NewMongoStorage(host, port, name, user, pass)
@@ -53,7 +53,7 @@ func ConfigureDataStorage(db_type, host, port, name, user, pass string) (db Data
return db, nil
}
func ConfigureLogStorage(db_type, host, port, name, user, pass string) (db LogStorage, err error) {
func ConfigureLogStorage(db_type, host, port, name, user, pass, marshaler string) (db LogStorage, err error) {
var d Storage
switch db_type {
case utils.REDIS:
@@ -66,7 +66,7 @@ func ConfigureLogStorage(db_type, host, port, name, user, pass string) (db LogSt
if port != "" {
host += ":" + port
}
d, err = NewRedisStorage(host, db_nb, pass)
d, err = NewRedisStorage(host, db_nb, pass, marshaler)
db = d.(LogStorage)
case utils.MONGO:
d, err = NewMongoStorage(host, port, name, user, pass)
@@ -86,7 +86,7 @@ func ConfigureLogStorage(db_type, host, port, name, user, pass string) (db LogSt
return db, nil
}
func ConfigureLoadStorage(db_type, host, port, name, user, pass string) (db LoadStorage, err error) {
func ConfigureLoadStorage(db_type, host, port, name, user, pass, marshaler string) (db LoadStorage, err error) {
var d Storage
switch db_type {
case utils.POSTGRES:

View File

@@ -55,4 +55,6 @@ const (
ROUNDING_MIDDLE = "*middle"
ROUNDING_DOWN = "*down"
COMMENT_CHAR = '#'
JSON = "json"
MSGPACK = "msgpack"
)