migrate action plans

This commit is contained in:
Radu Ioan Fericean
2015-12-02 10:58:41 +02:00
parent 2ea36b56cd
commit 158b96f173
2 changed files with 48 additions and 1 deletions

View File

@@ -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 <redis>")
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
}

View File

@@ -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
}