Update migrator for sessions costs

This commit is contained in:
TeoV
2018-02-20 10:49:25 -05:00
committed by Dan Christian Bogos
parent cdac600158
commit f0206c33dd
2 changed files with 70 additions and 11 deletions

View File

@@ -18,6 +18,7 @@ package migrator
import (
"flag"
"fmt"
"log"
"path"
"reflect"
@@ -30,6 +31,7 @@ import (
)
var (
isPostgres bool
path_in string
path_out string
cfg_in *config.CGRConfig
@@ -134,6 +136,7 @@ func TestMigratorITPostgresConnect(t *testing.T) {
func TestMigratorITPostgres(t *testing.T) {
action = utils.REDIS
isPostgres = true
for _, stest := range sTestsITMigrator {
t.Run("TestITMigratorOnPostgres", stest)
}
@@ -181,6 +184,7 @@ func TestMigratorITRedisConnect(t *testing.T) {
func TestMigratorITRedis(t *testing.T) {
action = utils.REDIS
isPostgres = false
for _, stest := range sTestsITMigrator {
t.Run("TestITMigratorOnRedis", stest)
}
@@ -1115,27 +1119,51 @@ func testMigratorStats(t *testing.T) {
func testMigratorSessionsCosts(t *testing.T) {
switch action {
case Move:
case utils.REDIS:
currentVersion := engine.CurrentStorDBVersions()
currentVersion[utils.SessionsCosts] = 1
err := mig.OutStorDB().SetVersions(currentVersion, false)
if err != nil {
t.Error("Error when setting version for SessionsCosts ", err.Error())
}
err, _ = mig.Migrate([]string{utils.MetaSessionsCosts})
if err.Error() != "Wrong version. Please use <cgr-migrator -migrate=*set_versions>" {
t.Error("Expecting error , received: %+v ", err)
}
if vrs, err := mig.OutStorDB().GetVersions(utils.SessionsCosts); err != nil {
t.Error(err)
} else if vrs[utils.SessionsCosts] != 1 {
t.Errorf("Expecting: 1, received: %+v", vrs[utils.SessionsCosts])
}
currentVersion = engine.CurrentStorDBVersions()
err = mig.OutStorDB().SetVersions(currentVersion, false)
if err != nil {
t.Error("Error when setting version for SessionsCosts ", err.Error())
var qry string
if isPostgres {
qry = `
CREATE TABLE sm_costs (
id SERIAL PRIMARY KEY,
cgrid VARCHAR(40) NOT NULL,
run_id VARCHAR(64) NOT NULL,
origin_host VARCHAR(64) NOT NULL,
origin_id VARCHAR(128) NOT NULL,
cost_source VARCHAR(64) NOT NULL,
usage BIGINT NOT NULL,
cost_details jsonb,
created_at TIMESTAMP WITH TIME ZONE,
deleted_at TIMESTAMP WITH TIME ZONE NULL,
UNIQUE (cgrid, run_id)
);
`
} else {
qry = fmt.Sprint("CREATE TABLE sm_costs ( id int(11) NOT NULL AUTO_INCREMENT, cgrid varchar(40) NOT NULL, run_id varchar(64) NOT NULL, origin_host varchar(64) NOT NULL, origin_id varchar(128) NOT NULL, cost_source varchar(64) NOT NULL, `usage` BIGINT NOT NULL, cost_details MEDIUMTEXT, created_at TIMESTAMP NULL,deleted_at TIMESTAMP NULL, PRIMARY KEY (`id`),UNIQUE KEY costid (cgrid, run_id),KEY origin_idx (origin_host, origin_id),KEY run_origin_idx (run_id, origin_id),KEY deleted_at_idx (deleted_at));")
}
if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec("DROP TABLE IF EXISTS sessions_costs;"); err != nil {
fmt.Printf("Eroare in test : %+v", err)
t.Error(err)
}
if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec("DROP TABLE IF EXISTS sm_costs;"); err != nil {
fmt.Printf("Eroare in test : %+v", err)
t.Error(err)
}
if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec(qry); err != nil {
fmt.Printf("Eroare in test : %+v", err)
t.Error(err)
}
err, _ = mig.Migrate([]string{utils.MetaSessionsCosts})
if vrs, err := mig.OutStorDB().GetVersions(utils.SessionsCosts); err != nil {
t.Error(err)
} else if vrs[utils.SessionsCosts] != 2 {

View File

@@ -19,8 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package migrator
import (
"errors"
"database/sql"
"fmt"
"log"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
@@ -41,7 +42,37 @@ func (m *Migrator) migrateSessionsCosts() (err error) {
"version number is not defined for SessionsCosts model")
}
if vrs[utils.SessionsCosts] < 2 {
return errors.New("Wrong version. Please use <cgr-migrator -migrate=*set_versions>")
var isPostGres bool
var storSQL *sql.DB
switch m.storDBType {
case utils.MYSQL:
isPostGres = false
storSQL = m.storDB.(*engine.SQLStorage).Db
case utils.POSTGRES:
isPostGres = true
storSQL = m.storDB.(*engine.SQLStorage).Db
default:
return utils.NewCGRError(utils.Migrator,
utils.MandatoryIEMissingCaps,
utils.UnsupportedDB,
fmt.Sprintf("unsupported database type: <%s>", m.storDBType))
}
qry := "RENAME TABLE sm_costs TO sessions_costs;"
if isPostGres {
qry = "ALTER TABLE sm_costs RENAME TO sessions_costs"
}
if _, err := storSQL.Exec(qry); err != nil {
log.Print(err)
return err
}
m.stats[utils.SessionsCosts] = 2
vrs = engine.Versions{utils.SessionsCosts: engine.CurrentStorDBVersions()[utils.SessionsCosts]}
if err := m.storDB.SetVersions(vrs, false); err != nil {
return utils.NewCGRError(utils.Migrator,
utils.ServerErrorCaps,
err.Error(),
fmt.Sprintf("error: <%s> when updating SessionsCosts version into StorDB", err.Error()))
}
}
return nil
}