From c31210feabf415cfe1b1c413aec53fcdea2f034a Mon Sep 17 00:00:00 2001 From: Trial97 Date: Thu, 21 Feb 2019 10:39:47 +0200 Subject: [PATCH] Added user_filters in migrator --- cmd/cgr-migrator/cgr-migrator.go | 1 + config/config_defaults.go | 1 + config/config_json_test.go | 1 + config/libconfig_json.go | 1 + config/migratorcfg.go | 7 +++++++ data/conf/samples/tutmongo/cgrates.json | 1 + data/conf/samples/tutmysql/cgrates.json | 1 + migrator/user.go | 5 +++++ migrator/user_it_test.go | 9 ++------- migrator/user_test.go | 24 ++++++++++-------------- 10 files changed, 30 insertions(+), 21 deletions(-) diff --git a/cmd/cgr-migrator/cgr-migrator.go b/cmd/cgr-migrator/cgr-migrator.go index 29f809a47..000ebbffe 100755 --- a/cmd/cgr-migrator/cgr-migrator.go +++ b/cmd/cgr-migrator/cgr-migrator.go @@ -327,6 +327,7 @@ func main() { if err != nil { log.Fatal(err) } + config.SetCgrConfig(mgrCfg) if migrate != nil && *migrate != "" { // Run migrator migrstats := make(map[string]int) mig := strings.Split(*migrate, ",") diff --git a/config/config_defaults.go b/config/config_defaults.go index 93a3cddd4..280f5931b 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -721,6 +721,7 @@ const CGRATES_CFG_JSON = ` "out_stordb_name": "cgrates", "out_stordb_user": "cgrates", "out_stordb_password": "", + "users_filters":[], }, diff --git a/config/config_json_test.go b/config/config_json_test.go index 2ad3f1bf3..ef7bade77 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -1465,6 +1465,7 @@ func TestDfMigratorCfg(t *testing.T) { Out_storDB_name: utils.StringPointer("cgrates"), Out_storDB_user: utils.StringPointer("cgrates"), Out_storDB_password: utils.StringPointer(""), + Users_filters: &[]string{}, } if cfg, err := dfCgrJsonCfg.MigratorCfgJson(); err != nil { t.Error(err) diff --git a/config/libconfig_json.go b/config/libconfig_json.go index f5db14e36..b7b087660 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -546,6 +546,7 @@ type MigratorCfgJson struct { Out_storDB_name *string Out_storDB_user *string Out_storDB_password *string + Users_filters *[]string } type FcTemplateJsonCfg struct { diff --git a/config/migratorcfg.go b/config/migratorcfg.go index cca8b990d..266565be5 100644 --- a/config/migratorcfg.go +++ b/config/migratorcfg.go @@ -37,6 +37,7 @@ type MigratorCgrCfg struct { OutStorDBName string OutStorDBUser string OutStorDBPassword string + UsersFilters []string } func (mg *MigratorCgrCfg) loadFromJsonCfg(jsnCfg *MigratorCfgJson) (err error) { @@ -85,5 +86,11 @@ func (mg *MigratorCgrCfg) loadFromJsonCfg(jsnCfg *MigratorCfgJson) (err error) { if jsnCfg.Out_storDB_password != nil { mg.OutStorDBPassword = *jsnCfg.Out_storDB_password } + if jsnCfg.Users_filters != nil && len(*jsnCfg.Users_filters) != 0 { + mg.UsersFilters = make([]string, len(*jsnCfg.Users_filters)) + for i, v := range *jsnCfg.Users_filters { + mg.UsersFilters[i] = v + } + } return nil } diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json index 118e6ef6a..4aaa6ccb6 100644 --- a/data/conf/samples/tutmongo/cgrates.json +++ b/data/conf/samples/tutmongo/cgrates.json @@ -155,6 +155,7 @@ "out_stordb_type": "mongo", "out_stordb_port": "27017", "out_stordb_name": "cgrates", + "users_filters":["Account"], }, diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json index 4db45849f..0246f9db2 100644 --- a/data/conf/samples/tutmysql/cgrates.json +++ b/data/conf/samples/tutmysql/cgrates.json @@ -282,6 +282,7 @@ "migrator":{ "out_stordb_password": "CGRateS.org", + "users_filters":["Account"], }, diff --git a/migrator/user.go b/migrator/user.go index f6f16c57d..36cd60349 100644 --- a/migrator/user.go +++ b/migrator/user.go @@ -50,6 +50,7 @@ func (ud *v1UserProfile) SetId(id string) error { } func userProfile2attributeProfile(user *v1UserProfile) (attr *engine.AttributeProfile) { + usrFltr := config.CgrConfig().MigratorCgrCfg().UsersFilters attr = &engine.AttributeProfile{ Tenant: user.Tenant, ID: user.UserName, @@ -61,6 +62,10 @@ func userProfile2attributeProfile(user *v1UserProfile) (attr *engine.AttributePr Weight: user.Weight, } for fieldname, substitute := range user.Profile { + if utils.IsSliceMember(usrFltr, fieldname) { + attr.FilterIDs = append(attr.FilterIDs, fmt.Sprintf("*string:%s:%s", fieldname, substitute)) + continue + } attr.Attributes = append(attr.Attributes, &engine.Attribute{ FieldName: fieldname, Initial: utils.META_ANY, diff --git a/migrator/user_it_test.go b/migrator/user_it_test.go index c303cda2b..b96ca2a9a 100644 --- a/migrator/user_it_test.go +++ b/migrator/user_it_test.go @@ -85,6 +85,7 @@ func testUsrStart(testName, inPath, outPath, action string, t *testing.T) { if usrCfgIn, err = config.NewCGRConfigFromFolder(inPath); err != nil { t.Fatal(err) } + config.SetCgrConfig(usrCfgIn) if usrCfgOut, err = config.NewCGRConfigFromFolder(outPath); err != nil { t.Fatal(err) } @@ -144,15 +145,9 @@ func testUsrITMigrateAndMove(t *testing.T) { Tenant: defaultTenant, ID: "1001", Contexts: []string{utils.META_ANY}, - FilterIDs: make([]string, 0), + FilterIDs: []string{"*string:Account:1002"}, ActivationInterval: nil, Attributes: []*engine.Attribute{ - { - FieldName: "Account", - Initial: utils.META_ANY, - Substitute: config.NewRSRParsersMustCompile("1002", true, utils.INFIELD_SEP), - Append: true, - }, { FieldName: "ReqType", Initial: utils.META_ANY, diff --git a/migrator/user_test.go b/migrator/user_test.go index 75a8dc8ae..82c2768cd 100644 --- a/migrator/user_test.go +++ b/migrator/user_test.go @@ -19,6 +19,7 @@ along with this program. If not, see package migrator import ( + "path" "reflect" "sort" "testing" @@ -29,6 +30,13 @@ import ( ) func TestUserProfile2attributeProfile(t *testing.T) { + inPath := path.Join("/usr/share/cgrates", "samples", "tutmongo") + usrCfgIn, err := config.NewCGRConfigFromFolder(inPath) + if err != nil { + t.Fatal(err) + } + usrCfgIn.MigratorCgrCfg().UsersFilters = []string{"Account"} + config.SetCgrConfig(usrCfgIn) users := map[int]*v1UserProfile{ 0: &v1UserProfile{ Tenant: defaultTenant, @@ -74,15 +82,9 @@ func TestUserProfile2attributeProfile(t *testing.T) { Tenant: defaultTenant, ID: "1001", Contexts: []string{utils.META_ANY}, - FilterIDs: make([]string, 0), + FilterIDs: []string{"*string:Account:1002"}, ActivationInterval: nil, Attributes: []*engine.Attribute{ - { - FieldName: "Account", - Initial: utils.META_ANY, - Substitute: config.NewRSRParsersMustCompile("1002", true, utils.INFIELD_SEP), - Append: true, - }, { FieldName: "Subject", Initial: utils.META_ANY, @@ -97,15 +99,9 @@ func TestUserProfile2attributeProfile(t *testing.T) { Tenant: defaultTenant, ID: "1001", Contexts: []string{utils.META_ANY}, - FilterIDs: make([]string, 0), + FilterIDs: []string{"*string:Account:1002"}, ActivationInterval: nil, Attributes: []*engine.Attribute{ - { - FieldName: "Account", - Initial: utils.META_ANY, - Substitute: config.NewRSRParsersMustCompile("1002", true, utils.INFIELD_SEP), - Append: true, - }, { FieldName: "ReqType", Initial: utils.META_ANY,