From 158b96f1736794531c49676c196e687d321d1611 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 2 Dec 2015 10:58:41 +0200 Subject: [PATCH] migrate action plans --- cmd/cgr-loader/cgr-loader.go | 7 +++++- cmd/cgr-loader/migrator_rc8.go | 42 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index ac359032f..db41efc3d 100644 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -36,7 +36,7 @@ import ( var ( //separator = flag.String("separator", ",", "Default field separator") cgrConfig, _ = config.NewDefaultCGRConfig() - migrateRC8 = flag.String("migrate_rc8", "", "Migrate Accounts, Actions, ActionTriggers and DerivedChargers to RC8 structures, possible values: *all,acc,atr,act,dcs") + migrateRC8 = flag.String("migrate_rc8", "", "Migrate Accounts, Actions, ActionTriggers and DerivedChargers to RC8 structures, possible values: *all,acc,atr,act,dcs,apl") tpdb_type = flag.String("tpdb_type", cgrConfig.TpDbType, "The type of the TariffPlan database ") tpdb_host = flag.String("tpdb_host", cgrConfig.TpDbHost, "The TariffPlan host to connect to.") tpdb_port = flag.String("tpdb_port", cgrConfig.TpDbPort, "The TariffPlan port to bind to.") @@ -142,6 +142,11 @@ func main() { log.Print(err.Error()) } } + if strings.Contains(*migrateRC8, "apl") || strings.Contains(*migrateRC8, "*all") { + if err := migratorRC8rat.migrateActionPlans(); err != nil { + log.Print(err.Error()) + } + } log.Print("Done!") return } diff --git a/cmd/cgr-loader/migrator_rc8.go b/cmd/cgr-loader/migrator_rc8.go index e237f1dbb..a1f11378b 100644 --- a/cmd/cgr-loader/migrator_rc8.go +++ b/cmd/cgr-loader/migrator_rc8.go @@ -425,3 +425,45 @@ func (mig MigratorRC8) migrateDerivedChargers() error { } return nil } + +func (mig MigratorRC8) migrateActionPlans() error { + keys, err := mig.db.Cmd("KEYS", utils.ACTION_PLAN_PREFIX+"*").List() + if err != nil { + return err + } + aplsMap := make(map[string]engine.ActionPlans, len(keys)) + for _, key := range keys { + log.Printf("Migrating action plans: %s...", key) + var apls engine.ActionPlans + var values []byte + if values, err = mig.db.Cmd("GET", key).Bytes(); err == nil { + if err := mig.ms.Unmarshal(values, &apls); err != nil { + return err + } + } + // change all AccountIds + for _, apl := range apls { + for idx, actionId := range apl.AccountIds { + // fix id + idElements := strings.Split(actionId, utils.CONCATENATED_KEY_SEP) + if len(idElements) != 3 { + log.Printf("Malformed account ID %s", actionId) + continue + } + apl.AccountIds[idx] = fmt.Sprintf("%s:%s", idElements[1], idElements[2]) + } + } + aplsMap[key] = apls + } + // write data back + for key, apl := range aplsMap { + result, err := mig.ms.Marshal(apl) + if err != nil { + return err + } + if err = mig.db.Cmd("SET", key, result).Err; err != nil { + return err + } + } + return nil +}