mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Added support for account migration
This commit is contained in:
@@ -80,32 +80,42 @@ func main() {
|
||||
return
|
||||
}
|
||||
if migrate != nil && *migrate != "" { // Run migrator
|
||||
|
||||
dataDB, err := engine.ConfigureDataStorage(*dataDBType, *dataDBHost, *dataDBPort, *dataDBName, *dataDBUser, *dataDBPass, *dbDataEncoding, config.CgrConfig().CacheConfig, *loadHistorySize)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Print("#1 The redis db loaded")
|
||||
oldDataDB, err := engine.ConfigureDataStorage(*oldDataDBType, *oldDataDBHost, *oldDataDBPort, *oldDataDBName, *oldDataDBUser, *oldDataDBPass, *oldDBDataEncoding, config.CgrConfig().CacheConfig, *oldLoadHistorySize)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Print("#2 Old redis db loaded")
|
||||
storDB, err := engine.ConfigureStorStorage(*storDBType, *storDBHost, *storDBPort, *storDBName, *storDBUser, *storDBPass, *dbDataEncoding,
|
||||
config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Print("#3 Old mysql db loaded")
|
||||
|
||||
oldstorDB, err := engine.ConfigureStorStorage(*oldStorDBType, *oldStorDBHost, *oldStorDBPort, *oldStorDBName, *oldStorDBUser, *oldStorDBPass, *oldDBDataEncoding,
|
||||
config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Print("#4 Old mysql db loaded")
|
||||
|
||||
m,err := migrator.NewMigrator(dataDB, *dataDBType, *dbDataEncoding, storDB, *storDBType,oldDataDB,*oldDataDBType,*oldDBDataEncoding,oldstorDB,*oldStorDBType)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err:=m.Migrate(*migrate); err != nil {
|
||||
log.Print("#5 Migrator started")
|
||||
err = m.Migrate(*migrate);
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Print("Done migrating!")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ const CGRATES_CFG_JSON = `
|
||||
|
||||
"data_db": { // database used to store runtime data (eg: accounts, cdr stats)
|
||||
"db_type": "redis", // data_db type: <redis|mongo>
|
||||
"db_host": "127.0.0.1", // data_db host address
|
||||
"db_host": "192.168.100.40", // data_db host address
|
||||
"db_port": 6379, // data_db port to reach the database
|
||||
"db_name": "10", // data_db database name to connect to
|
||||
"db_user": "cgrates", // username to use when connecting to data_db
|
||||
@@ -97,11 +97,11 @@ const CGRATES_CFG_JSON = `
|
||||
|
||||
"stor_db": { // database used to store offline tariff plans and CDRs
|
||||
"db_type": "mysql", // stor database type to use: <mongo|mysql|postgres>
|
||||
"db_host": "127.0.0.1", // the host to connect to
|
||||
"db_host": "192.168.100.40", // the host to connect to
|
||||
"db_port": 3306, // the port to reach the stordb
|
||||
"db_name": "cgrates", // stor database name
|
||||
"db_user": "cgrates", // username to use when connecting to stordb
|
||||
"db_password": "", // password to use when connecting to stordb
|
||||
"db_password": "CGRateS.org", // password to use when connecting to stordb
|
||||
"max_open_conns": 100, // maximum database connections opened, not applying for mongo
|
||||
"max_idle_conns": 10, // maximum database connections idle, not applying for mongo
|
||||
"conn_max_lifetime": 0, // maximum amount of time in seconds a connection may be reused (0 for unlimited), not applying for mongo
|
||||
|
||||
@@ -13,12 +13,31 @@
|
||||
"rpc_gob": ":2013",
|
||||
"http": ":2080",
|
||||
},
|
||||
"data_db": { // database used to store runtime data (eg: accounts, cdr stats)
|
||||
"db_type": "redis", // data_db type: <redis|mongo>
|
||||
"db_host": "192.168.100.40", // data_db host address
|
||||
"db_port": 6379, // data_db port to reach the database
|
||||
"db_name": "10", // data_db database name to connect to
|
||||
"db_user": "cgrates", // username to use when connecting to data_db
|
||||
"db_password": "", // password to use when connecting to data_db
|
||||
"load_history_size": 10, // Number of records in the load history
|
||||
},
|
||||
|
||||
"stor_db": { // database used to store offline tariff plans and CDRs
|
||||
"db_password": "CGRateS.org", // password to use when connecting to stordb
|
||||
"db_type": "mysql", // stor database type to use: <mongo|mysql|postgres>
|
||||
"db_host": "192.168.100.40", // the host to connect to
|
||||
"db_port": 3306, // the port to reach the stordb
|
||||
"db_name": "cgrates", // stor database name
|
||||
"db_user": "cgrates", // username to use when connecting to stordb
|
||||
"db_password": "CGRateS.org", // password to use when connecting to stordb
|
||||
"max_open_conns": 100, // maximum database connections opened, not applying for mongo
|
||||
"max_idle_conns": 10, // maximum database connections idle, not applying for mongo
|
||||
"conn_max_lifetime": 0, // maximum amount of time in seconds a connection may be reused (0 for unlimited), not applying for mongo
|
||||
"cdrs_indexes": [], // indexes on cdrs table to speed up queries, used only in case of mongo
|
||||
},
|
||||
|
||||
|
||||
|
||||
"cache":{
|
||||
"destinations": {"limit": 10000, "ttl":"0s", "precache": true},
|
||||
"reverse_destinations": {"limit": 10000, "ttl":"0s", "precache": true},
|
||||
|
||||
@@ -36,16 +36,21 @@ const (
|
||||
func (m *Migrator) migrateAccounts() (err error) {
|
||||
switch m.dataDBType {
|
||||
case utils.REDIS:
|
||||
log.Print("#9 Starts migrateAccounts")
|
||||
var acntV1Keys []string
|
||||
acntV1Keys, err = m.oldDataDB.GetKeysForPrefix(v1AccountDBPrefix)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
log.Print("#10 it doesn't get to here",acntV1Keys)
|
||||
|
||||
for _, acntV1Key := range acntV1Keys {
|
||||
log.Print("#11 acc key:",acntV1Key)
|
||||
v1Acnt, err := m.getV1AccountFromDB(acntV1Key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Print("#8 it doesn't get to here")
|
||||
if v1Acnt != nil {
|
||||
acnt := v1Acnt.AsAccount()
|
||||
if err = m.dataDB.SetAccount(acnt); err != nil {
|
||||
@@ -53,6 +58,7 @@ func (m *Migrator) migrateAccounts() (err error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Print("#8 it doesn't get to here")
|
||||
// All done, update version wtih current one
|
||||
vrs := engine.Versions{utils.Accounts: engine.CurrentStorDBVersions()[utils.Accounts]}
|
||||
if err = m.dataDB.SetVersions(vrs, false); err != nil {
|
||||
@@ -61,6 +67,7 @@ func (m *Migrator) migrateAccounts() (err error) {
|
||||
err.Error(),
|
||||
fmt.Sprintf("error: <%s> when updating Accounts version into StorDB", err.Error()))
|
||||
}
|
||||
log.Print("#8 it doesn't get to here")
|
||||
return
|
||||
case utils.MONGO:
|
||||
dataDB := m.dataDB.(*engine.MongoStorage)
|
||||
@@ -93,20 +100,25 @@ func (m *Migrator) migrateAccounts() (err error) {
|
||||
}
|
||||
|
||||
func (m *Migrator) getV1AccountFromDB(key string) (*v1Account, error) {
|
||||
switch m.dataDBType {
|
||||
switch m.oldDataDBType {
|
||||
case utils.REDIS:
|
||||
dataDB := m.dataDB.(*engine.RedisStorage)
|
||||
log.Print("#12 start get ")
|
||||
dataDB := m.oldDataDB.(*engine.RedisStorage)
|
||||
log.Print("#12 start get")
|
||||
if strVal, err := dataDB.Cmd("GET", key).Bytes(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
log.Print("#12 start get")
|
||||
v1Acnt := &v1Account{Id: key}
|
||||
if err := m.oldmrshlr.Unmarshal(strVal, v1Acnt); err != nil {
|
||||
log.Print("#12 start get")
|
||||
if err := m.mrshlr.Unmarshal(strVal, v1Acnt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Print("#12 start get")
|
||||
return v1Acnt, nil
|
||||
}
|
||||
case utils.MONGO:
|
||||
dataDB := m.dataDB.(*engine.MongoStorage)
|
||||
dataDB := m.oldDataDB.(*engine.MongoStorage)
|
||||
mgoDB := dataDB.DB()
|
||||
defer mgoDB.Session.Close()
|
||||
v1Acnt := new(v1Account)
|
||||
@@ -118,7 +130,7 @@ func (m *Migrator) getV1AccountFromDB(key string) (*v1Account, error) {
|
||||
return nil, utils.NewCGRError(utils.Migrator,
|
||||
utils.ServerErrorCaps,
|
||||
utils.UnsupportedDB,
|
||||
fmt.Sprintf("error: unsupported: <%s> for getV1AccountFromDB method", m.dataDBType))
|
||||
fmt.Sprintf("error: unsupported: <%s> for getV1AccountFromDB method", m.oldDataDBType))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ package migrator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"log"
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
@@ -76,6 +76,7 @@ func (m *Migrator) Migrate(taskID string) (err error) {
|
||||
case utils.MetaCostDetails:
|
||||
err = m.migrateCostDetails()
|
||||
case utils.MetaAccounts:
|
||||
log.Print("#7 function is about to start")
|
||||
err = m.migrateAccounts()
|
||||
case "migrateActionPlans":
|
||||
err = m.migrateActionPlans()
|
||||
|
||||
Reference in New Issue
Block a user