diff --git a/actions/accounts.go b/actions/accounts.go index f80c33033..d49a74386 100644 --- a/actions/accounts.go +++ b/actions/accounts.go @@ -59,7 +59,7 @@ func (aL *actSetBalance) execute(ctx *context.Context, data utils.MapStorage, tr } for i, actD := range aL.cfg().Diktats { var rsr config.RSRParsers - if rsr, err = actD.RSRValues(aL.config.GeneralCfg().RSRSep); err != nil { + if rsr, err = actD.RSRValues(); err != nil { return } var val string diff --git a/agents/agentreq.go b/agents/agentreq.go index 25d1f1007..831d88058 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -360,7 +360,7 @@ func (ar *AgentRequest) ParseField( case utils.MetaGroup: tmpType = utils.MetaVariable } - out, err = engine.ParseAttribute(ar, tmpType, cfgFld.Path, cfgFld.Value, config.CgrConfig().GeneralCfg().RoundingDecimals, utils.FirstNonEmpty(cfgFld.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone), cfgFld.Layout, config.CgrConfig().GeneralCfg().RSRSep) + out, err = engine.ParseAttribute(ar, tmpType, cfgFld.Path, cfgFld.Value, config.CgrConfig().GeneralCfg().RoundingDecimals, utils.FirstNonEmpty(cfgFld.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone), cfgFld.Layout) if err != nil && !strings.HasPrefix(err.Error(), "Could not find") { diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 08845bc27..c1ac42d24 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -345,7 +345,7 @@ func main() { return } if *printConfig { - cfgJSON := utils.ToIJSON(ldrCfg.AsMapInterface(ldrCfg.GeneralCfg().RSRSep)) + cfgJSON := utils.ToIJSON(ldrCfg.AsMapInterface()) log.Printf("Configuration loaded from %q:\n%s", *cfgPath, cfgJSON) } if *remove { diff --git a/cmd/cgr-migrator/cgr-migrator.go b/cmd/cgr-migrator/cgr-migrator.go index 5cb5921cc..b4fc779a2 100755 --- a/cmd/cgr-migrator/cgr-migrator.go +++ b/cmd/cgr-migrator/cgr-migrator.go @@ -296,7 +296,7 @@ func main() { log.Fatal(err) } if *printConfig { - cfgJSON := utils.ToIJSON(mgrCfg.AsMapInterface(mgrCfg.GeneralCfg().RSRSep)) + cfgJSON := utils.ToIJSON(mgrCfg.AsMapInterface()) log.Printf("Configuration loaded from %q:\n%s", *cfgPath, cfgJSON) } diff --git a/config/accountscfg.go b/config/accountscfg.go index 296070dd3..69fc3d522 100644 --- a/config/accountscfg.go +++ b/config/accountscfg.go @@ -141,7 +141,7 @@ func (acS *AccountSCfg) loadFromJSONCfg(jsnCfg *AccountSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (acS AccountSCfg) AsMapInterface(string) any { +func (acS AccountSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: acS.Opts.ProfileIDs, utils.MetaUsage: acS.Opts.Usage, diff --git a/config/accountscfg_test.go b/config/accountscfg_test.go index 46c3755b9..ece7a4e31 100644 --- a/config/accountscfg_test.go +++ b/config/accountscfg_test.go @@ -176,7 +176,7 @@ func TestAccountSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.accountSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.accountSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\n Received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/actionscfg.go b/config/actionscfg.go index 7f78b0dfd..9df70d663 100644 --- a/config/actionscfg.go +++ b/config/actionscfg.go @@ -144,7 +144,7 @@ func (acS *ActionSCfg) loadFromJSONCfg(jsnCfg *ActionSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (acS ActionSCfg) AsMapInterface(string) any { +func (acS ActionSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: acS.Opts.ProfileIDs, utils.MetaProfileIgnoreFilters: acS.Opts.ProfileIgnoreFilters, diff --git a/config/actionscfg_test.go b/config/actionscfg_test.go index 3b51161a4..971f86663 100644 --- a/config/actionscfg_test.go +++ b/config/actionscfg_test.go @@ -154,7 +154,7 @@ func TestActionSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.actionSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.actionSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\n Received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/adminscfg.go b/config/adminscfg.go index 8cbf03abb..7a512e597 100644 --- a/config/adminscfg.go +++ b/config/adminscfg.go @@ -66,7 +66,7 @@ func (aCfg *AdminSCfg) loadFromJSONCfg(jsnCfg *AdminSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (aCfg AdminSCfg) AsMapInterface(string) any { +func (aCfg AdminSCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: aCfg.Enabled, } diff --git a/config/adminscfg_test.go b/config/adminscfg_test.go index df5ec8516..d551fbcb5 100644 --- a/config/adminscfg_test.go +++ b/config/adminscfg_test.go @@ -68,7 +68,7 @@ func TestApierCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if newMap := cgrCfg.admS.AsMapInterface(""); !reflect.DeepEqual(newMap, eMap) { + } else if newMap := cgrCfg.admS.AsMapInterface(); !reflect.DeepEqual(newMap, eMap) { t.Errorf("Expected %+v, received %+v", eMap, newMap) } } @@ -92,7 +92,7 @@ func TestApierCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(myJSONStr); err != nil { t.Error(err) - } else if newMap := cgrCfg.admS.AsMapInterface(""); !reflect.DeepEqual(expectedMap, newMap) { + } else if newMap := cgrCfg.admS.AsMapInterface(); !reflect.DeepEqual(expectedMap, newMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedMap), utils.ToJSON(newMap)) } } diff --git a/config/analyzerscfg.go b/config/analyzerscfg.go index 65d1222af..cf553996c 100644 --- a/config/analyzerscfg.go +++ b/config/analyzerscfg.go @@ -92,7 +92,7 @@ func (alS *AnalyzerSCfg) loadFromJSONCfg(jsnCfg *AnalyzerSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (alS AnalyzerSCfg) AsMapInterface(string) any { +func (alS AnalyzerSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaExporterIDs: alS.Opts.ExporterIDs, } diff --git a/config/analyzerscfg_test.go b/config/analyzerscfg_test.go index 26af75ff5..344310ff1 100644 --- a/config/analyzerscfg_test.go +++ b/config/analyzerscfg_test.go @@ -70,7 +70,7 @@ func TestAnalyzerSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.analyzerSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.analyzerSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected: %+v , received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -96,7 +96,7 @@ func TestAnalyzerSCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.analyzerSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.analyzerSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected: %+v , received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/apibancfg.go b/config/apibancfg.go index e5df6d6db..3415c05c2 100644 --- a/config/apibancfg.go +++ b/config/apibancfg.go @@ -54,7 +54,7 @@ func (ban *APIBanCfg) loadFromJSONCfg(jsnCfg *APIBanJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (ban APIBanCfg) AsMapInterface(string) any { +func (ban APIBanCfg) AsMapInterface() any { return map[string]any{ utils.EnabledCfg: ban.Enabled, utils.KeysCfg: ban.Keys, diff --git a/config/apibancfg_test.go b/config/apibancfg_test.go index 8799ba706..45f0fe5f4 100644 --- a/config/apibancfg_test.go +++ b/config/apibancfg_test.go @@ -74,7 +74,7 @@ func TestAPIBanCfgAsMapInterface(t *testing.T) { t.Error(err) } else if err = alS.Load(context.Background(), jsnCfg, nil); err != nil { t.Error(err) - } else if rcv := alS.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/apis.go b/config/apis.go index b1fcdbcc3..b080f6173 100644 --- a/config/apis.go +++ b/config/apis.go @@ -31,7 +31,7 @@ import ( // getSectionAsMap returns a section from config as a map[string]interface func (cfg *CGRConfig) getSectionAsMap(section string) (mp any, err error) { if sec, has := cfg.sections.Get(section); has { - mp = sec.AsMapInterface(cfg.GeneralCfg().RSRSep) + mp = sec.AsMapInterface() return } err = errors.New("Invalid section ") @@ -114,7 +114,7 @@ func (cfg *CGRConfig) V1GetConfig(ctx *context.Context, args *SectionWithAPIOpts return } if sections.Size() == len(cfg.sections) { - mp = cfg.AsMapInterface(cfg.GeneralCfg().RSRSep) + mp = cfg.AsMapInterface() } else { for section := range sections { var val any @@ -413,13 +413,13 @@ func storeDiffSection(ctx *context.Context, section string, db ConfigDB, v1, v2 if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffERsJsonCfg(jsn, v1.ERsCfg(), v2.ERsCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffERsJsonCfg(jsn, v1.ERsCfg(), v2.ERsCfg())) case EEsJSON: jsn := new(EEsJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffEEsJsonCfg(jsn, v1.EEsCfg(), v2.EEsCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffEEsJsonCfg(jsn, v1.EEsCfg(), v2.EEsCfg())) case SessionSJSON: jsn := new(SessionSJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { @@ -449,31 +449,31 @@ func storeDiffSection(ctx *context.Context, section string, db ConfigDB, v1, v2 if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffDiameterAgentJsonCfg(jsn, v1.DiameterAgentCfg(), v2.DiameterAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffDiameterAgentJsonCfg(jsn, v1.DiameterAgentCfg(), v2.DiameterAgentCfg())) case RadiusAgentJSON: jsn := new(RadiusAgentJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffRadiusAgentJsonCfg(jsn, v1.RadiusAgentCfg(), v2.RadiusAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffRadiusAgentJsonCfg(jsn, v1.RadiusAgentCfg(), v2.RadiusAgentCfg())) case HTTPAgentJSON: jsn := new([]*HttpAgentJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffHttpAgentsJsonCfg(jsn, v1.HTTPAgentCfg(), v2.HTTPAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffHttpAgentsJsonCfg(jsn, v1.HTTPAgentCfg(), v2.HTTPAgentCfg())) case JanusAgentJSON: jsn := new(JanusAgentJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffJanusAgentSJsonCfg(jsn, v1.JanusAgentCfg(), v2.JanusAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffJanusAgentSJsonCfg(jsn, v1.JanusAgentCfg(), v2.JanusAgentCfg())) case DNSAgentJSON: jsn := new(DNSAgentJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffDNSAgentJsonCfg(jsn, v1.DNSAgentCfg(), v2.DNSAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffDNSAgentJsonCfg(jsn, v1.DNSAgentCfg(), v2.DNSAgentCfg())) case AttributeSJSON: jsn := new(AttributeSJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { @@ -527,13 +527,13 @@ func storeDiffSection(ctx *context.Context, section string, db ConfigDB, v1, v2 if err = db.GetSection(ctx, section, &jsn); err != nil { return } - return db.SetSection(ctx, section, diffLoadersJsonCfg(jsn, v1.LoaderCfg(), v2.LoaderCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffLoadersJsonCfg(jsn, v1.LoaderCfg(), v2.LoaderCfg())) case SureTaxJSON: jsn := new(SureTaxJsonCfg) if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffSureTaxJsonCfg(jsn, v1.SureTaxCfg(), v2.SureTaxCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffSureTaxJsonCfg(jsn, v1.SureTaxCfg(), v2.SureTaxCfg())) case RegistrarCJSON: jsn := new(RegistrarCJsonCfgs) if err = db.GetSection(ctx, section, jsn); err != nil { @@ -581,13 +581,13 @@ func storeDiffSection(ctx *context.Context, section string, db ConfigDB, v1, v2 if err = db.GetSection(ctx, section, jsn); err != nil { return } - return db.SetSection(ctx, section, diffSIPAgentJsonCfg(jsn, v1.SIPAgentCfg(), v2.SIPAgentCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffSIPAgentJsonCfg(jsn, v1.SIPAgentCfg(), v2.SIPAgentCfg())) case TemplatesJSON: jsn := make(FcTemplatesJsonCfg) if err = db.GetSection(ctx, section, &jsn); err != nil { return } - return db.SetSection(ctx, section, diffFcTemplatesJsonCfg(jsn, v1.TemplatesCfg(), v2.TemplatesCfg(), v2.GeneralCfg().RSRSep)) + return db.SetSection(ctx, section, diffFcTemplatesJsonCfg(jsn, v1.TemplatesCfg(), v2.TemplatesCfg())) case ConfigSJSON: jsn := new(ConfigSCfgJson) if err = db.GetSection(ctx, section, jsn); err != nil { diff --git a/config/apis_test.go b/config/apis_test.go index 618b9f72a..9d70e53bd 100644 --- a/config/apis_test.go +++ b/config/apis_test.go @@ -231,7 +231,6 @@ func TestConfigLoadFromDB(t *testing.T) { DigestSeparator: ",", DigestEqual: ":", MaxParallelConns: 100, - RSRSep: ";", Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{}, }, @@ -1028,7 +1027,6 @@ func TestV1GetConfig(t *testing.T) { Reply_timeout: utils.StringPointer("2s"), Locking_timeout: utils.StringPointer("2s"), Digest_separator: utils.StringPointer(","), - Rsr_separator: utils.StringPointer(";"), Digest_equal: utils.StringPointer(":"), Max_parallel_conns: utils.IntPointer(100), } @@ -1053,7 +1051,6 @@ func TestV1GetConfig(t *testing.T) { Reply_timeout: utils.StringPointer("2s"), Locking_timeout: utils.StringPointer("2s"), Digest_separator: utils.StringPointer(","), - Rsr_separator: utils.StringPointer(";"), Digest_equal: utils.StringPointer(":"), Max_parallel_conns: utils.IntPointer(100), } diff --git a/config/asteriskagntcfg.go b/config/asteriskagntcfg.go index d12aafa71..8dea6ac30 100644 --- a/config/asteriskagntcfg.go +++ b/config/asteriskagntcfg.go @@ -135,7 +135,7 @@ func (aCfg *AsteriskAgentCfg) loadFromJSONCfg(jsnCfg *AsteriskAgentJsonCfg) (err } // AsMapInterface returns the config as a map[string]any -func (aCfg AsteriskAgentCfg) AsMapInterface(string) any { +func (aCfg AsteriskAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: aCfg.Enabled, utils.CreateCDRCfg: aCfg.CreateCDR, diff --git a/config/attributescfg.go b/config/attributescfg.go index c80757952..c31c5d427 100644 --- a/config/attributescfg.go +++ b/config/attributescfg.go @@ -141,7 +141,7 @@ func (alS *AttributeSCfg) loadFromJSONCfg(jsnCfg *AttributeSJsonCfg) (err error) } // AsMapInterface returns the config as a map[string]any -func (alS AttributeSCfg) AsMapInterface(string) any { +func (alS AttributeSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: alS.Opts.ProfileIDs, utils.MetaProcessRunsCfg: alS.Opts.ProcessRuns, diff --git a/config/attributescfg_test.go b/config/attributescfg_test.go index 0015ceed3..ff36327a7 100644 --- a/config/attributescfg_test.go +++ b/config/attributescfg_test.go @@ -172,7 +172,7 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.attributeSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.attributeSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\n Received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -220,7 +220,7 @@ func TestAttributeSCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if newMap := cgrCfg.attributeSCfg.AsMapInterface(""); !reflect.DeepEqual(expectedMap, newMap) { + } else if newMap := cgrCfg.attributeSCfg.AsMapInterface(); !reflect.DeepEqual(expectedMap, newMap) { t.Errorf("Expected %+v \n, receieved %+v", utils.ToJSON(expectedMap), utils.ToJSON(newMap)) } } @@ -251,7 +251,7 @@ func TestAttributeSCfgAsMapInterface3(t *testing.T) { } if conv, err := NewCGRConfigFromJSONStringWithDefaults(myJSONStr); err != nil { t.Error(err) - } else if newMap := conv.attributeSCfg.AsMapInterface(""); !reflect.DeepEqual(expectedMap, newMap) { + } else if newMap := conv.attributeSCfg.AsMapInterface(); !reflect.DeepEqual(expectedMap, newMap) { t.Errorf("Expected %+v, receieved %+v", expectedMap, newMap) } } diff --git a/config/cachecfg.go b/config/cachecfg.go index a11bf9411..701feca35 100644 --- a/config/cachecfg.go +++ b/config/cachecfg.go @@ -149,7 +149,7 @@ func (cCfg CacheCfg) AsTransCacheConfig() (tcCfg map[string]*ltcache.CacheConfig } // AsMapInterface returns the config as a map[string]any -func (cCfg CacheCfg) AsMapInterface(string) any { +func (cCfg CacheCfg) AsMapInterface() any { partitions := make(map[string]any, len(cCfg.Partitions)) for key, value := range cCfg.Partitions { partitions[key] = value.AsMapInterface() diff --git a/config/cdrscfg.go b/config/cdrscfg.go index 55a2b726b..c005917f1 100644 --- a/config/cdrscfg.go +++ b/config/cdrscfg.go @@ -214,7 +214,7 @@ func (cdrscfg *CdrsCfg) loadFromJSONCfg(jsnCdrsCfg *CdrsJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (cdrscfg CdrsCfg) AsMapInterface(string) any { +func (cdrscfg CdrsCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaAccounts: cdrscfg.Opts.Accounts, utils.MetaAttributes: cdrscfg.Opts.Attributes, diff --git a/config/cdrscfg_test.go b/config/cdrscfg_test.go index 8273f00bb..2286ef569 100644 --- a/config/cdrscfg_test.go +++ b/config/cdrscfg_test.go @@ -217,7 +217,7 @@ func TestCdrsCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.cdrsCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.cdrsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recieved %+v ", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -259,7 +259,7 @@ func TestCdrsCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.cdrsCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.cdrsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recieved %+v", eMap, rcv) } } diff --git a/config/chargerscfg.go b/config/chargerscfg.go index 87cf0f9c0..7a2e249b0 100644 --- a/config/chargerscfg.go +++ b/config/chargerscfg.go @@ -82,7 +82,7 @@ func (cS *ChargerSCfg) loadFromJSONCfg(jsnCfg *ChargerSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (cS ChargerSCfg) AsMapInterface(string) any { +func (cS ChargerSCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: cS.Enabled, utils.IndexedSelectsCfg: cS.IndexedSelects, diff --git a/config/chargerscfg_test.go b/config/chargerscfg_test.go index 4e4715159..f1ed4ca01 100644 --- a/config/chargerscfg_test.go +++ b/config/chargerscfg_test.go @@ -82,7 +82,7 @@ func TestChargerSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.chargerSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.chargerSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, recieved %+v", eMap, rcv) } } @@ -114,7 +114,7 @@ func TestChargerSCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.chargerSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.chargerSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, recieved %+v", eMap, rcv) } } diff --git a/config/config.go b/config/config.go index 6f62701c1..fcda10685 100644 --- a/config/config.go +++ b/config/config.go @@ -1016,8 +1016,8 @@ func (cfg *CGRConfig) reloadSections(sections ...string) { } // AsMapInterface returns the config as a map[string]any -func (cfg *CGRConfig) AsMapInterface(separator string) (mp map[string]any) { - return cfg.sections.AsMapInterface(separator) +func (cfg *CGRConfig) AsMapInterface() (mp map[string]any) { + return cfg.sections.AsMapInterface() } // Clone returns a deep copy of CGRConfig @@ -1090,7 +1090,7 @@ func (cfg *CGRConfig) Clone() (cln *CGRConfig) { func (cfg *CGRConfig) GetDataProvider() utils.MapStorage { cfg.cacheDPMux.RLock() if len(cfg.cacheDP) < len(cfg.sections) { - cfg.cacheDP = cfg.AsMapInterface(cfg.GeneralCfg().RSRSep) + cfg.cacheDP = cfg.AsMapInterface() } mp := cfg.cacheDP.Clone() cfg.cacheDPMux.RUnlock() diff --git a/config/config_defaults.go b/config/config_defaults.go index cd27c54a9..0c92f0129 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -49,7 +49,6 @@ const CGRATES_CFG_JSON = ` "locking_timeout": "0", // timeout internal locks to avoid deadlocks "digest_separator": ",", // separator to use in replies containing data digests "digest_equal": ":", // equal symbol used in case of digests - "rsr_separator": ";", // separator used within RSR fields "max_parallel_conns": 100, // the maximum number of connection used by the *parallel strategy "decimal_max_scale": 0, // the maximum scale for decimal numbers "decimal_min_scale": 0, // the minimum scale for decimal numbers diff --git a/config/config_it_test.go b/config/config_it_test.go index 250dfd3d2..b761c90b1 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -1152,7 +1152,7 @@ func testHttpHandlerConfigSForFolder(t *testing.T) { if err != nil { t.Error(err) } - mp := cfg.AsMapInterface(cfg.generalCfg.RSRSep) + mp := cfg.AsMapInterface() str := utils.ToJSON(mp) // we compare the length of the string because flags is a map and we receive it in different order diff --git a/config/config_json.go b/config/config_json.go index e2f8f6920..cd5e50510 100644 --- a/config/config_json.go +++ b/config/config_json.go @@ -151,7 +151,7 @@ func (jsnCfg CgrJsonCfg) SetSection(_ *context.Context, section string, jsn any) type Section interface { SName() string Load(*context.Context, ConfigDB, *CGRConfig) error - AsMapInterface(string) any + AsMapInterface() any CloneSection() Section // UpdateDB(*context.Context) // not know } @@ -241,10 +241,10 @@ func (r Sections) LoadWithout(ctx *context.Context, db ConfigDB, cfg *CGRConfig, } return } -func (r Sections) AsMapInterface(sep string) (m map[string]any) { +func (r Sections) AsMapInterface() (m map[string]any) { m = make(map[string]any) for _, sec := range r { - m[sec.SName()] = sec.AsMapInterface(sep) + m[sec.SName()] = sec.AsMapInterface() } return } diff --git a/config/config_json_test.go b/config/config_json_test.go index bf8710581..1ae3f5fcf 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -49,7 +49,6 @@ func TestDfGeneralJsonCfg(t *testing.T) { Locking_timeout: utils.StringPointer("0"), Digest_separator: utils.StringPointer(","), Digest_equal: utils.StringPointer(":"), - Rsr_separator: utils.StringPointer(";"), Max_parallel_conns: utils.IntPointer(100), Decimal_max_scale: utils.IntPointer(0), Decimal_min_scale: utils.IntPointer(0), diff --git a/config/config_test.go b/config/config_test.go index 8234399b1..9aa5b59c5 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -3286,7 +3286,7 @@ func TestCgrCfgJSONDefaultRateCfg(t *testing.T) { func TestCgrCfgV1GetConfigAllConfig(t *testing.T) { var rcv map[string]any cgrCfg := NewDefaultCGRConfig() - expected := cgrCfg.AsMapInterface(cgrCfg.GeneralCfg().RSRSep) + expected := cgrCfg.AsMapInterface() if err := cgrCfg.V1GetConfig(context.Background(), &SectionWithAPIOpts{}, &rcv); err != nil { t.Fatal(err) } @@ -3445,7 +3445,6 @@ func TestV1GetConfigGeneral(t *testing.T) { utils.LockingTimeoutCfg: "0", utils.DigestSeparatorCfg: ",", utils.DigestEqualCfg: ":", - utils.RSRSepCfg: ";", utils.MaxParallelConnsCfg: 100, utils.DecimalMaxScaleCfg: 0, utils.DecimalMinScaleCfg: 0, @@ -4603,7 +4602,7 @@ func TestV1GetConfigAsJSONGeneral(t *testing.T) { "node_id": "ENGINE1", } }` - expected := `{"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"ENGINE1","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"}}` + expected := `{"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"ENGINE1","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"tpexport_dir":"/var/spool/cgrates/tpe"}}` if cfgCgr, err := NewCGRConfigFromJSONStringWithDefaults(strJSON); err != nil { t.Error(err) } else if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Sections: []string{GeneralJSON}}, &reply); err != nil { @@ -5076,7 +5075,7 @@ func TestV1GetConfigAsJSONAllConfig(t *testing.T) { } }` var reply string - expected := `{"accounts":{"attributes_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"max_iterations":1000,"max_usage":"259200000000000","nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rates_conns":[],"suffix_indexed_fields":[],"thresholds_conns":[]},"actions":{"accounts_conns":[],"cdrs_conns":[],"dynaprepaid_actionprofile":[],"ees_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*posterAttempts":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"stats_conns":[],"suffix_indexed_fields":[],"tenants":[],"thresholds_conns":[]},"admins":{"actions_conns":[],"attributes_conns":[],"caches_conns":["*internal"],"ees_conns":[],"enabled":false},"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","ees_conns":[],"enabled":false,"index_type":"*scorch","opts":{"*exporterIDs":[]},"ttl":"24h0m0s"},"apiban":{"enabled":false,"keys":[]},"asterisk_agent":{"asterisk_conns":[{"address":"127.0.0.1:8088","alias":"","connect_attempts":3,"max_reconnect_interval":"0s","password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*birpc_internal"]},"attributes":{"accounts_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*processRuns":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*profileRuns":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_profile_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rankings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_profile_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*trends":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]},"cdrs":{"accounts_conns":[],"actions_conns":[],"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":null,"opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*ees":[{"FilterIDs":null,"Tenant":""}],"*rates":[{"FilterIDs":null,"Tenant":""}],"*refund":[{"FilterIDs":null,"Tenant":""}],"*rerate":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*store":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"session_cost_retries":5,"stats_conns":[],"thresholds_conns":[]},"chargers":{"attributes_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"config_db":{"db_host":"","db_name":"","db_password":"","db_port":0,"db_type":"*internal","db_user":"","opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"}},"configs":{"enabled":false,"root_dir":"/var/spool/cgrates/configs","url":"/configs/"},"cores":{"caps":0,"caps_stats_interval":"0","caps_strategy":"*busy","ees_conns":[],"shutdown_timeout":"1s"},"data_db":{"db_host":"127.0.0.1","db_name":"10","db_password":"","db_port":6379,"db_type":"*redis","db_user":"cgrates","items":{"*account_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_profile_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rankings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_profile_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false},"diameter_agent":{"asr_template":"","dictionaries_path":"/usr/share/cgrates/diameter/dict/","enabled":false,"forced_disconnect":"*none","listen":"127.0.0.1:3868","listen_net":"tcp","origin_host":"CGR-DA","origin_realm":"cgrates.org","product_name":"CGRateS","rar_template":"","request_processors":[],"sessions_conns":["*birpc_internal"],"synced_conn_requests":false,"vendor_id":0},"dns_agent":{"enabled":false,"listeners":[{"address":"127.0.0.1:53","network":"udp"}],"request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*fileCSV":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"blocker":false,"concurrent_requests":0,"efs_conns":["*internal"],"export_path":"/var/spool/cgrates/ees","failed_posts_dir":"/var/spool/cgrates/failed_posts","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"timezone":"","type":"*none"}]},"efs":{"enabled":false,"failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","poster_attempts":3},"ers":{"enabled":false,"partial_cache_ttl":"1s","readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"fields":[{"mandatory":true,"path":"*cgreq.ToR","tag":"ToR","type":"*variable","value":"~*req.2"},{"mandatory":true,"path":"*cgreq.OriginID","tag":"OriginID","type":"*variable","value":"~*req.3"},{"mandatory":true,"path":"*cgreq.RequestType","tag":"RequestType","type":"*variable","value":"~*req.4"},{"mandatory":true,"path":"*cgreq.Tenant","tag":"Tenant","type":"*variable","value":"~*req.6"},{"mandatory":true,"path":"*cgreq.Category","tag":"Category","type":"*variable","value":"~*req.7"},{"mandatory":true,"path":"*cgreq.Account","tag":"Account","type":"*variable","value":"~*req.8"},{"mandatory":true,"path":"*cgreq.Subject","tag":"Subject","type":"*variable","value":"~*req.9"},{"mandatory":true,"path":"*cgreq.Destination","tag":"Destination","type":"*variable","value":"~*req.10"},{"mandatory":true,"path":"*cgreq.SetupTime","tag":"SetupTime","type":"*variable","value":"~*req.11"},{"mandatory":true,"path":"*cgreq.AnswerTime","tag":"AnswerTime","type":"*variable","value":"~*req.12"},{"mandatory":true,"path":"*cgreq.Usage","tag":"Usage","type":"*variable","value":"~*req.13"}],"filters":[],"flags":[],"id":"*default","max_reconnect_interval":"5m0s","opts":{"csvFieldSeparator":",","csvHeaderDefineChar":":","csvRowLength":0,"natsSubject":"cgrates_cdrs","partialCacheAction":"*none","partialOrderField":"~*req.AnswerTime"},"partial_commit_fields":[],"processed_path":"/var/spool/cgrates/ers/out","reconnects":-1,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","start_delay":"0","tenant":"","timezone":"","type":"*none"}],"sessions_conns":["*internal"]},"filters":{"accounts_conns":[],"rankings_conns":[],"resources_conns":[],"stats_conns":[],"trends_conns":[]},"freeswitch_agent":{"active_session_delimiter":",","create_cdr":false,"empty_balance_ann_file":"","empty_balance_context":"","enabled":false,"event_socket_conns":[{"address":"127.0.0.1:8021","alias":"127.0.0.1:8021","max_reconnect_interval":"0s","password":"ClueCon","reconnects":5,"reply_timeout":"1m0s"}],"extra_fields":[],"low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*birpc_internal"],"subscribe_park":true},"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"ENGINE1","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"},"http":{"auth_users":{},"client_opts":{"dialFallbackDelay":"300ms","dialKeepAlive":"30s","dialTimeout":"30s","disableCompression":false,"disableKeepAlives":false,"expectContinueTimeout":"0s","forceAttemptHttp2":true,"idleConnTimeout":"1m30s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0s","skipTLSVerification":false,"tlsHandshakeTimeout":"10s"},"freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","pprof_path":"/debug/pprof/","prometheus_url":"/prometheus","registrars_url":"/registrar","use_basic_auth":false,"ws_url":"/ws"},"http_agent":[],"janus_agent":{"enabled":false,"janus_conns":[{"address":"127.0.0.1:8088","admin_address":"localhost:7188","admin_password":"","type":"*ws"}],"request_processors":[],"sessions_conns":["*internal"],"url":"/janus"},"kamailio_agent":{"create_cdr":false,"enabled":false,"evapi_conns":[{"address":"127.0.0.1:8448","alias":"","max_reconnect_interval":"0s","reconnects":5}],"sessions_conns":["*birpc_internal"],"timezone":""},"listen":{"http":"127.0.0.1:2080","http_tls":"127.0.0.1:2280","rpc_gob":"127.0.0.1:2013","rpc_gob_tls":"127.0.0.1:2023","rpc_json":"127.0.0.1:2012","rpc_json_tls":"127.0.0.1:2022"},"loader":{"actions_conns":["*localhost"],"caches_conns":["*localhost"],"data_path":"./","disable_reverse":false,"field_separator":",","gapi_credentials":".gapi/credentials.json","gapi_token":".gapi/token.json","tpid":""},"loaders":[{"action":"*store","cache":{"*accounts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*action_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*attributes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*chargers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*rankings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*rate_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*stats":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*trends":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"caches_conns":["*internal"],"data":[{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"new_branch":true,"path":"Rules.Type","tag":"Type","type":"*variable","value":"~*req.2"},{"path":"Rules.Element","tag":"Element","type":"*variable","value":"~*req.3"},{"path":"Rules.Values","tag":"Values","type":"*variable","value":"~*req.4"}],"file_name":"Filters.csv","flags":null,"type":"*filters"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"TenantID","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ProfileID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"new_branch":true,"path":"Attributes.FilterIDs","tag":"AttributeFilterIDs","type":"*variable","value":"~*req.5"},{"path":"Attributes.Blockers","tag":"AttributeBlockers","type":"*variable","value":"~*req.6"},{"path":"Attributes.Path","tag":"Path","type":"*variable","value":"~*req.7"},{"path":"Attributes.Type","tag":"Type","type":"*variable","value":"~*req.8"},{"path":"Attributes.Value","tag":"Value","type":"*variable","value":"~*req.9"}],"file_name":"Attributes.csv","flags":null,"type":"*attributes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"UsageTTL","tag":"TTL","type":"*variable","value":"~*req.4"},{"path":"Limit","tag":"Limit","type":"*variable","value":"~*req.5"},{"path":"AllocationMessage","tag":"AllocationMessage","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.9"}],"file_name":"Resources.csv","flags":null,"type":"*resources"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.5"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.6"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.9"},{"new_branch":true,"path":"Metrics.MetricID","tag":"MetricIDs","type":"*variable","value":"~*req.10"},{"path":"Metrics.FilterIDs","tag":"MetricFilterIDs","type":"*variable","value":"~*req.11"},{"path":"Metrics.Blockers","tag":"MetricBlockers","type":"*variable","value":"~*req.12"}],"file_name":"Stats.csv","flags":null,"type":"*stats"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"MaxHits","tag":"MaxHits","type":"*variable","value":"~*req.4"},{"path":"MinHits","tag":"MinHits","type":"*variable","value":"~*req.5"},{"path":"MinSleep","tag":"MinSleep","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"ActionProfileIDs","tag":"ActionProfileIDs","type":"*variable","value":"~*req.8"},{"path":"Async","tag":"Async","type":"*variable","value":"~*req.9"}],"file_name":"Thresholds.csv","flags":null,"type":"*thresholds"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.2"},{"path":"StatID","tag":"StatID","type":"*variable","value":"~*req.3"},{"path":"Metrics","tag":"Metrics","type":"*variable","value":"~*req.4"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.5"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.6"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.7"},{"path":"CorrelationType","tag":"CorrelationType","type":"*variable","value":"~*req.8"},{"path":"Tolerance","tag":"Tolerance","type":"*variable","value":"~*req.9"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.10"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.11"}],"file_name":"Trends.csv","flags":null,"type":"*trends"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.2"},{"path":"StatIDs","tag":"StatIDs","type":"*variable","value":"~*req.3"},{"path":"MetricIDs","tag":"MetricIDs","type":"*variable","value":"~*req.4"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.5"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.6"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.7"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.8"}],"file_name":"Rankings.csv","flags":null,"type":"*rankings"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.5"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.6"},{"new_branch":true,"path":"Routes.ID","tag":"RouteID","type":"*variable","value":"~*req.7"},{"path":"Routes.FilterIDs","tag":"RouteFilterIDs","type":"*variable","value":"~*req.8"},{"path":"Routes.AccountIDs","tag":"RouteAccountIDs","type":"*variable","value":"~*req.9"},{"path":"Routes.RateProfileIDs","tag":"RouteRateProfileIDs","type":"*variable","value":"~*req.10"},{"path":"Routes.ResourceIDs","tag":"RouteResourceIDs","type":"*variable","value":"~*req.11"},{"path":"Routes.StatIDs","tag":"RouteStatIDs","type":"*variable","value":"~*req.12"},{"path":"Routes.Weights","tag":"RouteWeights","type":"*variable","value":"~*req.13"},{"path":"Routes.Blockers","tag":"RouteBlockers","type":"*variable","value":"~*req.14"},{"path":"Routes.RouteParameters","tag":"RouteParameters","type":"*variable","value":"~*req.15"}],"file_name":"Routes.csv","flags":null,"type":"*routes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"RunID","tag":"RunID","type":"*variable","value":"~*req.5"},{"path":"AttributeIDs","tag":"AttributeIDs","type":"*variable","value":"~*req.6"}],"file_name":"Chargers.csv","flags":null,"type":"*chargers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"MinCost","tag":"MinCost","type":"*variable","value":"~*req.4"},{"path":"MaxCost","tag":"MaxCost","type":"*variable","value":"~*req.5"},{"path":"MaxCostStrategy","tag":"MaxCostStrategy","type":"*variable","value":"~*req.6"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].FilterIDs","tag":"RateFilterIDs","type":"*variable","value":"~*req.8"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].ActivationTimes","tag":"RateActivationTimes","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].Weights","tag":"RateWeights","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].Blocker","tag":"RateBlocker","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.7:"],"new_branch":true,"path":"Rates[\u003c~*req.7\u003e].IntervalRates.IntervalStart","tag":"RateIntervalStart","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.FixedFee","tag":"RateFixedFee","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.RecurrentFee","tag":"RateRecurrentFee","type":"*variable","value":"~*req.14"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.Unit","tag":"RateUnit","type":"*variable","value":"~*req.15"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.Increment","tag":"RateIncrement","type":"*variable","value":"~*req.16"}],"file_name":"Rates.csv","flags":null,"type":"*rate_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.5"},{"path":"Targets[\u003c~*req.6\u003e]","tag":"TargetIDs","type":"*variable","value":"~*req.7"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].FilterIDs","tag":"ActionFilterIDs","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].TTL","tag":"ActionTTL","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Type","tag":"ActionType","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Opts","tag":"ActionOpts","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.8:"],"new_branch":true,"path":"Actions[\u003c~*req.8\u003e].Diktats.Path","tag":"ActionPath","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Diktats.Value","tag":"ActionValue","type":"*variable","value":"~*req.14"}],"file_name":"Actions.csv","flags":null,"type":"*action_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Opts","tag":"Opts","type":"*variable","value":"~*req.5"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].FilterIDs","tag":"BalanceFilterIDs","type":"*variable","value":"~*req.7"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Weights","tag":"BalanceWeights","type":"*variable","value":"~*req.8"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Blockers","tag":"BalanceBlockers","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Type","tag":"BalanceType","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Units","tag":"BalanceUnits","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].UnitFactors","tag":"BalanceUnitFactors","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Opts","tag":"BalanceOpts","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].CostIncrements","tag":"BalanceCostIncrements","type":"*variable","value":"~*req.14"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].AttributeIDs","tag":"BalanceAttributeIDs","type":"*variable","value":"~*req.15"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].RateProfileIDs","tag":"BalanceRateProfileIDs","type":"*variable","value":"~*req.16"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.17"}],"file_name":"Accounts.csv","flags":null,"type":"*accounts"}],"enabled":false,"field_separator":",","id":"*default","lockfile_path":".cgr.lck","opts":{"*cache":"","*forceLock":false,"*stopOnError":false,"*withIndex":true},"run_delay":"0","tenant":"","tp_in_dir":"/var/spool/cgrates/loader/in","tp_out_dir":"/var/spool/cgrates/loader/out"}],"logger":{"efs_conns":["*internal"],"level":6,"opts":{"failed_posts_dir":"/var/spool/cgrates/failed_posts","kafka_attempts":1,"kafka_conn":"","kafka_topic":""},"type":"*syslog"},"migrator":{"out_datadb_encoding":"msgpack","out_datadb_host":"127.0.0.1","out_datadb_name":"10","out_datadb_opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"out_datadb_password":"","out_datadb_port":"6379","out_datadb_type":"*redis","out_datadb_user":"cgrates","users_filters":null},"radius_agent":{"client_dictionaries":{"*default":"/usr/share/cgrates/radius/dict/"},"client_secrets":{"*default":"CGRateS.org"},"enabled":false,"listen_acct":"127.0.0.1:1813","listen_auth":"127.0.0.1:1812","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"]},"rankings":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"scheduled_ids":{},"stats_conns":[],"store_interval":"","thresholds_conns":[]},"rates":{"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*intervalStart":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*startTime":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rate_exists_indexed_fields":[],"rate_indexed_selects":true,"rate_nested_fields":false,"rate_notexists_indexed_fields":[],"rate_prefix_indexed_fields":[],"rate_suffix_indexed_fields":[],"suffix_indexed_fields":[],"verbosity":1000},"registrarc":{"rpc":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]}},"resources":{"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*units":[{"FilterIDs":null,"Tenant":""}],"*usageID":[{"FilterIDs":null,"Tenant":""}],"*usageTTL":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"accounts_conns":[],"attributes_conns":[],"default_ratio":1,"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*context":[{"FilterIDs":null,"Tenant":""}],"*ignoreErrors":[{"FilterIDs":null,"Tenant":""}],"*limit":[],"*maxCost":[{"Tenant":"","Value":""}],"*maxItems":[],"*offset":[],"*profileCount":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rates_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*bijson_localhost":{"conns":[{"address":"127.0.0.1:2014","transport":"*birpc_json"}],"poolSize":0,"strategy":"*first"},"*birpc_internal":{"conns":[{"address":"*birpc_internal","transport":""}],"poolSize":0,"strategy":"*first"},"*internal":{"conns":[{"address":"*internal","transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"address":"127.0.0.1:2012","transport":"*json"}],"poolSize":0,"strategy":"*first"}},"sentrypeer":{"audience":"https://sentrypeer.com/api","client_id":"","client_secret":"","grant_type":"client_credentials","ips_url":"https://sentrypeer.com/api/ip-addresses","numbers_url":"https://sentrypeer.com/api/phone-numbers","token_url":"https://authz.sentrypeer.com/oauth/token"},"sessions":{"accounts_conns":[],"actions_conns":[],"alterable_fields":[],"attributes_conns":[],"cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":1,"default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":false,"listen_bigob":"","listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*accountsForceUsage":[],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*attributesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*blockerError":[{"FilterIDs":null,"Tenant":""}],"*cdrs":[{"FilterIDs":null,"Tenant":""}],"*cdrsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*chargeable":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*debitInterval":[{"FilterIDs":null,"Tenant":""}],"*forceUsage":[],"*initiate":[{"FilterIDs":null,"Tenant":""}],"*maxUsage":[{"FilterIDs":null,"Tenant":""}],"*message":[{"FilterIDs":null,"Tenant":""}],"*originID":[],"*resources":[{"FilterIDs":null,"Tenant":""}],"*resourcesAllocate":[{"FilterIDs":null,"Tenant":""}],"*resourcesAuthorize":[{"FilterIDs":null,"Tenant":""}],"*resourcesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*resourcesRelease":[{"FilterIDs":null,"Tenant":""}],"*routes":[{"FilterIDs":null,"Tenant":""}],"*routesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*statsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*terminate":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}],"*thresholdsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*ttl":[{"FilterIDs":null,"Tenant":""}],"*ttlLastUsage":[],"*ttlLastUsed":[],"*ttlMaxDelay":[{"FilterIDs":null,"Tenant":""}],"*ttlUsage":[],"*update":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"replication_conns":[],"resources_conns":[],"routes_conns":[],"session_indexes":[],"stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]},"sip_agent":{"enabled":false,"listen":"127.0.0.1:5060","listen_net":"udp","request_processors":[],"retransmission_timer":"1s","sessions_conns":["*internal"],"timezone":""},"stats":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*prometheusStatIDs":[],"*roundingDecimals":[]},"prefix_indexed_fields":[],"store_interval":"","store_uncompressed_limit":0,"suffix_indexed_fields":[],"thresholds_conns":[]},"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"CGRateS.org","db_port":3306,"db_type":"**mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]},"suretax":{"bill_to_number":"","business_unit":"","client_number":"","client_tracking":"~*opts.*originID","customer_number":"~*req.Subject","include_local_cost":false,"orig_number":"~*req.Subject","p2pplus4":"","p2pzipcode":"","plus4":"","regulatory_code":"03","response_group":"03","response_type":"D4","return_file_code":"0","sales_type_code":"R","tax_exemption_code_list":"","tax_included":"0","tax_situs_rule":"04","term_number":"~*req.Destination","timezone":"UTC","trans_type_code":"010101","unit_type":"00","units":"1","url":"","validation_key":"","zipcode":""},"templates":{"*asr":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"}],"*cca":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"path":"*rep.Result-Code","tag":"ResultCode","type":"*constant","value":"2001"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"},{"mandatory":true,"path":"*rep.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"mandatory":true,"path":"*rep.CC-Request-Type","tag":"CCRequestType","type":"*variable","value":"~*req.CC-Request-Type"},{"mandatory":true,"path":"*rep.CC-Request-Number","tag":"CCRequestNumber","type":"*variable","value":"~*req.CC-Request-Number"}],"*cdrLog":[{"mandatory":true,"path":"*cdr.ToR","tag":"ToR","type":"*variable","value":"~*req.BalanceType"},{"mandatory":true,"path":"*cdr.OriginHost","tag":"OriginHost","type":"*constant","value":"127.0.0.1"},{"mandatory":true,"path":"*cdr.RequestType","tag":"RequestType","type":"*constant","value":"*none"},{"mandatory":true,"path":"*cdr.Tenant","tag":"Tenant","type":"*variable","value":"~*req.Tenant"},{"mandatory":true,"path":"*cdr.Account","tag":"Account","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Subject","tag":"Subject","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Cost","tag":"Cost","type":"*variable","value":"~*req.Cost"},{"mandatory":true,"path":"*cdr.Source","tag":"Source","type":"*constant","value":"*cdrLog"},{"mandatory":true,"path":"*cdr.Usage","tag":"Usage","type":"*constant","value":"1"},{"mandatory":true,"path":"*cdr.RunID","tag":"RunID","type":"*variable","value":"~*req.ActionType"},{"mandatory":true,"path":"*cdr.SetupTime","tag":"SetupTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.AnswerTime","tag":"AnswerTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.PreRated","tag":"PreRated","type":"*constant","value":"true"}],"*err":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"}],"*errSip":[{"mandatory":true,"path":"*rep.Request","tag":"Request","type":"*constant","value":"SIP/2.0 500 Internal Server Error"}],"*rar":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"path":"*diamreq.Re-Auth-Request-Type","tag":"ReAuthRequestType","type":"*constant","value":"0"}]},"thresholds":{"actions_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[]},"tls":{"ca_certificate":"","client_certificate":"","client_key":"","server_certificate":"","server_key":"","server_name":"","server_policy":4},"tpes":{"enabled":false},"trends":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"scheduled_ids":{},"stats_conns":[],"store_interval":"","store_uncompressed_limit":0,"thresholds_conns":[]}}` + expected := `{"accounts":{"attributes_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"max_iterations":1000,"max_usage":"259200000000000","nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rates_conns":[],"suffix_indexed_fields":[],"thresholds_conns":[]},"actions":{"accounts_conns":[],"cdrs_conns":[],"dynaprepaid_actionprofile":[],"ees_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*posterAttempts":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"stats_conns":[],"suffix_indexed_fields":[],"tenants":[],"thresholds_conns":[]},"admins":{"actions_conns":[],"attributes_conns":[],"caches_conns":["*internal"],"ees_conns":[],"enabled":false},"analyzers":{"cleanup_interval":"1h0m0s","db_path":"/var/spool/cgrates/analyzers","ees_conns":[],"enabled":false,"index_type":"*scorch","opts":{"*exporterIDs":[]},"ttl":"24h0m0s"},"apiban":{"enabled":false,"keys":[]},"asterisk_agent":{"asterisk_conns":[{"address":"127.0.0.1:8088","alias":"","connect_attempts":3,"max_reconnect_interval":"0s","password":"CGRateS.org","reconnects":5,"user":"cgrates"}],"create_cdr":false,"enabled":false,"sessions_conns":["*birpc_internal"]},"attributes":{"accounts_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*processRuns":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*profileRuns":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"caches":{"partitions":{"*account_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_profile_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*action_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*apiban":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2m0s"},"*attribute_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*caps_events":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*cdr_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10m0s"},"*charger_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*closed_sessions":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*diameter_messages":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*event_charges":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"10s"},"*event_resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rankings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_profile_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rate_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*replication_hosts":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_connections":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*rpc_responses":{"limit":0,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"2s"},"*sentrypeer":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":true,"ttl":"24h0m0s"},"*stat_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*stir":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"},"*threshold_filter_indexes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*trends":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false},"*uch":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"3h0m0s"}},"remote_conns":[],"replication_conns":[]},"cdrs":{"accounts_conns":[],"actions_conns":[],"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":null,"opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*ees":[{"FilterIDs":null,"Tenant":""}],"*rates":[{"FilterIDs":null,"Tenant":""}],"*refund":[{"FilterIDs":null,"Tenant":""}],"*rerate":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*store":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"session_cost_retries":5,"stats_conns":[],"thresholds_conns":[]},"chargers":{"attributes_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"prefix_indexed_fields":[],"suffix_indexed_fields":[]},"config_db":{"db_host":"","db_name":"","db_password":"","db_port":0,"db_type":"*internal","db_user":"","opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"}},"configs":{"enabled":false,"root_dir":"/var/spool/cgrates/configs","url":"/configs/"},"cores":{"caps":0,"caps_stats_interval":"0","caps_strategy":"*busy","ees_conns":[],"shutdown_timeout":"1s"},"data_db":{"db_host":"127.0.0.1","db_name":"10","db_password":"","db_port":6379,"db_type":"*redis","db_user":"cgrates","items":{"*account_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*accounts":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_profile_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*action_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*actions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*attribute_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*charger_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*filters":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*load_ids":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*ranking_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rankings":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_profile_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*rate_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resource_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*resources":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*reverse_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*route_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*stat_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueue_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*statqueues":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_filter_indexes":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*threshold_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*thresholds":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trend_profiles":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*trends":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false},"*versions":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"remote_conn_id":"","remote_conns":[],"replication_cache":"","replication_conns":[],"replication_filtered":false},"diameter_agent":{"asr_template":"","dictionaries_path":"/usr/share/cgrates/diameter/dict/","enabled":false,"forced_disconnect":"*none","listen":"127.0.0.1:3868","listen_net":"tcp","origin_host":"CGR-DA","origin_realm":"cgrates.org","product_name":"CGRateS","rar_template":"","request_processors":[],"sessions_conns":["*birpc_internal"],"synced_conn_requests":false,"vendor_id":0},"dns_agent":{"enabled":false,"listeners":[{"address":"127.0.0.1:53","network":"udp"}],"request_processors":[],"sessions_conns":["*internal"],"timezone":""},"ees":{"attributes_conns":[],"cache":{"*fileCSV":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"enabled":false,"exporters":[{"attempts":1,"attribute_context":"","attribute_ids":[],"blocker":false,"concurrent_requests":0,"efs_conns":["*internal"],"export_path":"/var/spool/cgrates/ees","failed_posts_dir":"/var/spool/cgrates/failed_posts","fields":[],"filters":[],"flags":[],"id":"*default","opts":{},"synchronous":false,"timezone":"","type":"*none"}]},"efs":{"enabled":false,"failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","poster_attempts":3},"ers":{"enabled":false,"partial_cache_ttl":"1s","readers":[{"cache_dump_fields":[],"concurrent_requests":1024,"fields":[{"mandatory":true,"path":"*cgreq.ToR","tag":"ToR","type":"*variable","value":"~*req.2"},{"mandatory":true,"path":"*cgreq.OriginID","tag":"OriginID","type":"*variable","value":"~*req.3"},{"mandatory":true,"path":"*cgreq.RequestType","tag":"RequestType","type":"*variable","value":"~*req.4"},{"mandatory":true,"path":"*cgreq.Tenant","tag":"Tenant","type":"*variable","value":"~*req.6"},{"mandatory":true,"path":"*cgreq.Category","tag":"Category","type":"*variable","value":"~*req.7"},{"mandatory":true,"path":"*cgreq.Account","tag":"Account","type":"*variable","value":"~*req.8"},{"mandatory":true,"path":"*cgreq.Subject","tag":"Subject","type":"*variable","value":"~*req.9"},{"mandatory":true,"path":"*cgreq.Destination","tag":"Destination","type":"*variable","value":"~*req.10"},{"mandatory":true,"path":"*cgreq.SetupTime","tag":"SetupTime","type":"*variable","value":"~*req.11"},{"mandatory":true,"path":"*cgreq.AnswerTime","tag":"AnswerTime","type":"*variable","value":"~*req.12"},{"mandatory":true,"path":"*cgreq.Usage","tag":"Usage","type":"*variable","value":"~*req.13"}],"filters":[],"flags":[],"id":"*default","max_reconnect_interval":"5m0s","opts":{"csvFieldSeparator":",","csvHeaderDefineChar":":","csvRowLength":0,"natsSubject":"cgrates_cdrs","partialCacheAction":"*none","partialOrderField":"~*req.AnswerTime"},"partial_commit_fields":[],"processed_path":"/var/spool/cgrates/ers/out","reconnects":-1,"run_delay":"0","source_path":"/var/spool/cgrates/ers/in","start_delay":"0","tenant":"","timezone":"","type":"*none"}],"sessions_conns":["*internal"]},"filters":{"accounts_conns":[],"rankings_conns":[],"resources_conns":[],"stats_conns":[],"trends_conns":[]},"freeswitch_agent":{"active_session_delimiter":",","create_cdr":false,"empty_balance_ann_file":"","empty_balance_context":"","enabled":false,"event_socket_conns":[{"address":"127.0.0.1:8021","alias":"127.0.0.1:8021","max_reconnect_interval":"0s","password":"ClueCon","reconnects":5,"reply_timeout":"1m0s"}],"extra_fields":[],"low_balance_ann_file":"","max_wait_connection":"2s","sessions_conns":["*birpc_internal"],"subscribe_park":true},"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"ENGINE1","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"2s","rounding_decimals":5,"tpexport_dir":"/var/spool/cgrates/tpe"},"http":{"auth_users":{},"client_opts":{"dialFallbackDelay":"300ms","dialKeepAlive":"30s","dialTimeout":"30s","disableCompression":false,"disableKeepAlives":false,"expectContinueTimeout":"0s","forceAttemptHttp2":true,"idleConnTimeout":"1m30s","maxConnsPerHost":0,"maxIdleConns":100,"maxIdleConnsPerHost":2,"responseHeaderTimeout":"0s","skipTLSVerification":false,"tlsHandshakeTimeout":"10s"},"freeswitch_cdrs_url":"/freeswitch_json","http_cdrs":"/cdr_http","json_rpc_url":"/jsonrpc","pprof_path":"/debug/pprof/","prometheus_url":"/prometheus","registrars_url":"/registrar","use_basic_auth":false,"ws_url":"/ws"},"http_agent":[],"janus_agent":{"enabled":false,"janus_conns":[{"address":"127.0.0.1:8088","admin_address":"localhost:7188","admin_password":"","type":"*ws"}],"request_processors":[],"sessions_conns":["*internal"],"url":"/janus"},"kamailio_agent":{"create_cdr":false,"enabled":false,"evapi_conns":[{"address":"127.0.0.1:8448","alias":"","max_reconnect_interval":"0s","reconnects":5}],"sessions_conns":["*birpc_internal"],"timezone":""},"listen":{"http":"127.0.0.1:2080","http_tls":"127.0.0.1:2280","rpc_gob":"127.0.0.1:2013","rpc_gob_tls":"127.0.0.1:2023","rpc_json":"127.0.0.1:2012","rpc_json_tls":"127.0.0.1:2022"},"loader":{"actions_conns":["*localhost"],"caches_conns":["*localhost"],"data_path":"./","disable_reverse":false,"field_separator":",","gapi_credentials":".gapi/credentials.json","gapi_token":".gapi/token.json","tpid":""},"loaders":[{"action":"*store","cache":{"*accounts":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*action_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*attributes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*chargers":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*filters":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*rankings":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*rate_profiles":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*resources":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*routes":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*stats":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*thresholds":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"},"*trends":{"limit":-1,"precache":false,"remote":false,"replicate":false,"static_ttl":false,"ttl":"5s"}},"caches_conns":["*internal"],"data":[{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"new_branch":true,"path":"Rules.Type","tag":"Type","type":"*variable","value":"~*req.2"},{"path":"Rules.Element","tag":"Element","type":"*variable","value":"~*req.3"},{"path":"Rules.Values","tag":"Values","type":"*variable","value":"~*req.4"}],"file_name":"Filters.csv","flags":null,"type":"*filters"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"TenantID","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ProfileID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"new_branch":true,"path":"Attributes.FilterIDs","tag":"AttributeFilterIDs","type":"*variable","value":"~*req.5"},{"path":"Attributes.Blockers","tag":"AttributeBlockers","type":"*variable","value":"~*req.6"},{"path":"Attributes.Path","tag":"Path","type":"*variable","value":"~*req.7"},{"path":"Attributes.Type","tag":"Type","type":"*variable","value":"~*req.8"},{"path":"Attributes.Value","tag":"Value","type":"*variable","value":"~*req.9"}],"file_name":"Attributes.csv","flags":null,"type":"*attributes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"UsageTTL","tag":"TTL","type":"*variable","value":"~*req.4"},{"path":"Limit","tag":"Limit","type":"*variable","value":"~*req.5"},{"path":"AllocationMessage","tag":"AllocationMessage","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.9"}],"file_name":"Resources.csv","flags":null,"type":"*resources"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.5"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.6"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.7"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.8"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.9"},{"new_branch":true,"path":"Metrics.MetricID","tag":"MetricIDs","type":"*variable","value":"~*req.10"},{"path":"Metrics.FilterIDs","tag":"MetricFilterIDs","type":"*variable","value":"~*req.11"},{"path":"Metrics.Blockers","tag":"MetricBlockers","type":"*variable","value":"~*req.12"}],"file_name":"Stats.csv","flags":null,"type":"*stats"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"MaxHits","tag":"MaxHits","type":"*variable","value":"~*req.4"},{"path":"MinHits","tag":"MinHits","type":"*variable","value":"~*req.5"},{"path":"MinSleep","tag":"MinSleep","type":"*variable","value":"~*req.6"},{"path":"Blocker","tag":"Blocker","type":"*variable","value":"~*req.7"},{"path":"ActionProfileIDs","tag":"ActionProfileIDs","type":"*variable","value":"~*req.8"},{"path":"Async","tag":"Async","type":"*variable","value":"~*req.9"}],"file_name":"Thresholds.csv","flags":null,"type":"*thresholds"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.2"},{"path":"StatID","tag":"StatID","type":"*variable","value":"~*req.3"},{"path":"Metrics","tag":"Metrics","type":"*variable","value":"~*req.4"},{"path":"TTL","tag":"TTL","type":"*variable","value":"~*req.5"},{"path":"QueueLength","tag":"QueueLength","type":"*variable","value":"~*req.6"},{"path":"MinItems","tag":"MinItems","type":"*variable","value":"~*req.7"},{"path":"CorrelationType","tag":"CorrelationType","type":"*variable","value":"~*req.8"},{"path":"Tolerance","tag":"Tolerance","type":"*variable","value":"~*req.9"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.10"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.11"}],"file_name":"Trends.csv","flags":null,"type":"*trends"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.2"},{"path":"StatIDs","tag":"StatIDs","type":"*variable","value":"~*req.3"},{"path":"MetricIDs","tag":"MetricIDs","type":"*variable","value":"~*req.4"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.5"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.6"},{"path":"Stored","tag":"Stored","type":"*variable","value":"~*req.7"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.8"}],"file_name":"Rankings.csv","flags":null,"type":"*rankings"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Sorting","tag":"Sorting","type":"*variable","value":"~*req.5"},{"path":"SortingParameters","tag":"SortingParameters","type":"*variable","value":"~*req.6"},{"new_branch":true,"path":"Routes.ID","tag":"RouteID","type":"*variable","value":"~*req.7"},{"path":"Routes.FilterIDs","tag":"RouteFilterIDs","type":"*variable","value":"~*req.8"},{"path":"Routes.AccountIDs","tag":"RouteAccountIDs","type":"*variable","value":"~*req.9"},{"path":"Routes.RateProfileIDs","tag":"RouteRateProfileIDs","type":"*variable","value":"~*req.10"},{"path":"Routes.ResourceIDs","tag":"RouteResourceIDs","type":"*variable","value":"~*req.11"},{"path":"Routes.StatIDs","tag":"RouteStatIDs","type":"*variable","value":"~*req.12"},{"path":"Routes.Weights","tag":"RouteWeights","type":"*variable","value":"~*req.13"},{"path":"Routes.Blockers","tag":"RouteBlockers","type":"*variable","value":"~*req.14"},{"path":"Routes.RouteParameters","tag":"RouteParameters","type":"*variable","value":"~*req.15"}],"file_name":"Routes.csv","flags":null,"type":"*routes"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"RunID","tag":"RunID","type":"*variable","value":"~*req.5"},{"path":"AttributeIDs","tag":"AttributeIDs","type":"*variable","value":"~*req.6"}],"file_name":"Chargers.csv","flags":null,"type":"*chargers"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"MinCost","tag":"MinCost","type":"*variable","value":"~*req.4"},{"path":"MaxCost","tag":"MaxCost","type":"*variable","value":"~*req.5"},{"path":"MaxCostStrategy","tag":"MaxCostStrategy","type":"*variable","value":"~*req.6"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].FilterIDs","tag":"RateFilterIDs","type":"*variable","value":"~*req.8"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].ActivationTimes","tag":"RateActivationTimes","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].Weights","tag":"RateWeights","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].Blocker","tag":"RateBlocker","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.7:"],"new_branch":true,"path":"Rates[\u003c~*req.7\u003e].IntervalRates.IntervalStart","tag":"RateIntervalStart","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.FixedFee","tag":"RateFixedFee","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.RecurrentFee","tag":"RateRecurrentFee","type":"*variable","value":"~*req.14"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.Unit","tag":"RateUnit","type":"*variable","value":"~*req.15"},{"filters":["*notempty:~*req.7:"],"path":"Rates[\u003c~*req.7\u003e].IntervalRates.Increment","tag":"RateIncrement","type":"*variable","value":"~*req.16"}],"file_name":"Rates.csv","flags":null,"type":"*rate_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Schedule","tag":"Schedule","type":"*variable","value":"~*req.5"},{"path":"Targets[\u003c~*req.6\u003e]","tag":"TargetIDs","type":"*variable","value":"~*req.7"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].FilterIDs","tag":"ActionFilterIDs","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].TTL","tag":"ActionTTL","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Type","tag":"ActionType","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Opts","tag":"ActionOpts","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.8:"],"new_branch":true,"path":"Actions[\u003c~*req.8\u003e].Diktats.Path","tag":"ActionPath","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.8:"],"path":"Actions[\u003c~*req.8\u003e].Diktats.Value","tag":"ActionValue","type":"*variable","value":"~*req.14"}],"file_name":"Actions.csv","flags":null,"type":"*action_profiles"},{"fields":[{"mandatory":true,"path":"Tenant","tag":"Tenant","type":"*variable","value":"~*req.0"},{"mandatory":true,"path":"ID","tag":"ID","type":"*variable","value":"~*req.1"},{"path":"FilterIDs","tag":"FilterIDs","type":"*variable","value":"~*req.2"},{"path":"Weights","tag":"Weights","type":"*variable","value":"~*req.3"},{"path":"Blockers","tag":"Blockers","type":"*variable","value":"~*req.4"},{"path":"Opts","tag":"Opts","type":"*variable","value":"~*req.5"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].FilterIDs","tag":"BalanceFilterIDs","type":"*variable","value":"~*req.7"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Weights","tag":"BalanceWeights","type":"*variable","value":"~*req.8"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Blockers","tag":"BalanceBlockers","type":"*variable","value":"~*req.9"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Type","tag":"BalanceType","type":"*variable","value":"~*req.10"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Units","tag":"BalanceUnits","type":"*variable","value":"~*req.11"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].UnitFactors","tag":"BalanceUnitFactors","type":"*variable","value":"~*req.12"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].Opts","tag":"BalanceOpts","type":"*variable","value":"~*req.13"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].CostIncrements","tag":"BalanceCostIncrements","type":"*variable","value":"~*req.14"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].AttributeIDs","tag":"BalanceAttributeIDs","type":"*variable","value":"~*req.15"},{"filters":["*notempty:~*req.6:"],"path":"Balances[\u003c~*req.6\u003e].RateProfileIDs","tag":"BalanceRateProfileIDs","type":"*variable","value":"~*req.16"},{"path":"ThresholdIDs","tag":"ThresholdIDs","type":"*variable","value":"~*req.17"}],"file_name":"Accounts.csv","flags":null,"type":"*accounts"}],"enabled":false,"field_separator":",","id":"*default","lockfile_path":".cgr.lck","opts":{"*cache":"","*forceLock":false,"*stopOnError":false,"*withIndex":true},"run_delay":"0","tenant":"","tp_in_dir":"/var/spool/cgrates/loader/in","tp_out_dir":"/var/spool/cgrates/loader/out"}],"logger":{"efs_conns":["*internal"],"level":6,"opts":{"failed_posts_dir":"/var/spool/cgrates/failed_posts","kafka_attempts":1,"kafka_conn":"","kafka_topic":""},"type":"*syslog"},"migrator":{"out_datadb_encoding":"msgpack","out_datadb_host":"127.0.0.1","out_datadb_name":"10","out_datadb_opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","redisCACertificate":"","redisClientCertificate":"","redisClientKey":"","redisCluster":false,"redisClusterOndownDelay":"0s","redisClusterSync":"5s","redisConnectAttempts":20,"redisConnectTimeout":"0s","redisMaxConns":10,"redisPoolPipelineLimit":0,"redisPoolPipelineWindow":"150µs","redisReadTimeout":"0s","redisSentinel":"","redisTLS":false,"redisWriteTimeout":"0s"},"out_datadb_password":"","out_datadb_port":"6379","out_datadb_type":"*redis","out_datadb_user":"cgrates","users_filters":null},"radius_agent":{"client_dictionaries":{"*default":"/usr/share/cgrates/radius/dict/"},"client_secrets":{"*default":"CGRateS.org"},"enabled":false,"listen_acct":"127.0.0.1:1813","listen_auth":"127.0.0.1:1812","listen_net":"udp","request_processors":[],"sessions_conns":["*internal"]},"rankings":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"scheduled_ids":{},"stats_conns":[],"store_interval":"","thresholds_conns":[]},"rates":{"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*intervalStart":[{"FilterIDs":null,"Tenant":""}],"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*startTime":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rate_exists_indexed_fields":[],"rate_indexed_selects":true,"rate_nested_fields":false,"rate_notexists_indexed_fields":[],"rate_prefix_indexed_fields":[],"rate_suffix_indexed_fields":[],"suffix_indexed_fields":[],"verbosity":1000},"registrarc":{"rpc":{"hosts":[],"refresh_interval":"5m0s","registrars_conns":[]}},"resources":{"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*units":[{"FilterIDs":null,"Tenant":""}],"*usageID":[{"FilterIDs":null,"Tenant":""}],"*usageTTL":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[],"thresholds_conns":[]},"routes":{"accounts_conns":[],"attributes_conns":[],"default_ratio":1,"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*context":[{"FilterIDs":null,"Tenant":""}],"*ignoreErrors":[{"FilterIDs":null,"Tenant":""}],"*limit":[],"*maxCost":[{"Tenant":"","Value":""}],"*maxItems":[],"*offset":[],"*profileCount":[{"FilterIDs":null,"Tenant":""}],"*usage":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"rates_conns":[],"resources_conns":[],"stats_conns":[],"suffix_indexed_fields":[]},"rpc_conns":{"*bijson_localhost":{"conns":[{"address":"127.0.0.1:2014","transport":"*birpc_json"}],"poolSize":0,"strategy":"*first"},"*birpc_internal":{"conns":[{"address":"*birpc_internal","transport":""}],"poolSize":0,"strategy":"*first"},"*internal":{"conns":[{"address":"*internal","transport":""}],"poolSize":0,"strategy":"*first"},"*localhost":{"conns":[{"address":"127.0.0.1:2012","transport":"*json"}],"poolSize":0,"strategy":"*first"}},"sentrypeer":{"audience":"https://sentrypeer.com/api","client_id":"","client_secret":"","grant_type":"client_credentials","ips_url":"https://sentrypeer.com/api/ip-addresses","numbers_url":"https://sentrypeer.com/api/phone-numbers","token_url":"https://authz.sentrypeer.com/oauth/token"},"sessions":{"accounts_conns":[],"actions_conns":[],"alterable_fields":[],"attributes_conns":[],"cdrs_conns":[],"channel_sync_interval":"0","chargers_conns":[],"client_protocol":1,"default_usage":{"*any":"3h0m0s","*data":"1048576","*sms":"1","*voice":"3h0m0s"},"enabled":false,"listen_bigob":"","listen_bijson":"127.0.0.1:2014","min_dur_low_balance":"0","opts":{"*accounts":[{"FilterIDs":null,"Tenant":""}],"*accountsForceUsage":[],"*attributes":[{"FilterIDs":null,"Tenant":""}],"*attributesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*blockerError":[{"FilterIDs":null,"Tenant":""}],"*cdrs":[{"FilterIDs":null,"Tenant":""}],"*cdrsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*chargeable":[{"FilterIDs":null,"Tenant":""}],"*chargers":[{"FilterIDs":null,"Tenant":""}],"*debitInterval":[{"FilterIDs":null,"Tenant":""}],"*forceUsage":[],"*initiate":[{"FilterIDs":null,"Tenant":""}],"*maxUsage":[{"FilterIDs":null,"Tenant":""}],"*message":[{"FilterIDs":null,"Tenant":""}],"*originID":[],"*resources":[{"FilterIDs":null,"Tenant":""}],"*resourcesAllocate":[{"FilterIDs":null,"Tenant":""}],"*resourcesAuthorize":[{"FilterIDs":null,"Tenant":""}],"*resourcesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*resourcesRelease":[{"FilterIDs":null,"Tenant":""}],"*routes":[{"FilterIDs":null,"Tenant":""}],"*routesDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*stats":[{"FilterIDs":null,"Tenant":""}],"*statsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*terminate":[{"FilterIDs":null,"Tenant":""}],"*thresholds":[{"FilterIDs":null,"Tenant":""}],"*thresholdsDerivedReply":[{"FilterIDs":null,"Tenant":""}],"*ttl":[{"FilterIDs":null,"Tenant":""}],"*ttlLastUsage":[],"*ttlLastUsed":[],"*ttlMaxDelay":[{"FilterIDs":null,"Tenant":""}],"*ttlUsage":[],"*update":[{"FilterIDs":null,"Tenant":""}]},"rates_conns":[],"replication_conns":[],"resources_conns":[],"routes_conns":[],"session_indexes":[],"stats_conns":[],"stir":{"allowed_attest":["*any"],"default_attest":"A","payload_maxduration":"-1","privatekey_path":"","publickey_path":""},"store_session_costs":false,"terminate_attempts":5,"thresholds_conns":[]},"sip_agent":{"enabled":false,"listen":"127.0.0.1:5060","listen_net":"udp","request_processors":[],"retransmission_timer":"1s","sessions_conns":["*internal"],"timezone":""},"stats":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}],"*prometheusStatIDs":[],"*roundingDecimals":[]},"prefix_indexed_fields":[],"store_interval":"","store_uncompressed_limit":0,"suffix_indexed_fields":[],"thresholds_conns":[]},"stor_db":{"db_host":"127.0.0.1","db_name":"cgrates","db_password":"CGRateS.org","db_port":3306,"db_type":"**mysql","db_user":"cgrates","items":{"*cdrs":{"limit":-1,"remote":false,"replicate":false,"static_ttl":false}},"opts":{"mongoConnScheme":"mongodb","mongoQueryTimeout":"10s","mysqlDSNParams":{},"mysqlLocation":"Local","pgSSLMode":"disable","sqlConnMaxLifetime":"0s","sqlMaxIdleConns":10,"sqlMaxOpenConns":100},"prefix_indexed_fields":[],"remote_conns":null,"replication_conns":null,"string_indexed_fields":[]},"suretax":{"bill_to_number":"","business_unit":"","client_number":"","client_tracking":"~*opts.*originID","customer_number":"~*req.Subject","include_local_cost":false,"orig_number":"~*req.Subject","p2pplus4":"","p2pzipcode":"","plus4":"","regulatory_code":"03","response_group":"03","response_type":"D4","return_file_code":"0","sales_type_code":"R","tax_exemption_code_list":"","tax_included":"0","tax_situs_rule":"04","term_number":"~*req.Destination","timezone":"UTC","trans_type_code":"010101","unit_type":"00","units":"1","url":"","validation_key":"","zipcode":""},"templates":{"*asr":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"}],"*cca":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"path":"*rep.Result-Code","tag":"ResultCode","type":"*constant","value":"2001"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"},{"mandatory":true,"path":"*rep.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"mandatory":true,"path":"*rep.CC-Request-Type","tag":"CCRequestType","type":"*variable","value":"~*req.CC-Request-Type"},{"mandatory":true,"path":"*rep.CC-Request-Number","tag":"CCRequestNumber","type":"*variable","value":"~*req.CC-Request-Number"}],"*cdrLog":[{"mandatory":true,"path":"*cdr.ToR","tag":"ToR","type":"*variable","value":"~*req.BalanceType"},{"mandatory":true,"path":"*cdr.OriginHost","tag":"OriginHost","type":"*constant","value":"127.0.0.1"},{"mandatory":true,"path":"*cdr.RequestType","tag":"RequestType","type":"*constant","value":"*none"},{"mandatory":true,"path":"*cdr.Tenant","tag":"Tenant","type":"*variable","value":"~*req.Tenant"},{"mandatory":true,"path":"*cdr.Account","tag":"Account","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Subject","tag":"Subject","type":"*variable","value":"~*req.Account"},{"mandatory":true,"path":"*cdr.Cost","tag":"Cost","type":"*variable","value":"~*req.Cost"},{"mandatory":true,"path":"*cdr.Source","tag":"Source","type":"*constant","value":"*cdrLog"},{"mandatory":true,"path":"*cdr.Usage","tag":"Usage","type":"*constant","value":"1"},{"mandatory":true,"path":"*cdr.RunID","tag":"RunID","type":"*variable","value":"~*req.ActionType"},{"mandatory":true,"path":"*cdr.SetupTime","tag":"SetupTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.AnswerTime","tag":"AnswerTime","type":"*constant","value":"*now"},{"mandatory":true,"path":"*cdr.PreRated","tag":"PreRated","type":"*constant","value":"true"}],"*err":[{"mandatory":true,"path":"*rep.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*rep.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*vars.OriginHost"},{"mandatory":true,"path":"*rep.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*vars.OriginRealm"}],"*errSip":[{"mandatory":true,"path":"*rep.Request","tag":"Request","type":"*constant","value":"SIP/2.0 500 Internal Server Error"}],"*rar":[{"mandatory":true,"path":"*diamreq.Session-Id","tag":"SessionId","type":"*variable","value":"~*req.Session-Id"},{"mandatory":true,"path":"*diamreq.Origin-Host","tag":"OriginHost","type":"*variable","value":"~*req.Destination-Host"},{"mandatory":true,"path":"*diamreq.Origin-Realm","tag":"OriginRealm","type":"*variable","value":"~*req.Destination-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Realm","tag":"DestinationRealm","type":"*variable","value":"~*req.Origin-Realm"},{"mandatory":true,"path":"*diamreq.Destination-Host","tag":"DestinationHost","type":"*variable","value":"~*req.Origin-Host"},{"mandatory":true,"path":"*diamreq.Auth-Application-Id","tag":"AuthApplicationId","type":"*variable","value":"~*vars.*appid"},{"path":"*diamreq.Re-Auth-Request-Type","tag":"ReAuthRequestType","type":"*constant","value":"0"}]},"thresholds":{"actions_conns":[],"enabled":false,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*profileIDs":[],"*profileIgnoreFilters":[{"FilterIDs":null,"Tenant":""}]},"prefix_indexed_fields":[],"store_interval":"","suffix_indexed_fields":[]},"tls":{"ca_certificate":"","client_certificate":"","client_key":"","server_certificate":"","server_key":"","server_name":"","server_policy":4},"tpes":{"enabled":false},"trends":{"ees_conns":[],"ees_exporter_ids":null,"enabled":false,"scheduled_ids":{},"stats_conns":[],"store_interval":"","store_uncompressed_limit":0,"thresholds_conns":[]}}` cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSON) if err != nil { @@ -5313,8 +5312,8 @@ func TestCGRConfigClone(t *testing.T) { rcv.rldCh = nil cfg.lks = nil rcv.lks = nil - if !reflect.DeepEqual(cfg.AsMapInterface(utils.InfieldSep), - rcv.AsMapInterface(utils.InfieldSep)) { + if !reflect.DeepEqual(cfg.AsMapInterface(), + rcv.AsMapInterface()) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cfg), utils.ToJSON(rcv)) } if !reflect.DeepEqual(cfg.loaderCfg, rcv.loaderCfg) { @@ -5344,11 +5343,11 @@ func TestCGRConfigClone(t *testing.T) { if !reflect.DeepEqual(cfg.listenCfg, rcv.listenCfg) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cfg.listenCfg), utils.ToJSON(rcv.listenCfg)) } - if !reflect.DeepEqual(cfg.httpCfg.AsMapInterface(utils.InfieldSep), - rcv.httpCfg.AsMapInterface(utils.InfieldSep)) { + if !reflect.DeepEqual(cfg.httpCfg.AsMapInterface(), + rcv.httpCfg.AsMapInterface()) { t.Errorf("Expected: %+v\nReceived: %+v", - utils.ToJSON(cfg.httpCfg.AsMapInterface(utils.InfieldSep)), - utils.ToJSON(rcv.httpCfg.AsMapInterface(utils.InfieldSep))) + utils.ToJSON(cfg.httpCfg.AsMapInterface()), + utils.ToJSON(rcv.httpCfg.AsMapInterface())) } if !reflect.DeepEqual(cfg.filterSCfg, rcv.filterSCfg) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cfg.filterSCfg), utils.ToJSON(rcv.filterSCfg)) @@ -5536,7 +5535,7 @@ func TestCGRConfigGetDP(t *testing.T) { cfg := NewDefaultCGRConfig() cfg.LockSections(HTTPAgentJSON, LoaderJSON, ChargerSJSON) cfg.UnlockSections(HTTPAgentJSON, LoaderJSON, ChargerSJSON) - exp := utils.MapStorage(cfg.AsMapInterface(cfg.generalCfg.RSRSep)) + exp := utils.MapStorage(cfg.AsMapInterface()) dp := cfg.GetDataProvider() if !reflect.DeepEqual(dp, exp) { t.Errorf("Expected %+v, received %+v", exp, dp) diff --git a/config/configdbcfg.go b/config/configdbcfg.go index ddbb81b04..b168ca289 100644 --- a/config/configdbcfg.go +++ b/config/configdbcfg.go @@ -105,7 +105,7 @@ func (dbcfg ConfigDBCfg) Clone() (cln *ConfigDBCfg) { } // AsMapInterface returns the config as a map[string]any -func (dbcfg ConfigDBCfg) AsMapInterface(string) any { +func (dbcfg ConfigDBCfg) AsMapInterface() any { opts := map[string]any{ utils.RedisMaxConnsCfg: dbcfg.Opts.RedisMaxConns, utils.RedisConnectAttemptsCfg: dbcfg.Opts.RedisConnectAttempts, diff --git a/config/configsanity_test.go b/config/configsanity_test.go index 687d3c0bb..58a743f07 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -1805,7 +1805,7 @@ func TestCGRConfigcheckConfigSanityAdminSErrExportersCSV(t *testing.T) { } // if !reflect.DeepEqual(CfgCopy, cfg) { // t.Errorf("Expected cfg not to change, was <%+v> \nnow is <%+v>", - // utils.ToJSON(CfgCopy.AsMapInterface(";")), utils.ToJSON(cfg.AsMapInterface(";"))) + // utils.ToJSON(CfgCopy.AsMapInterface()), utils.ToJSON(cfg.AsMapInterface(";"))) // } } func TestCGRConfigcheckConfigSanityEEsCfgExportersFWV(t *testing.T) { diff --git a/config/configscfg.go b/config/configscfg.go index 60ce18c55..1d37f1a39 100644 --- a/config/configscfg.go +++ b/config/configscfg.go @@ -95,7 +95,7 @@ func handleConfigSFolder(ctx *context.Context, path string, w http.ResponseWrite } // convert the config into a json and send it - if _, err := w.Write([]byte(utils.ToJSON(cfg.AsMapInterface(cfg.generalCfg.RSRSep)))); err != nil { + if _, err := w.Write([]byte(utils.ToJSON(cfg.AsMapInterface()))); err != nil { utils.Logger.Warning(fmt.Sprintf("<%s> Failed to write resonse because: %s", utils.ConfigSv1, err)) } @@ -116,7 +116,7 @@ func handleConfigSFile(path string, w http.ResponseWriter) { } // AsMapInterface returns the config as a map[string]any -func (cScfg ConfigSCfg) AsMapInterface(string) any { +func (cScfg ConfigSCfg) AsMapInterface() any { return map[string]any{ utils.EnabledCfg: cScfg.Enabled, utils.URLCfg: cScfg.URL, diff --git a/config/configscfg_test.go b/config/configscfg_test.go index d4a331ae6..9f55844ac 100644 --- a/config/configscfg_test.go +++ b/config/configscfg_test.go @@ -66,7 +66,7 @@ func TestConfigsAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgsJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.configSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.configSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } @@ -82,7 +82,7 @@ func TestConfigsAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgsJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.configSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.configSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } diff --git a/config/corescfg.go b/config/corescfg.go index c73dcb7b4..c5ef4f9ef 100644 --- a/config/corescfg.go +++ b/config/corescfg.go @@ -71,7 +71,7 @@ func (cS *CoreSCfg) loadFromJSONCfg(jsnCfg *CoreSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (cS CoreSCfg) AsMapInterface(string) any { +func (cS CoreSCfg) AsMapInterface() any { mp := map[string]any{ utils.CapsCfg: cS.Caps, utils.CapsStrategyCfg: cS.CapsStrategy, diff --git a/config/corescfg_test.go b/config/corescfg_test.go index 01052a4df..c4dfa6206 100644 --- a/config/corescfg_test.go +++ b/config/corescfg_test.go @@ -94,7 +94,7 @@ func TestCoreSAsMapInterface(t *testing.T) { t.Error(err) } else if err := alS.Load(context.Background(), jsnCfg, nil); err != nil { t.Error(err) - } else if rcv := alS.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } eMap[utils.CapsStatsIntervalCfg] = "1s" @@ -105,7 +105,7 @@ func TestCoreSAsMapInterface(t *testing.T) { ShutdownTimeout: time.Second, CapsStrategy: utils.MetaBusy, } - if rcv := alS.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/datadbcfg.go b/config/datadbcfg.go index 81de55dfa..fe5a105a5 100644 --- a/config/datadbcfg.go +++ b/config/datadbcfg.go @@ -307,7 +307,7 @@ func (dbcfg DataDbCfg) Clone() (cln *DataDbCfg) { } // AsMapInterface returns the config as a map[string]any -func (dbcfg DataDbCfg) AsMapInterface(string) any { +func (dbcfg DataDbCfg) AsMapInterface() any { opts := map[string]any{ utils.RedisMaxConnsCfg: dbcfg.Opts.RedisMaxConns, utils.RedisConnectAttemptsCfg: dbcfg.Opts.RedisConnectAttempts, diff --git a/config/datadbcfg_test.go b/config/datadbcfg_test.go index d2468e187..1ef4fce5d 100644 --- a/config/datadbcfg_test.go +++ b/config/datadbcfg_test.go @@ -544,7 +544,7 @@ func TestDataDbCfgAsMapInterface(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else { - rcv := cgrCfg.dataDbCfg.AsMapInterface("").(map[string]any) + rcv := cgrCfg.dataDbCfg.AsMapInterface().(map[string]any) if !reflect.DeepEqual(eMap[utils.ItemsCfg].(map[string]any)[utils.MetaAccounts], rcv[utils.ItemsCfg].(map[string]any)[utils.MetaAccounts]) { t.Errorf("Expected %+v, received %+v", eMap[utils.ItemsCfg].(map[string]any)[utils.MetaAccounts], diff --git a/config/diametercfg.go b/config/diametercfg.go index 6e0175397..6694d49c5 100644 --- a/config/diametercfg.go +++ b/config/diametercfg.go @@ -49,10 +49,10 @@ func (da *DiameterAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGR if err = jsnCfg.GetSection(ctx, DiameterAgentJSON, jsnDACfg); err != nil { return } - return da.loadFromJSONCfg(jsnDACfg, cfg.generalCfg.RSRSep) + return da.loadFromJSONCfg(jsnDACfg) } -func (da *DiameterAgentCfg) loadFromJSONCfg(jsnCfg *DiameterAgentJsonCfg, separator string) (err error) { +func (da *DiameterAgentCfg) loadFromJSONCfg(jsnCfg *DiameterAgentJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -95,12 +95,12 @@ func (da *DiameterAgentCfg) loadFromJSONCfg(jsnCfg *DiameterAgentJsonCfg, separa if jsnCfg.Forced_disconnect != nil { da.ForcedDisconnect = *jsnCfg.Forced_disconnect } - da.RequestProcessors, err = appendRequestProcessors(da.RequestProcessors, jsnCfg.Request_processors, separator) + da.RequestProcessors, err = appendRequestProcessors(da.RequestProcessors, jsnCfg.Request_processors) return } // AsMapInterface returns the config as a map[string]any -func (da DiameterAgentCfg) AsMapInterface(separator string) any { +func (da DiameterAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: da.Enabled, utils.ListenNetCfg: da.ListenNet, @@ -118,7 +118,7 @@ func (da DiameterAgentCfg) AsMapInterface(separator string) any { requestProcessors := make([]map[string]any, len(da.RequestProcessors)) for i, item := range da.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } mp[utils.RequestProcessorsCfg] = requestProcessors @@ -177,7 +177,7 @@ type DiameterAgentJsonCfg struct { Request_processors *[]*ReqProcessorJsnCfg } -func diffDiameterAgentJsonCfg(d *DiameterAgentJsonCfg, v1, v2 *DiameterAgentCfg, separator string) *DiameterAgentJsonCfg { +func diffDiameterAgentJsonCfg(d *DiameterAgentJsonCfg, v1, v2 *DiameterAgentCfg) *DiameterAgentJsonCfg { if d == nil { d = new(DiameterAgentJsonCfg) } @@ -220,6 +220,6 @@ func diffDiameterAgentJsonCfg(d *DiameterAgentJsonCfg, v1, v2 *DiameterAgentCfg, if v1.ForcedDisconnect != v2.ForcedDisconnect { d.Forced_disconnect = utils.StringPointer(v2.ForcedDisconnect) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) return d } diff --git a/config/diametercfg_test.go b/config/diametercfg_test.go index ad6866f2d..35d252518 100644 --- a/config/diametercfg_test.go +++ b/config/diametercfg_test.go @@ -69,14 +69,14 @@ func TestDiameterAgentCfgloadFromJsonCfg(t *testing.T) { }, } jsnCfg := NewDefaultCGRConfig() - if err := jsnCfg.diameterAgentCfg.loadFromJSONCfg(jsonCFG, jsnCfg.generalCfg.RSRSep); err != nil { + if err := jsnCfg.diameterAgentCfg.loadFromJSONCfg(jsonCFG); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsnCfg.diameterAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.diameterAgentCfg)) } jsonCFG = nil - if err := jsnCfg.diameterAgentCfg.loadFromJSONCfg(jsonCFG, jsnCfg.generalCfg.RSRSep); err != nil { + if err := jsnCfg.diameterAgentCfg.loadFromJSONCfg(jsonCFG); err != nil { t.Error(err) } } @@ -91,7 +91,7 @@ func TestRequestProcessorloadFromJsonCfg1(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.diameterAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.diameterAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -115,7 +115,7 @@ func TestRequestProcessorloadFromJsonCfg2(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if err := jsonCfg.diameterAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err := jsonCfg.diameterAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } } @@ -193,7 +193,7 @@ func TestDiameterAgentCfgAsMapInterface(t *testing.T) { for _, v := range cgrCfg.diameterAgentCfg.RequestProcessors[0].RequestFields { v.ComputePath() } - rcv := cgrCfg.diameterAgentCfg.AsMapInterface(utils.InfieldSep) + rcv := cgrCfg.diameterAgentCfg.AsMapInterface() if !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } @@ -226,7 +226,7 @@ func TestDiameterAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.diameterAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.diameterAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } @@ -327,7 +327,7 @@ func TestDiffDiameterAgentJsonCfg(t *testing.T) { }, } - rcv := diffDiameterAgentJsonCfg(d, v1, v2, "") + rcv := diffDiameterAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -338,7 +338,7 @@ func TestDiffDiameterAgentJsonCfg(t *testing.T) { {}, }, } - rcv = diffDiameterAgentJsonCfg(d, v1, v2, "") + rcv = diffDiameterAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/dnsagentcfg_test.go b/config/dnsagentcfg_test.go index 969099cfa..650309b30 100644 --- a/config/dnsagentcfg_test.go +++ b/config/dnsagentcfg_test.go @@ -76,25 +76,25 @@ func TestDNSAgentCfgloadFromJsonCfg(t *testing.T) { v.ComputePath() } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(jsnCfg, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(jsnCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(jsonCfg.dnsAgentCfg, expected) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.dnsAgentCfg)) } jsnCfg = nil - if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(jsnCfg, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(jsnCfg); err != nil { t.Error(err) } } func TestRequestProcessorloadFromJsonCfg(t *testing.T) { var dareq, expected RequestProcessor - if err := dareq.loadFromJSONCfg(nil, utils.InfieldSep); err != nil { + if err := dareq.loadFromJSONCfg(nil); err != nil { t.Error(err) } else if !reflect.DeepEqual(dareq, expected) { t.Errorf("Expected: %+v ,received: %+v", expected, dareq) } - if err := dareq.loadFromJSONCfg(new(ReqProcessorJsnCfg), utils.InfieldSep); err != nil { + if err := dareq.loadFromJSONCfg(new(ReqProcessorJsnCfg)); err != nil { t.Error(err) } else if !reflect.DeepEqual(dareq, expected) { t.Errorf("Expected: %+v ,received: %+v", expected, dareq) @@ -111,7 +111,7 @@ func TestRequestProcessorloadFromJsonCfg(t *testing.T) { Filters: []string{"filter1", "filter2"}, Flags: utils.FlagsWithParams{"flag1": {}, "flag2": {}}, } - if err := dareq.loadFromJSONCfg(json, utils.InfieldSep); err != nil { + if err := dareq.loadFromJSONCfg(json); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, dareq) { t.Errorf("Expected: %+v , received: %+v", utils.ToJSON(expected), utils.ToJSON(dareq)) @@ -128,7 +128,7 @@ func TestRequestProcessorDNSAgentloadFromJsonCfg(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -152,7 +152,7 @@ func TestRequestProcessorDNSAgentloadFromJsonCfg1(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } } @@ -172,7 +172,7 @@ func TestRequestProcessorReplyFieldsloadFromJsonCfg(t *testing.T) { expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -191,7 +191,7 @@ func TestRequestProcessorRequestFieldsloadFromJsonCfg(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -223,7 +223,7 @@ func TestDNSAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.dnsAgentCfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.dnsAgentCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } @@ -294,7 +294,7 @@ func TestDNSAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.dnsAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.dnsAgentCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToIJSON(eMap), utils.ToIJSON(rcv)) } } @@ -409,7 +409,7 @@ func TestDiffDNSAgentJsonCfg(t *testing.T) { }, } - rcv := diffDNSAgentJsonCfg(d, v1, v2, ";") + rcv := diffDNSAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -420,7 +420,7 @@ func TestDiffDNSAgentJsonCfg(t *testing.T) { Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv = diffDNSAgentJsonCfg(d, v1, v2_2, ";") + rcv = diffDNSAgentJsonCfg(d, v1, v2_2) if !reflect.DeepEqual(rcv, expected2) { t.Errorf("Expected %v \n but received \n %v", expected2, rcv) } @@ -468,7 +468,7 @@ func TestDiffDNSAgentJsonCfgExtraV1(t *testing.T) { Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv := diffDNSAgentJsonCfg(d, v1, v2, ";") + rcv := diffDNSAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -516,7 +516,7 @@ func TestDiffDNSAgentJsonCfgExtraV2(t *testing.T) { Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv := diffDNSAgentJsonCfg(d, v1, v2, ";") + rcv := diffDNSAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/dnsagntcfg.go b/config/dnsagntcfg.go index b8515f46c..539d8a89f 100644 --- a/config/dnsagntcfg.go +++ b/config/dnsagntcfg.go @@ -45,10 +45,10 @@ func (da *DNSAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfi if err = jsnCfg.GetSection(ctx, DNSAgentJSON, jsnDNSCfg); err != nil { return } - return da.loadFromJSONCfg(jsnDNSCfg, cfg.generalCfg.RSRSep) + return da.loadFromJSONCfg(jsnDNSCfg) } -func (da *DNSAgentCfg) loadFromJSONCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err error) { +func (da *DNSAgentCfg) loadFromJSONCfg(jsnCfg *DNSAgentJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -74,11 +74,11 @@ func (da *DNSAgentCfg) loadFromJSONCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err if jsnCfg.Sessions_conns != nil { da.SessionSConns = updateBiRPCInternalConns(*jsnCfg.Sessions_conns, utils.MetaSessionS) } - da.RequestProcessors, err = appendRequestProcessors(da.RequestProcessors, jsnCfg.Request_processors, sep) + da.RequestProcessors, err = appendRequestProcessors(da.RequestProcessors, jsnCfg.Request_processors) return } -func (lstn *Listener) AsMapInterface(separator string) map[string]any { +func (lstn *Listener) AsMapInterface() map[string]any { return map[string]any{ utils.AddressCfg: lstn.Address, utils.NetworkCfg: lstn.Network, @@ -86,7 +86,7 @@ func (lstn *Listener) AsMapInterface(separator string) map[string]any { } // AsMapInterface returns the config as a map[string]any -func (da DNSAgentCfg) AsMapInterface(separator string) any { +func (da DNSAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: da.Enabled, utils.TimezoneCfg: da.Timezone, @@ -94,13 +94,13 @@ func (da DNSAgentCfg) AsMapInterface(separator string) any { listeners := make([]map[string]any, len(da.Listeners)) for i, item := range da.Listeners { - listeners[i] = item.AsMapInterface(separator) + listeners[i] = item.AsMapInterface() } mp[utils.ListenersCfg] = listeners requestProcessors := make([]map[string]any, len(da.RequestProcessors)) for i, item := range da.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } mp[utils.RequestProcessorsCfg] = requestProcessors @@ -151,7 +151,7 @@ type DNSAgentJsonCfg struct { Request_processors *[]*ReqProcessorJsnCfg } -func diffDNSAgentJsonCfg(d *DNSAgentJsonCfg, v1, v2 *DNSAgentCfg, separator string) *DNSAgentJsonCfg { +func diffDNSAgentJsonCfg(d *DNSAgentJsonCfg, v1, v2 *DNSAgentCfg) *DNSAgentJsonCfg { if d == nil { d = new(DNSAgentJsonCfg) } @@ -202,6 +202,6 @@ func diffDNSAgentJsonCfg(d *DNSAgentJsonCfg, v1, v2 *DNSAgentCfg, separator stri if v1.Timezone != v2.Timezone { d.Timezone = utils.StringPointer(v2.Timezone) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) return d } diff --git a/config/eescfg.go b/config/eescfg.go index e1cd8f562..aa0a9a696 100644 --- a/config/eescfg.go +++ b/config/eescfg.go @@ -53,10 +53,10 @@ func (eeS *EEsCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) ( if err = jsnCfg.GetSection(ctx, EEsJSON, jsnEEsCfg); err != nil { return } - return eeS.loadFromJSONCfg(jsnEEsCfg, cfg.templates, cfg.generalCfg.RSRSep) + return eeS.loadFromJSONCfg(jsnEEsCfg, cfg.templates) } -func (eeS *EEsCfg) loadFromJSONCfg(jsnCfg *EEsJsonCfg, msgTemplates map[string][]*FCTemplate, sep string) (err error) { +func (eeS *EEsCfg) loadFromJSONCfg(jsnCfg *EEsJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnCfg == nil { return } @@ -73,10 +73,10 @@ func (eeS *EEsCfg) loadFromJSONCfg(jsnCfg *EEsJsonCfg, msgTemplates map[string][ if jsnCfg.Attributes_conns != nil { eeS.AttributeSConns = updateInternalConns(*jsnCfg.Attributes_conns, utils.MetaAttributes) } - return eeS.appendEEsExporters(jsnCfg.Exporters, msgTemplates, sep) + return eeS.appendEEsExporters(jsnCfg.Exporters, msgTemplates) } -func (eeS *EEsCfg) appendEEsExporters(exporters *[]*EventExporterJsonCfg, msgTemplates map[string][]*FCTemplate, separator string) (err error) { +func (eeS *EEsCfg) appendEEsExporters(exporters *[]*EventExporterJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if exporters == nil { return } @@ -94,7 +94,7 @@ func (eeS *EEsCfg) appendEEsExporters(exporters *[]*EventExporterJsonCfg, msgTem exp = getDftEvExpCfg() eeS.Exporters = append(eeS.Exporters, exp) } - if err = exp.loadFromJSONCfg(jsnExp, msgTemplates, separator); err != nil { + if err = exp.loadFromJSONCfg(jsnExp, msgTemplates); err != nil { return } } @@ -124,7 +124,7 @@ func (eeS EEsCfg) Clone() (cln *EEsCfg) { } // AsMapInterface returns the config as a map[string]any -func (eeS EEsCfg) AsMapInterface(separator string) any { +func (eeS EEsCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: eeS.Enabled, } @@ -141,7 +141,7 @@ func (eeS EEsCfg) AsMapInterface(separator string) any { if eeS.Exporters != nil { exporters := make([]map[string]any, len(eeS.Exporters)) for i, item := range eeS.Exporters { - exporters[i] = item.AsMapInterface(separator) + exporters[i] = item.AsMapInterface() } mp[utils.ExportersCfg] = exporters } @@ -504,7 +504,7 @@ func (eeOpts *EventExporterOpts) loadFromJSONCfg(jsnCfg *EventExporterOptsJson) return } -func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTemplates map[string][]*FCTemplate, separator string) (err error) { +func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnEec == nil { return } @@ -545,7 +545,7 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe eeC.ConcurrentRequests = *jsnEec.Concurrent_requests } if jsnEec.Fields != nil { - eeC.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnEec.Fields, separator) + eeC.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnEec.Fields) if err != nil { return } @@ -919,7 +919,7 @@ func (eeC EventExporterCfg) Clone() (cln *EventExporterCfg) { } // AsMapInterface returns the config as a map[string]any -func (eeC *EventExporterCfg) AsMapInterface(separator string) (initialMP map[string]any) { +func (eeC *EventExporterCfg) AsMapInterface() (initialMP map[string]any) { flgs := eeC.Flags.SliceFlags() if flgs == nil { flgs = []string{} @@ -946,7 +946,7 @@ func (eeC *EventExporterCfg) AsMapInterface(separator string) (initialMP map[str if eeC.Fields != nil { fields := make([]map[string]any, 0, len(eeC.Fields)) for _, fld := range eeC.Fields { - fields = append(fields, fld.AsMapInterface(separator)) + fields = append(fields, fld.AsMapInterface()) } initialMP[utils.FieldsCfg] = fields } @@ -1662,7 +1662,7 @@ func diffEventExporterOptsJsonCfg(d *EventExporterOptsJson, v1, v2 *EventExporte return d } -func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, separator string) *EventExporterJsonCfg { +func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg) *EventExporterJsonCfg { if d == nil { d = new(EventExporterJsonCfg) } @@ -1709,7 +1709,7 @@ func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, if d.Fields != nil { flds = *d.Fields } - flds = diffFcTemplateJsonCfg(flds, v1.Fields, v2.Fields, separator) + flds = diffFcTemplateJsonCfg(flds, v1.Fields, v2.Fields) if flds != nil { d.Fields = &flds } @@ -1742,13 +1742,13 @@ func getEventExporterCfg(d []*EventExporterCfg, id string) *EventExporterCfg { } } -func diffEventExportersJsonCfg(d *[]*EventExporterJsonCfg, v1, v2 []*EventExporterCfg, separator string) *[]*EventExporterJsonCfg { +func diffEventExportersJsonCfg(d *[]*EventExporterJsonCfg, v1, v2 []*EventExporterCfg) *[]*EventExporterJsonCfg { if d == nil || *d == nil { d = &[]*EventExporterJsonCfg{} } for _, val := range v2 { dv, i := getEventExporterJsonCfg(*d, val.ID) - dv = diffEventExporterJsonCfg(dv, getEventExporterCfg(v1, val.ID), val, separator) + dv = diffEventExporterJsonCfg(dv, getEventExporterCfg(v1, val.ID), val) if i == -1 { *d = append(*d, dv) } else { @@ -1767,7 +1767,7 @@ type EEsJsonCfg struct { Exporters *[]*EventExporterJsonCfg } -func diffEEsJsonCfg(d *EEsJsonCfg, v1, v2 *EEsCfg, separator string) *EEsJsonCfg { +func diffEEsJsonCfg(d *EEsJsonCfg, v1, v2 *EEsCfg) *EEsJsonCfg { if d == nil { d = new(EEsJsonCfg) } @@ -1778,6 +1778,6 @@ func diffEEsJsonCfg(d *EEsJsonCfg, v1, v2 *EEsCfg, separator string) *EEsJsonCfg d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } d.Cache = diffCacheParamsJsonCfg(d.Cache, v2.Cache) - d.Exporters = diffEventExportersJsonCfg(d.Exporters, v1.Exporters, v2.Exporters, separator) + d.Exporters = diffEventExportersJsonCfg(d.Exporters, v1.Exporters, v2.Exporters) return d } diff --git a/config/eescfg_test.go b/config/eescfg_test.go index 43b69b933..c848544c3 100644 --- a/config/eescfg_test.go +++ b/config/eescfg_test.go @@ -212,7 +212,7 @@ func TestEventExporterFieldloadFromJsonCfg(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -231,7 +231,7 @@ func TestEventExporterFieldloadFromJsonCfg1(t *testing.T) { } expected := "no template with id: <>" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -240,7 +240,7 @@ func TestEventExporterloadFromJsonCfg(t *testing.T) { jsonCfg := NewDefaultCGRConfig() eventExporter := new(EventExporterCfg) - if err := eventExporter.loadFromJSONCfg(nil, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := eventExporter.loadFromJSONCfg(nil, jsonCfg.templates); err != nil { t.Error(err) } } @@ -255,7 +255,7 @@ func TestEESCacheloadFromJsonCfg(t *testing.T) { } expected := "time: unknown unit \"ss\" in duration \"1ss\"" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.eesCfg.loadFromJSONCfg(eesCfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.eesCfg.loadFromJSONCfg(eesCfg, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -452,9 +452,9 @@ func TestEEsCfgloadFromJsonCfgCase1(t *testing.T) { } } cgrCfg := NewDefaultCGRConfig() - if err := cgrCfg.eesCfg.loadFromJSONCfg(nil, cgrCfg.templates, cgrCfg.generalCfg.RSRSep); err != nil { + if err := cgrCfg.eesCfg.loadFromJSONCfg(nil, cgrCfg.templates); err != nil { t.Error(err) - } else if err := cgrCfg.eesCfg.loadFromJSONCfg(jsonCfg, cgrCfg.templates, cgrCfg.generalCfg.RSRSep); err != nil { + } else if err := cgrCfg.eesCfg.loadFromJSONCfg(jsonCfg, cgrCfg.templates); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCfg, cgrCfg.eesCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedCfg), utils.ToJSON(cgrCfg.eesCfg)) @@ -594,7 +594,7 @@ func TestEEsCfgloadFromJsonCfgCase2(t *testing.T) { } } jsnCfg := NewDefaultCGRConfig() - if err := jsnCfg.eesCfg.loadFromJSONCfg(jsonCfg, msgTemplates, jsnCfg.generalCfg.RSRSep); err != nil { + if err := jsnCfg.eesCfg.loadFromJSONCfg(jsonCfg, msgTemplates); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedCfg, jsnCfg.eesCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedCfg), utils.ToJSON(jsnCfg.eesCfg)) @@ -685,7 +685,7 @@ func TestEEsCfgAsMapInterface(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else { - rcv := cgrCfg.eesCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep).(map[string]any) + rcv := cgrCfg.eesCfg.AsMapInterface().(map[string]any) if len(rcv[utils.ExportersCfg].([]map[string]any)) != 2 { t.Errorf("Expected %+v, received %+v", 2, len(rcv[utils.ExportersCfg].([]map[string]any))) } else if !reflect.DeepEqual(eMap[utils.ExportersCfg].([]map[string]any)[0][utils.FieldsCfg].([]map[string]any)[0][utils.ValueCfg], @@ -824,7 +824,7 @@ func TestDiffEventExporterJsonCfg(t *testing.T) { Efs_conns: utils.SliceStringPointer([]string{"efs test"}), } - rcv := diffEventExporterJsonCfg(d, v1, v2, ";") + rcv := diffEventExporterJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -833,7 +833,7 @@ func TestDiffEventExporterJsonCfg(t *testing.T) { expected = &EventExporterJsonCfg{ Opts: &EventExporterOptsJson{}, } - rcv = diffEventExporterJsonCfg(d, v1, v2, ";") + rcv = diffEventExporterJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -855,7 +855,7 @@ func TestDiffEventExporterJsonCfg(t *testing.T) { }, } - rcv = diffEventExporterJsonCfg(d, v1, v2, ";") + rcv = diffEventExporterJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1037,7 +1037,7 @@ func TestDiffEventExportersJsonCfg(t *testing.T) { }, } - rcv := diffEventExportersJsonCfg(d, v1, v2, ";") + rcv := diffEventExportersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1048,7 +1048,7 @@ func TestDiffEventExportersJsonCfg(t *testing.T) { Opts: &EventExporterOptsJson{}, }, } - rcv = diffEventExportersJsonCfg(d, v1, v2, ";") + rcv = diffEventExportersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1066,7 +1066,7 @@ func TestDiffEventExportersJsonCfg(t *testing.T) { }, } - rcv = diffEventExportersJsonCfg(d, v1, v2, ";") + rcv = diffEventExportersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1123,7 +1123,7 @@ func TestDiffEEsJsonCfg(t *testing.T) { }, } - rcv := diffEEsJsonCfg(d, v1, v2, ";") + rcv := diffEEsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1146,7 +1146,7 @@ func TestDiffEEsJsonCfg(t *testing.T) { }, }, } - rcv = diffEEsJsonCfg(d, v1, v2, ";") + rcv = diffEEsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1734,7 +1734,7 @@ func TestEEsAsMapInterface(t *testing.T) { }, } - rcv := eeCfg.AsMapInterface(",") + rcv := eeCfg.AsMapInterface() if !reflect.DeepEqual(exp[utils.OptsCfg], rcv[utils.OptsCfg]) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp["opts"]), utils.ToJSON(rcv["opts"])) diff --git a/config/efscfg.go b/config/efscfg.go index 3e91bc273..8f9896845 100644 --- a/config/efscfg.go +++ b/config/efscfg.go @@ -65,7 +65,7 @@ func (efsCfg *EFsCfg) loadFromJSONCfg(jsonEFsCfg *EfsJsonCfg) (err error) { } // AsMapInterface returns the config of EFsCfg as a map[string]any -func (efsCfg EFsCfg) AsMapInterface(string) any { +func (efsCfg EFsCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: efsCfg.Enabled, utils.FailedPostsDirCfg: efsCfg.FailedPostsDir, diff --git a/config/erscfg.go b/config/erscfg.go index a4cc4550f..a9252d3bd 100644 --- a/config/erscfg.go +++ b/config/erscfg.go @@ -53,10 +53,10 @@ func (erS *ERsCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) ( if err = jsnCfg.GetSection(ctx, ERsJSON, jsnERsCfg); err != nil { return } - return erS.loadFromJSONCfg(jsnERsCfg, cfg.templates, cfg.generalCfg.RSRSep) + return erS.loadFromJSONCfg(jsnERsCfg, cfg.templates) } -func (erS *ERsCfg) loadFromJSONCfg(jsnCfg *ERsJsonCfg, msgTemplates map[string][]*FCTemplate, sep string) (err error) { +func (erS *ERsCfg) loadFromJSONCfg(jsnCfg *ERsJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnCfg == nil { return } @@ -74,10 +74,10 @@ func (erS *ERsCfg) loadFromJSONCfg(jsnCfg *ERsJsonCfg, msgTemplates map[string][ return } } - return erS.appendERsReaders(jsnCfg.Readers, msgTemplates, sep) + return erS.appendERsReaders(jsnCfg.Readers, msgTemplates) } -func (erS *ERsCfg) appendERsReaders(jsnReaders *[]*EventReaderJsonCfg, msgTemplates map[string][]*FCTemplate, sep string) (err error) { +func (erS *ERsCfg) appendERsReaders(jsnReaders *[]*EventReaderJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnReaders == nil { return } @@ -95,7 +95,7 @@ func (erS *ERsCfg) appendERsReaders(jsnReaders *[]*EventReaderJsonCfg, msgTempla rdr = getDftEvRdrCfg() erS.Readers = append(erS.Readers, rdr) } - if err := rdr.loadFromJSONCfg(jsnReader, msgTemplates, sep); err != nil { + if err := rdr.loadFromJSONCfg(jsnReader, msgTemplates); err != nil { return err } @@ -121,7 +121,7 @@ func (erS ERsCfg) Clone() (cln *ERsCfg) { } // AsMapInterface returns the config as a map[string]any -func (erS ERsCfg) AsMapInterface(separator string) any { +func (erS ERsCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: erS.Enabled, utils.PartialCacheTTLCfg: "0", @@ -138,7 +138,7 @@ func (erS ERsCfg) AsMapInterface(separator string) any { if erS.Readers != nil { readers := make([]map[string]any, len(erS.Readers)) for i, item := range erS.Readers { - readers[i] = item.AsMapInterface(separator) + readers[i] = item.AsMapInterface() } mp[utils.ReadersCfg] = readers } @@ -361,7 +361,7 @@ func (erOpts *EventReaderOpts) loadFromJSONCfg(jsnCfg *EventReaderOptsJson) (err return } -func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplates map[string][]*FCTemplate, sep string) (err error) { +func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnCfg == nil { return } @@ -391,7 +391,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat er.ProcessedPath = *jsnCfg.ProcessedPath } if jsnCfg.Tenant != nil { - if er.Tenant, err = NewRSRParsers(*jsnCfg.Tenant, sep); err != nil { + if er.Tenant, err = NewRSRParsers(*jsnCfg.Tenant, utils.RSRSep); err != nil { return err } } @@ -421,7 +421,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat } } if jsnCfg.Fields != nil { - if er.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields, sep); err != nil { + if er.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields); err != nil { return err } if tpls, err := InflateTemplates(er.Fields, msgTemplates); err != nil { @@ -431,7 +431,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat } } if jsnCfg.CacheDumpFields != nil { - if er.CacheDumpFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.CacheDumpFields, sep); err != nil { + if er.CacheDumpFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.CacheDumpFields); err != nil { return err } if tpls, err := InflateTemplates(er.CacheDumpFields, msgTemplates); err != nil { @@ -441,7 +441,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat } } if jsnCfg.PartialCommitFields != nil { - if er.PartialCommitFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.PartialCommitFields, sep); err != nil { + if er.PartialCommitFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.PartialCommitFields); err != nil { return err } if tpls, err := InflateTemplates(er.PartialCommitFields, msgTemplates); err != nil { @@ -671,7 +671,7 @@ func (er EventReaderCfg) Clone() (cln *EventReaderCfg) { } // AsMapInterface returns the config as a map[string]any -func (er *EventReaderCfg) AsMapInterface(separator string) (initialMP map[string]any) { +func (er *EventReaderCfg) AsMapInterface() (initialMP map[string]any) { opts := map[string]any{} if er.Opts.PartialPath != nil { @@ -807,7 +807,7 @@ func (er *EventReaderCfg) AsMapInterface(separator string) (initialMP map[string utils.ConcurrentRequestsCfg: er.ConcurrentReqs, utils.SourcePathCfg: er.SourcePath, utils.ProcessedPathCfg: er.ProcessedPath, - utils.TenantCfg: er.Tenant.GetRule(separator), + utils.TenantCfg: er.Tenant.GetRule(), utils.TimezoneCfg: er.Timezone, utils.FiltersCfg: er.Filters, utils.FlagsCfg: []string{}, @@ -833,21 +833,21 @@ func (er *EventReaderCfg) AsMapInterface(separator string) (initialMP map[string if er.Fields != nil { fields := make([]map[string]any, len(er.Fields)) for i, item := range er.Fields { - fields[i] = item.AsMapInterface(separator) + fields[i] = item.AsMapInterface() } initialMP[utils.FieldsCfg] = fields } if er.CacheDumpFields != nil { cacheDumpFields := make([]map[string]any, len(er.CacheDumpFields)) for i, item := range er.CacheDumpFields { - cacheDumpFields[i] = item.AsMapInterface(separator) + cacheDumpFields[i] = item.AsMapInterface() } initialMP[utils.CacheDumpFieldsCfg] = cacheDumpFields } if er.PartialCommitFields != nil { parCFields := make([]map[string]any, len(er.PartialCommitFields)) for i, item := range er.PartialCommitFields { - parCFields[i] = item.AsMapInterface(separator) + parCFields[i] = item.AsMapInterface() } initialMP[utils.PartialCommitFieldsCfg] = parCFields } @@ -1274,7 +1274,7 @@ func diffEventReaderOptsJsonCfg(d *EventReaderOptsJson, v1, v2 *EventReaderOpts) return d } -func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separator string) *EventReaderJsonCfg { +func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg) *EventReaderJsonCfg { if d == nil { d = new(EventReaderJsonCfg) } @@ -1306,8 +1306,8 @@ func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separ d.MaxReconnectInterval = utils.StringPointer(v2.MaxReconnectInterval.String()) } d.Opts = diffEventReaderOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) - tnt1 := v1.Tenant.GetRule(separator) - tnt2 := v2.Tenant.GetRule(separator) + tnt1 := v1.Tenant.GetRule() + tnt2 := v2.Tenant.GetRule() if tnt1 != tnt2 { d.Tenant = utils.StringPointer(tnt2) } @@ -1332,7 +1332,7 @@ func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separ if d.Fields != nil { flds = *d.Fields } - flds = diffFcTemplateJsonCfg(flds, v1.Fields, v2.Fields, separator) + flds = diffFcTemplateJsonCfg(flds, v1.Fields, v2.Fields) if flds != nil { d.Fields = &flds } @@ -1341,7 +1341,7 @@ func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separ if d.PartialCommitFields != nil { pcf = *d.PartialCommitFields } - pcf = diffFcTemplateJsonCfg(pcf, v1.PartialCommitFields, v2.PartialCommitFields, separator) + pcf = diffFcTemplateJsonCfg(pcf, v1.PartialCommitFields, v2.PartialCommitFields) if pcf != nil { d.PartialCommitFields = &pcf } @@ -1350,7 +1350,7 @@ func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separ if d.CacheDumpFields != nil { cdf = *d.CacheDumpFields } - cdf = diffFcTemplateJsonCfg(cdf, v1.CacheDumpFields, v2.CacheDumpFields, separator) + cdf = diffFcTemplateJsonCfg(cdf, v1.CacheDumpFields, v2.CacheDumpFields) if cdf != nil { d.CacheDumpFields = &cdf } @@ -1378,13 +1378,13 @@ func getEventReaderCfg(d []*EventReaderCfg, id string) *EventReaderCfg { } } -func diffEventReadersJsonCfg(d *[]*EventReaderJsonCfg, v1, v2 []*EventReaderCfg, separator string) *[]*EventReaderJsonCfg { +func diffEventReadersJsonCfg(d *[]*EventReaderJsonCfg, v1, v2 []*EventReaderCfg) *[]*EventReaderJsonCfg { if d == nil || *d == nil { d = &[]*EventReaderJsonCfg{} } for _, val := range v2 { dv, i := getEventReaderJsonCfg(*d, val.ID) - dv = diffEventReaderJsonCfg(dv, getEventReaderCfg(v1, val.ID), val, separator) + dv = diffEventReaderJsonCfg(dv, getEventReaderCfg(v1, val.ID), val) if i == -1 { *d = append(*d, dv) } else { @@ -1404,7 +1404,7 @@ type ERsJsonCfg struct { PartialCacheTTL *string `json:"partial_cache_ttl"` } -func diffERsJsonCfg(d *ERsJsonCfg, v1, v2 *ERsCfg, separator string) *ERsJsonCfg { +func diffERsJsonCfg(d *ERsJsonCfg, v1, v2 *ERsCfg) *ERsJsonCfg { if d == nil { d = new(ERsJsonCfg) } @@ -1420,6 +1420,6 @@ func diffERsJsonCfg(d *ERsJsonCfg, v1, v2 *ERsCfg, separator string) *ERsJsonCfg if v1.PartialCacheTTL != v2.PartialCacheTTL { d.PartialCacheTTL = utils.StringPointer(v2.PartialCacheTTL.String()) } - d.Readers = diffEventReadersJsonCfg(d.Readers, v1.Readers, v2.Readers, separator) + d.Readers = diffEventReadersJsonCfg(d.Readers, v1.Readers, v2.Readers) return d } diff --git a/config/erscfg_test.go b/config/erscfg_test.go index b0dc48760..9f5eed655 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -188,7 +188,7 @@ func TestEventReaderloadFromJsonCfg(t *testing.T) { jsonCfg := NewDefaultCGRConfig() eventReader := new(EventReaderCfg) - if err := eventReader.loadFromJSONCfg(nil, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := eventReader.loadFromJSONCfg(nil, jsonCfg.templates); err != nil { t.Error(err) } } @@ -203,7 +203,7 @@ func TestEventReaderloadFromJsonCase1(t *testing.T) { } expected := "time: unknown unit \"ss\" in duration \"1ss\"" jsoncfg := NewDefaultCGRConfig() - if err := jsoncfg.ersCfg.loadFromJSONCfg(cfgJSON, jsoncfg.templates, jsoncfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsoncfg.ersCfg.loadFromJSONCfg(cfgJSON, jsoncfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -218,7 +218,7 @@ func TestEventReaderloadFromJsonCase3(t *testing.T) { } expected := "invalid converter terminator in rule: " jsoncfg := NewDefaultCGRConfig() - if err := jsoncfg.ersCfg.loadFromJSONCfg(cfgJSON, jsoncfg.templates, jsoncfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsoncfg.ersCfg.loadFromJSONCfg(cfgJSON, jsoncfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -229,7 +229,7 @@ func TestEventReaderloadFromJsonCase2(t *testing.T) { } expected := `time: unknown unit "ss" in duration "1ss"` jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -373,11 +373,11 @@ func TestERSloadFromJsonCfg(t *testing.T) { Readers: nil, } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err != nil { t.Error(err) } cfgJSON = nil - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err != nil { t.Error(err) } } @@ -401,7 +401,7 @@ func TestEventReaderloadFromJsonCfgErr1(t *testing.T) { } expected := "time: unknown unit \"sa\" in duration \"1sa\"" cfg := NewDefaultCGRConfig() - if err := erS.loadFromJSONCfg(jsnCfg, cfg.templates, cfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := erS.loadFromJSONCfg(jsnCfg, cfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -419,7 +419,7 @@ func TestEventReaderloadFromJsonCfgErr2(t *testing.T) { } expected := "invalid converter terminator in rule: " cfg := NewDefaultCGRConfig() - if err := erS.loadFromJSONCfg(jsnCfg, cfg.templates, cfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := erS.loadFromJSONCfg(jsnCfg, cfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -450,8 +450,7 @@ func TestEventReaderloadFromJsonCfgErr3(t *testing.T) { }, }, } - cfg := NewDefaultCGRConfig() - if err := erS.loadFromJSONCfg(jsnCfg, tmpl, cfg.generalCfg.RSRSep); err != nil { + if err := erS.loadFromJSONCfg(jsnCfg, tmpl); err != nil { t.Error(err) } else if !reflect.DeepEqual(erS.PartialCommitFields, tmpl["value"]) { t.Errorf("Expected %v \n but received \n %v", erS.PartialCommitFields, tmpl["value"]) @@ -472,7 +471,7 @@ func TestEventReaderFieldsloadFromJsonCfg(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -492,7 +491,7 @@ func TestERSloadFromJsonCase1(t *testing.T) { } expected := "no template with id: <>" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -511,7 +510,7 @@ func TestERSloadFromJsonCase2(t *testing.T) { } expected := "no template with id: <>" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -646,7 +645,7 @@ func TestERSloadFromJsonCase3(t *testing.T) { v.ComputePath() } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, msgTemplates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, msgTemplates); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedERsCfg, jsonCfg.ersCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedERsCfg), utils.ToJSON(jsonCfg.ersCfg)) @@ -786,7 +785,7 @@ func TestERSloadFromJsonCase4(t *testing.T) { v.ComputePath() } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, msgTemplates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, msgTemplates); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedERsCfg, jsonCfg.ersCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedERsCfg), utils.ToJSON(jsonCfg.ersCfg)) @@ -807,7 +806,7 @@ func TestEventReaderCacheDumpFieldsloadFromJsonCfg(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.ersCfg.loadFromJSONCfg(cfgJSON, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1045,7 +1044,7 @@ func TestERsCfgAsMapInterfaceCase1(t *testing.T) { } if cfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cfg.ersCfg.AsMapInterface(utils.InfieldSep); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cfg.ersCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -1186,7 +1185,7 @@ func TestERSCfgAsMapInterfaceCase2(t *testing.T) { } if cfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cfg.ersCfg.AsMapInterface(utils.InfieldSep); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cfg.ersCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -1320,7 +1319,7 @@ func TestERsloadFromJsonCfg(t *testing.T) { } } cfgCgr := NewDefaultCGRConfig() - if err := cfgCgr.ersCfg.loadFromJSONCfg(cfgJSON, cfgCgr.templates, cfgCgr.generalCfg.RSRSep); err != nil { + if err := cfgCgr.ersCfg.loadFromJSONCfg(cfgJSON, cfgCgr.templates); err != nil { t.Error(err) } else if !reflect.DeepEqual(cfgCgr.ersCfg, expectedERsCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedERsCfg), utils.ToJSON(cfgCgr.ersCfg)) @@ -1424,7 +1423,7 @@ func TestDiffEventReaderJsonCfg(t *testing.T) { }, } - rcv := diffEventReaderJsonCfg(d, v1, v2, ";") + rcv := diffEventReaderJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1484,7 +1483,7 @@ func TestDiffEventReaderJsonCfg(t *testing.T) { }, }, } - rcv = diffEventReaderJsonCfg(d, v1, v2, ";") + rcv = diffEventReaderJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1646,7 +1645,7 @@ func TestDiffEventReadersJsonCfg(t *testing.T) { }, } - rcv := diffEventReadersJsonCfg(d, v1, v2, ";") + rcv := diffEventReadersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1657,7 +1656,7 @@ func TestDiffEventReadersJsonCfg(t *testing.T) { Opts: &EventReaderOptsJson{}, }, } - rcv = diffEventReadersJsonCfg(d, v1, v2, ";") + rcv = diffEventReadersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1669,7 +1668,7 @@ func TestDiffEventReadersJsonCfg(t *testing.T) { }, } - rcv = diffEventReadersJsonCfg(d, v1, v2, ";") + rcv = diffEventReadersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -1714,7 +1713,7 @@ func TestDiffERsJsonCfg(t *testing.T) { PartialCacheTTL: utils.StringPointer("12h0m0s"), } - rcv := diffERsJsonCfg(d, v1, v2, ";") + rcv := diffERsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %+v \n but received \n %+v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -2097,7 +2096,7 @@ func TestERsAsMapInterface(t *testing.T) { }, } - rcv := erCfg.AsMapInterface("") + rcv := erCfg.AsMapInterface() if !reflect.DeepEqual(rcv[utils.OptsCfg], exp[utils.OptsCfg]) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp[utils.OptsCfg]), utils.ToJSON(rcv[utils.OptsCfg])) } @@ -2295,7 +2294,7 @@ func TestErsCfgAsMapInterface(t *testing.T) { utils.ConcurrentRequestsCfg: er.ConcurrentReqs, utils.SourcePathCfg: er.SourcePath, utils.ProcessedPathCfg: er.ProcessedPath, - utils.TenantCfg: er.Tenant.GetRule(""), + utils.TenantCfg: er.Tenant.GetRule(), utils.TimezoneCfg: er.Timezone, utils.FiltersCfg: er.Filters, utils.FlagsCfg: []string{}, @@ -2305,7 +2304,7 @@ func TestErsCfgAsMapInterface(t *testing.T) { utils.MaxReconnectIntervalCfg: "0", utils.OptsCfg: opts, } - rcv := er.AsMapInterface("") + rcv := er.AsMapInterface() if !reflect.DeepEqual(exp, rcv) { t.Errorf("\nexpecting %s\nreceived %s\n", utils.ToJSON(exp), utils.ToJSON(rcv)) diff --git a/config/fctemplate.go b/config/fctemplate.go index 39c4e9524..2bdbb67d9 100644 --- a/config/fctemplate.go +++ b/config/fctemplate.go @@ -28,7 +28,7 @@ import ( ) // NewFCTemplateFromFCTemplateJSONCfg creates a FCTemplate from json -func NewFCTemplateFromFCTemplateJSONCfg(jsnCfg *FcTemplateJsonCfg, separator string) (*FCTemplate, error) { +func NewFCTemplateFromFCTemplateJSONCfg(jsnCfg *FcTemplateJsonCfg) (*FCTemplate, error) { fcTmp := new(FCTemplate) var err error if jsnCfg.Type != nil { @@ -46,7 +46,7 @@ func NewFCTemplateFromFCTemplateJSONCfg(jsnCfg *FcTemplateJsonCfg, separator str fcTmp.Filters = slices.Clone(*jsnCfg.Filters) } if jsnCfg.Value != nil { - if fcTmp.Value, err = NewRSRParsers(*jsnCfg.Value, separator); err != nil { + if fcTmp.Value, err = NewRSRParsers(*jsnCfg.Value, utils.RSRSep); err != nil { return nil, err } } @@ -118,10 +118,10 @@ type FCTemplate struct { } // FCTemplatesFromFCTemplatesJSONCfg will build a list of FCTemplates from json -func FCTemplatesFromFCTemplatesJSONCfg(jsnCfgFlds []*FcTemplateJsonCfg, separator string) (retFields []*FCTemplate, err error) { +func FCTemplatesFromFCTemplatesJSONCfg(jsnCfgFlds []*FcTemplateJsonCfg) (retFields []*FCTemplate, err error) { retFields = make([]*FCTemplate, len(jsnCfgFlds)) for i, jsnFld := range jsnCfgFlds { - if retFields[i], err = NewFCTemplateFromFCTemplateJSONCfg(jsnFld, separator); err != nil { + if retFields[i], err = NewFCTemplateFromFCTemplateJSONCfg(jsnFld); err != nil { return nil, err } } @@ -202,7 +202,7 @@ func (sCft FCTemplates) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConf return } for k, val := range jsnTemplateCfg { - if sCft[k], err = FCTemplatesFromFCTemplatesJSONCfg(val, cfg.generalCfg.RSRSep); err != nil { + if sCft[k], err = FCTemplatesFromFCTemplatesJSONCfg(val); err != nil { return } } @@ -210,12 +210,12 @@ func (sCft FCTemplates) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConf } // AsMapInterface returns the config as a map[string]any -func (sCft FCTemplates) AsMapInterface(separator string) any { +func (sCft FCTemplates) AsMapInterface() any { mp := make(map[string][]map[string]any) for key, value := range sCft { mp[key] = make([]map[string]any, len(value)) for i, item := range value { - mp[key][i] = item.AsMapInterface(separator) + mp[key][i] = item.AsMapInterface() } } return mp @@ -238,7 +238,7 @@ func (sCft FCTemplates) Clone() (cln FCTemplates) { } // AsMapInterface returns the config as a map[string]any -func (fc *FCTemplate) AsMapInterface(separator string) (mp map[string]any) { +func (fc *FCTemplate) AsMapInterface() (mp map[string]any) { mp = make(map[string]any) if fc.Tag != utils.EmptyString { mp[utils.TagCfg] = fc.Tag @@ -253,7 +253,7 @@ func (fc *FCTemplate) AsMapInterface(separator string) (mp map[string]any) { mp[utils.FiltersCfg] = fc.Filters } if fc.Value != nil { - mp[utils.ValueCfg] = fc.Value.GetRule(separator) + mp[utils.ValueCfg] = fc.Value.GetRule() } if fc.Width != 0 { mp[utils.WidthCfg] = fc.Width @@ -366,7 +366,7 @@ func fcTemplatesEqual(v1, v2 []*FCTemplate) bool { return true } -func diffFcTemplateJsonCfg(d []*FcTemplateJsonCfg, v1, v2 []*FCTemplate, separator string) []*FcTemplateJsonCfg { +func diffFcTemplateJsonCfg(d []*FcTemplateJsonCfg, v1, v2 []*FCTemplate) []*FcTemplateJsonCfg { if !fcTemplatesEqual(v1, v2) { d = make([]*FcTemplateJsonCfg, len(v2)) for i, v := range v2 { @@ -384,7 +384,7 @@ func diffFcTemplateJsonCfg(d []*FcTemplateJsonCfg, v1, v2 []*FCTemplate, separat d[i].Filters = &v.Filters } if v.Value != nil { - d[i].Value = utils.StringPointer(v.Value.GetRule(separator)) + d[i].Value = utils.StringPointer(v.Value.GetRule()) } if v.Width != 0 { d[i].Width = utils.IntPointer(v.Width) @@ -430,12 +430,12 @@ func diffFcTemplateJsonCfg(d []*FcTemplateJsonCfg, v1, v2 []*FCTemplate, separat return d } -func diffFcTemplatesJsonCfg(d FcTemplatesJsonCfg, v1, v2 FCTemplates, separator string) FcTemplatesJsonCfg { +func diffFcTemplatesJsonCfg(d FcTemplatesJsonCfg, v1, v2 FCTemplates) FcTemplatesJsonCfg { if d == nil { d = make(FcTemplatesJsonCfg) } for k, val := range v2 { - d[k] = diffFcTemplateJsonCfg(d[k], v1[k], val, separator) + d[k] = diffFcTemplateJsonCfg(d[k], v1[k], val) } return d } diff --git a/config/fctemplate_test.go b/config/fctemplate_test.go index f2dc8c794..03333d1f7 100644 --- a/config/fctemplate_test.go +++ b/config/fctemplate_test.go @@ -42,7 +42,7 @@ func TestNewFCTemplateFromFCTemplateJsonCfg(t *testing.T) { Layout: time.RFC3339, } expected.ComputePath() - if rcv, err := NewFCTemplateFromFCTemplateJSONCfg(jsonCfg, utils.InfieldSep); err != nil { + if rcv, err := NewFCTemplateFromFCTemplateJSONCfg(jsonCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, rcv) { t.Errorf("expected: %s ,received: %s", utils.ToJSON(expected), utils.ToJSON(rcv)) @@ -112,7 +112,7 @@ func TestFCTemplatesFromFCTemplatesJsonCfg(t *testing.T) { for _, v := range expected { v.ComputePath() } - if rcv, err := FCTemplatesFromFCTemplatesJSONCfg(jsnCfgs, utils.InfieldSep); err != nil { + if rcv, err := FCTemplatesFromFCTemplatesJSONCfg(jsnCfgs); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, rcv) { t.Errorf("expected: %s ,received: %s", utils.ToJSON(expected), utils.ToJSON(rcv)) @@ -415,7 +415,7 @@ func TestFCTemplateAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.templates.AsMapInterface(cgrCfg.generalCfg.RSRSep).(map[string][]map[string]any); !reflect.DeepEqual(eMap["custom_template"], rcv["custom_template"]) { + } else if rcv := cgrCfg.templates.AsMapInterface().(map[string][]map[string]any); !reflect.DeepEqual(eMap["custom_template"], rcv["custom_template"]) { t.Errorf("Expected %+v \n, recieved %+v", utils.ToJSON(eMap["custom_template"]), utils.ToJSON(rcv["custom_template"])) } } @@ -474,7 +474,7 @@ func TestFCTemplateAsMapInterface1(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else { - rcv := cgrCfg.templates.AsMapInterface(cgrCfg.generalCfg.RSRSep).(map[string][]map[string]any) + rcv := cgrCfg.templates.AsMapInterface().(map[string][]map[string]any) if !reflect.DeepEqual(eMap[utils.MetaErr], rcv[utils.MetaErr]) { t.Errorf("Expected %+v \n, recieved %+v", utils.ToJSON(eMap[utils.MetaErr]), utils.ToJSON(rcv[utils.MetaErr])) } else if !reflect.DeepEqual(eMap[utils.MetaASR], rcv[utils.MetaASR]) { @@ -669,7 +669,7 @@ func TestDiffFcTemplateJsonCfg(t *testing.T) { }, } - rcv := diffFcTemplateJsonCfg(d, v1, v2, ";") + rcv := diffFcTemplateJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -686,7 +686,7 @@ func TestDiffFcTemplateJsonCfg(t *testing.T) { Tag: utils.StringPointer("Tag"), }, } - rcv = diffFcTemplateJsonCfg(d, v1, v2, ";") + rcv = diffFcTemplateJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -751,7 +751,7 @@ func TestDiffFcTemplatesJsonCfg(t *testing.T) { }, } - rcv := diffFcTemplatesJsonCfg(d, v1, v2, ";") + rcv := diffFcTemplatesJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -760,7 +760,7 @@ func TestDiffFcTemplatesJsonCfg(t *testing.T) { expected = FcTemplatesJsonCfg{ "T1": nil, } - rcv = diffFcTemplatesJsonCfg(d, v1, v2, ";") + rcv = diffFcTemplatesJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/filterscfg.go b/config/filterscfg.go index 61e022ba8..c0d96587f 100644 --- a/config/filterscfg.go +++ b/config/filterscfg.go @@ -66,7 +66,7 @@ func (fSCfg *FilterSCfg) loadFromJSONCfg(jsnCfg *FilterSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (fSCfg FilterSCfg) AsMapInterface(string) any { +func (fSCfg FilterSCfg) AsMapInterface() any { mp := make(map[string]any) if fSCfg.StatSConns != nil { mp[utils.StatSConnsCfg] = getInternalJSONConns(fSCfg.StatSConns) diff --git a/config/filterscfg_test.go b/config/filterscfg_test.go index 43e7d8dae..06fccfcd2 100644 --- a/config/filterscfg_test.go +++ b/config/filterscfg_test.go @@ -70,7 +70,7 @@ func TestFilterSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.filterSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.filterSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } @@ -88,7 +88,7 @@ func TestFilterSCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.filterSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.filterSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } diff --git a/config/fsagentcfg.go b/config/fsagentcfg.go index 7381794a9..ea2e68fd0 100644 --- a/config/fsagentcfg.go +++ b/config/fsagentcfg.go @@ -166,7 +166,7 @@ func (fscfg *FsAgentCfg) loadFromJSONCfg(jsnCfg *FreeswitchAgentJsonCfg) error { } // AsMapInterface returns the config as a map[string]any -func (fscfg FsAgentCfg) AsMapInterface(separator string) any { +func (fscfg FsAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: fscfg.Enabled, utils.SubscribeParkCfg: fscfg.SubscribePark, diff --git a/config/generalcfg.go b/config/generalcfg.go index 7dca8f6ae..7028eca79 100644 --- a/config/generalcfg.go +++ b/config/generalcfg.go @@ -51,7 +51,6 @@ type GeneralCfg struct { LockingTimeout time.Duration // locking mechanism timeout to avoid deadlocks DigestSeparator string // DigestEqual string // - RSRSep string // separator used to split RSRParser (by default is used ";") MaxParallelConns int // the maximum number of connections used by the *parallel strategy DecimalMaxScale int @@ -148,9 +147,6 @@ func (gencfg *GeneralCfg) loadFromJSONCfg(jsnGeneralCfg *GeneralJsonCfg) (err er if jsnGeneralCfg.Digest_equal != nil { gencfg.DigestEqual = *jsnGeneralCfg.Digest_equal } - if jsnGeneralCfg.Rsr_separator != nil { - gencfg.RSRSep = *jsnGeneralCfg.Rsr_separator - } if jsnGeneralCfg.Max_parallel_conns != nil { gencfg.MaxParallelConns = *jsnGeneralCfg.Max_parallel_conns } @@ -174,7 +170,7 @@ func (gencfg *GeneralCfg) loadFromJSONCfg(jsnGeneralCfg *GeneralJsonCfg) (err er } // AsMapInterface returns the config as a map[string]any -func (gencfg GeneralCfg) AsMapInterface(string) any { +func (gencfg GeneralCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaExporterIDs: gencfg.Opts.ExporterIDs, } @@ -194,7 +190,6 @@ func (gencfg GeneralCfg) AsMapInterface(string) any { utils.MaxReconnectIntervalCfg: "0", utils.DigestSeparatorCfg: gencfg.DigestSeparator, utils.DigestEqualCfg: gencfg.DigestEqual, - utils.RSRSepCfg: gencfg.RSRSep, utils.MaxParallelConnsCfg: gencfg.MaxParallelConns, utils.LockingTimeoutCfg: "0", utils.ConnectTimeoutCfg: "0", @@ -261,7 +256,6 @@ func (gencfg GeneralCfg) Clone() *GeneralCfg { LockingTimeout: gencfg.LockingTimeout, DigestSeparator: gencfg.DigestSeparator, DigestEqual: gencfg.DigestEqual, - RSRSep: gencfg.RSRSep, MaxParallelConns: gencfg.MaxParallelConns, DecimalMaxScale: gencfg.DecimalMaxScale, DecimalMinScale: gencfg.DecimalMinScale, @@ -295,7 +289,6 @@ type GeneralJsonCfg struct { Locking_timeout *string Digest_separator *string Digest_equal *string - Rsr_separator *string Max_parallel_conns *int Decimal_max_scale *int @@ -371,9 +364,6 @@ func diffGeneralJsonCfg(d *GeneralJsonCfg, v1, v2 *GeneralCfg) *GeneralJsonCfg { if v1.DigestEqual != v2.DigestEqual { d.Digest_equal = utils.StringPointer(v2.DigestEqual) } - if v1.RSRSep != v2.RSRSep { - d.Rsr_separator = utils.StringPointer(v2.RSRSep) - } if v1.MaxParallelConns != v2.MaxParallelConns { d.Max_parallel_conns = utils.IntPointer(v2.MaxParallelConns) } diff --git a/config/generalcfg_test.go b/config/generalcfg_test.go index 87cecc13f..4c70a250c 100644 --- a/config/generalcfg_test.go +++ b/config/generalcfg_test.go @@ -61,7 +61,6 @@ func TestGeneralCfgloadFromJsonCfg(t *testing.T) { DigestSeparator: ",", DigestEqual: ":", MaxParallelConns: 100, - RSRSep: ";", DefaultCaching: utils.MetaReload, Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{}, @@ -126,7 +125,6 @@ func TestGeneralCfgAsMapInterface(t *testing.T) { "locking_timeout": "1s", "digest_separator": ",", "digest_equal": ":", - "rsr_separator": ";", "max_parallel_conns": 100, }, }` @@ -149,7 +147,6 @@ func TestGeneralCfgAsMapInterface(t *testing.T) { utils.LockingTimeoutCfg: "1s", utils.DigestSeparatorCfg: ",", utils.DigestEqualCfg: ":", - utils.RSRSepCfg: ";", utils.MaxParallelConnsCfg: 100, utils.DecimalMaxScaleCfg: 0, utils.DecimalMinScaleCfg: 0, @@ -161,7 +158,7 @@ func TestGeneralCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.generalCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.generalCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -196,7 +193,6 @@ func TestGeneralCfgAsMapInterface1(t *testing.T) { utils.LockingTimeoutCfg: "0", utils.DigestSeparatorCfg: ",", utils.DigestEqualCfg: ":", - utils.RSRSepCfg: ";", utils.MaxParallelConnsCfg: 100, utils.DecimalMaxScaleCfg: 0, utils.DecimalMinScaleCfg: 0, @@ -208,7 +204,7 @@ func TestGeneralCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.generalCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.generalCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -230,7 +226,6 @@ func TestGeneralCfgClone(t *testing.T) { DigestSeparator: ",", DigestEqual: ":", MaxParallelConns: 100, - RSRSep: ";", DefaultCaching: utils.MetaReload, Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{ @@ -268,7 +263,6 @@ func TestDiffGeneralJsonCfg(t *testing.T) { DigestSeparator: "", DigestEqual: "", MaxParallelConns: 50, - RSRSep: "", DefaultCaching: utils.MetaClear, Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{ @@ -300,7 +294,6 @@ func TestDiffGeneralJsonCfg(t *testing.T) { DigestSeparator: ",", DigestEqual: ":", MaxParallelConns: 100, - RSRSep: ";", DefaultCaching: utils.MetaReload, LockingTimeout: 2 * time.Second, Opts: &GeneralOpts{ @@ -333,7 +326,6 @@ func TestDiffGeneralJsonCfg(t *testing.T) { Reply_timeout: utils.StringPointer("2s"), Locking_timeout: utils.StringPointer("2s"), Digest_separator: utils.StringPointer(","), - Rsr_separator: utils.StringPointer(";"), Digest_equal: utils.StringPointer(":"), Max_parallel_conns: utils.IntPointer(100), Opts: &GeneralOptsJson{ @@ -383,7 +375,6 @@ func TestGeneralCfgCloneSection(t *testing.T) { DigestSeparator: "", DigestEqual: "", MaxParallelConns: 50, - RSRSep: "", DefaultCaching: utils.MetaClear, Opts: &GeneralOpts{}, } @@ -404,7 +395,6 @@ func TestGeneralCfgCloneSection(t *testing.T) { DigestSeparator: "", DigestEqual: "", MaxParallelConns: 50, - RSRSep: "", DefaultCaching: utils.MetaClear, Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{}, diff --git a/config/httpagntcfg.go b/config/httpagntcfg.go index b9bf4017f..b9e5a9c41 100644 --- a/config/httpagntcfg.go +++ b/config/httpagntcfg.go @@ -30,14 +30,14 @@ import ( type HTTPAgentCfgs []*HTTPAgentCfg // loadHTTPAgentCfg loads the HttpAgent section of the configuration -func (hcfgs *HTTPAgentCfgs) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) (err error) { +func (hcfgs *HTTPAgentCfgs) Load(ctx *context.Context, jsnCfg ConfigDB, _ *CGRConfig) (err error) { jsnHTTPAgntCfg := new([]*HttpAgentJsonCfg) if err = jsnCfg.GetSection(ctx, HTTPAgentJSON, jsnHTTPAgntCfg); err != nil { return } - return hcfgs.loadFromJSONCfg(jsnHTTPAgntCfg, cfg.generalCfg.RSRSep) + return hcfgs.loadFromJSONCfg(jsnHTTPAgntCfg) } -func (hcfgs *HTTPAgentCfgs) loadFromJSONCfg(jsnHTTPAgntCfg *[]*HttpAgentJsonCfg, separator string) (err error) { +func (hcfgs *HTTPAgentCfgs) loadFromJSONCfg(jsnHTTPAgntCfg *[]*HttpAgentJsonCfg) (err error) { if jsnHTTPAgntCfg == nil { return nil } @@ -54,7 +54,7 @@ func (hcfgs *HTTPAgentCfgs) loadFromJSONCfg(jsnHTTPAgntCfg *[]*HttpAgentJsonCfg, } } - if err := hac.loadFromJSONCfg(jsnCfg, separator); err != nil { + if err := hac.loadFromJSONCfg(jsnCfg); err != nil { return err } if !haveID { @@ -65,10 +65,10 @@ func (hcfgs *HTTPAgentCfgs) loadFromJSONCfg(jsnHTTPAgntCfg *[]*HttpAgentJsonCfg, } // AsMapInterface returns the config as a map[string]any -func (hcfgs HTTPAgentCfgs) AsMapInterface(separator string) any { +func (hcfgs HTTPAgentCfgs) AsMapInterface() any { mp := make([]map[string]any, len(hcfgs)) for i, item := range hcfgs { - mp[i] = item.AsMapInterface(separator) + mp[i] = item.AsMapInterface() } return mp } @@ -95,7 +95,7 @@ type HTTPAgentCfg struct { RequestProcessors []*RequestProcessor } -func (ha *HTTPAgentCfg) loadFromJSONCfg(jsnCfg *HttpAgentJsonCfg, separator string) (err error) { +func (ha *HTTPAgentCfg) loadFromJSONCfg(jsnCfg *HttpAgentJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -122,12 +122,12 @@ func (ha *HTTPAgentCfg) loadFromJSONCfg(jsnCfg *HttpAgentJsonCfg, separator stri if jsnCfg.Reply_payload != nil { ha.ReplyPayload = *jsnCfg.Reply_payload } - ha.RequestProcessors, err = appendRequestProcessors(ha.RequestProcessors, jsnCfg.Request_processors, separator) + ha.RequestProcessors, err = appendRequestProcessors(ha.RequestProcessors, jsnCfg.Request_processors) return } // AsMapInterface returns the config as a map[string]any -func (ha *HTTPAgentCfg) AsMapInterface(separator string) (initialMP map[string]any) { +func (ha *HTTPAgentCfg) AsMapInterface() (initialMP map[string]any) { initialMP = map[string]any{ utils.IDCfg: ha.ID, utils.URLCfg: ha.URL, @@ -149,7 +149,7 @@ func (ha *HTTPAgentCfg) AsMapInterface(separator string) (initialMP map[string]a } requestProcessors := make([]map[string]any, len(ha.RequestProcessors)) for i, item := range ha.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } initialMP[utils.RequestProcessorsCfg] = requestProcessors return @@ -184,7 +184,7 @@ type HttpAgentJsonCfg struct { Request_processors *[]*ReqProcessorJsnCfg } -func diffHttpAgentJsonCfg(d *HttpAgentJsonCfg, v1, v2 *HTTPAgentCfg, separator string) *HttpAgentJsonCfg { +func diffHttpAgentJsonCfg(d *HttpAgentJsonCfg, v1, v2 *HTTPAgentCfg) *HttpAgentJsonCfg { if d == nil { d = new(HttpAgentJsonCfg) } @@ -204,7 +204,7 @@ func diffHttpAgentJsonCfg(d *HttpAgentJsonCfg, v1, v2 *HTTPAgentCfg, separator s d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) return d } @@ -242,14 +242,14 @@ func getHTTPAgentCfg(d HTTPAgentCfgs, id string) *HTTPAgentCfg { } return new(HTTPAgentCfg) } -func diffHttpAgentsJsonCfg(d *[]*HttpAgentJsonCfg, v1, v2 HTTPAgentCfgs, separator string) *[]*HttpAgentJsonCfg { +func diffHttpAgentsJsonCfg(d *[]*HttpAgentJsonCfg, v1, v2 HTTPAgentCfgs) *[]*HttpAgentJsonCfg { if d == nil { d = new([]*HttpAgentJsonCfg) } if !equalsHTTPAgentCfgs(v1, v2) { for _, val := range v2 { dv, i := getHttpAgentJsonCfg(*d, val.ID) - dv = diffHttpAgentJsonCfg(dv, getHTTPAgentCfg(v1, val.ID), val, separator) + dv = diffHttpAgentJsonCfg(dv, getHTTPAgentCfg(v1, val.ID), val) if i == -1 { *d = append(*d, dv) } else { diff --git a/config/httpagntcfg_test.go b/config/httpagntcfg_test.go index 51b075b31..73f752d89 100644 --- a/config/httpagntcfg_test.go +++ b/config/httpagntcfg_test.go @@ -81,7 +81,7 @@ func TestHttpAgentCfgsloadFromJsonCfgCase1(t *testing.T) { } expected[0].RequestProcessors[0].ReplyFields[0].ComputePath() jsnCfg := NewDefaultCGRConfig() - if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON, jsnCfg.generalCfg.RSRSep); err != nil { + if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(&expected, &jsnCfg.httpAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.httpAgentCfg)) @@ -221,7 +221,7 @@ func TestHttpAgentCfgsloadFromJsonCfgCase2(t *testing.T) { expected[0].RequestProcessors[1].ReplyFields[0].ComputePath() expected[0].RequestProcessors[1].RequestFields[0].ComputePath() cfgJsn := NewDefaultCGRConfig() - if err := cfgJsn.httpAgentCfg.loadFromJSONCfg(cfgJSON, cfgJsn.generalCfg.RSRSep); err != nil { + if err := cfgJsn.httpAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, cfgJsn.httpAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfgJsn.httpAgentCfg)) @@ -262,7 +262,7 @@ func TestHttpAgentCfgloadFromJsonCfgCase3(t *testing.T) { }}, } var httpcfg HTTPAgentCfg - if err := httpcfg.loadFromJSONCfg(jsnhttpCfg, utils.InfieldSep); err != nil { + if err := httpcfg.loadFromJSONCfg(jsnhttpCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, httpcfg) { t.Errorf("Expected: %+v \n, received: %+v", utils.ToJSON(expected), utils.ToJSON(httpcfg)) @@ -341,7 +341,7 @@ func TestHttpAgentCfgloadFromJsonCfgCase4(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -354,16 +354,14 @@ func TestHttpAgentCfgloadFromJsonCfgCase5(t *testing.T) { } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } } func TestHttpAgentCfgloadFromJsonCfgCase6(t *testing.T) { - jsonCfg := NewDefaultCGRConfig() - httpAgentCfg := new(HTTPAgentCfg) - if err := httpAgentCfg.loadFromJSONCfg(nil, jsonCfg.generalCfg.RSRSep); err != nil { + if err := httpAgentCfg.loadFromJSONCfg(nil); err != nil { t.Error(err) } } @@ -389,14 +387,14 @@ func TestHttpAgentCfgloadFromJsonCfgCase7(t *testing.T) { jsnCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr) if err != nil { t.Error(err) - } else if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON, jsnCfg.generalCfg.RSRSep); err != nil { + } else if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(&expected, &jsnCfg.httpAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.httpAgentCfg)) } cfgJSON = nil - if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON, jsnCfg.generalCfg.RSRSep); err != nil { + if err := jsnCfg.httpAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } } @@ -463,7 +461,7 @@ func TestHttpAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.httpAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.httpAgentCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, recieved %+v", eMap, rcv) } } @@ -671,7 +669,7 @@ func TestDiffHttpAgentJson(t *testing.T) { Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv := diffHttpAgentJsonCfg(d, v1, v2, ";") + rcv := diffHttpAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -680,7 +678,7 @@ func TestDiffHttpAgentJson(t *testing.T) { expected = &HttpAgentJsonCfg{ Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv = diffHttpAgentJsonCfg(d, v1, v2, ";") + rcv = diffHttpAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -726,7 +724,7 @@ func TestDiffHttpAgentsJsonCfg(t *testing.T) { }, } - rcv := diffHttpAgentsJsonCfg(d, v1, v2, ";") + rcv := diffHttpAgentsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -737,7 +735,7 @@ func TestDiffHttpAgentsJsonCfg(t *testing.T) { }, } - rcv = diffHttpAgentsJsonCfg(d, v1, v2, ";") + rcv = diffHttpAgentsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -754,7 +752,7 @@ func TestDiffHttpAgentsJsonCfg(t *testing.T) { Id: utils.StringPointer("http_agent2"), }, } - rcv = diffHttpAgentsJsonCfg(d, v1, v2, ";") + rcv = diffHttpAgentsJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/httpcfg.go b/config/httpcfg.go index 7c9044c22..022be4f49 100644 --- a/config/httpcfg.go +++ b/config/httpcfg.go @@ -166,7 +166,7 @@ func (httpcfg *HTTPCfg) loadFromJSONCfg(jsnHTTPCfg *HTTPJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (httpcfg HTTPCfg) AsMapInterface(string) any { +func (httpcfg HTTPCfg) AsMapInterface() any { clientOpts := map[string]any{ utils.HTTPClientSkipTLSVerificationCfg: false, utils.HTTPClientTLSHandshakeTimeoutCfg: httpcfg.ClientOpts.TLSHandshakeTimeout.String(), diff --git a/config/httpcfg_test.go b/config/httpcfg_test.go index ae4bbf896..bb13e91ca 100644 --- a/config/httpcfg_test.go +++ b/config/httpcfg_test.go @@ -76,11 +76,11 @@ func TestHTTPCfgloadFromJsonCfg(t *testing.T) { cfgJsn := NewDefaultCGRConfig() if err := cfgJsn.httpCfg.loadFromJSONCfg(cfgJSONStr); err != nil { t.Error(err) - } else if !reflect.DeepEqual(expected.AsMapInterface(utils.InfieldSep), - cfgJsn.httpCfg.AsMapInterface(utils.InfieldSep)) { + } else if !reflect.DeepEqual(expected.AsMapInterface(), + cfgJsn.httpCfg.AsMapInterface()) { t.Errorf("Expected %+v \n, received %+v", - expected.AsMapInterface(utils.InfieldSep), - cfgJsn.httpCfg.AsMapInterface(utils.InfieldSep)) + expected.AsMapInterface(), + cfgJsn.httpCfg.AsMapInterface()) } cfgJSONStr = nil @@ -122,7 +122,7 @@ func TestHTTPCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.httpCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.httpCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -168,7 +168,7 @@ func TestHTTPCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.httpCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.httpCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -208,9 +208,9 @@ func TestHTTPCfgClone(t *testing.T) { }, } rcv := ban.Clone() - if !reflect.DeepEqual(rcv.AsMapInterface(utils.InfieldSep), ban.AsMapInterface(utils.InfieldSep)) { - t.Errorf("Expected: %+v\nReceived: %+v", ban.AsMapInterface(utils.InfieldSep), - rcv.AsMapInterface(utils.InfieldSep)) + if !reflect.DeepEqual(rcv.AsMapInterface(), ban.AsMapInterface()) { + t.Errorf("Expected: %+v\nReceived: %+v", ban.AsMapInterface(), + rcv.AsMapInterface()) } if rcv.ClientOpts.MaxIdleConns = 50; ban.ClientOpts.MaxIdleConns != 100 { t.Errorf("Expected clone to not modify the cloned") @@ -317,11 +317,10 @@ func TestHttpCfgCloneSection(t *testing.T) { } rcv := httpCfg.CloneSection() - if !reflect.DeepEqual(rcv.AsMapInterface(utils.InfieldSep), - exp.AsMapInterface(utils.InfieldSep)) { + if !reflect.DeepEqual(rcv.AsMapInterface(), exp.AsMapInterface()) { t.Errorf("Expected %v \n but received \n %v", - utils.ToJSON(exp.AsMapInterface(utils.InfieldSep)), - utils.ToJSON(rcv.AsMapInterface(utils.InfieldSep))) + utils.ToJSON(exp.AsMapInterface()), + utils.ToJSON(rcv.AsMapInterface())) } } diff --git a/config/januscfg.go b/config/januscfg.go index b5bb3c4ce..ad67c1b44 100644 --- a/config/januscfg.go +++ b/config/januscfg.go @@ -42,12 +42,12 @@ type JanusAgentCfg struct { RequestProcessors []*RequestProcessor } -func (jacfg *JanusAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) (err error) { +func (jacfg *JanusAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, _ *CGRConfig) (err error) { jsnJACfg := new(JanusAgentJsonCfg) if err = jsnCfg.GetSection(ctx, JanusAgentJSON, jsnJACfg); err != nil { return } - return jacfg.loadFromJSONCfg(jsnJACfg, cfg.generalCfg.RSRSep) + return jacfg.loadFromJSONCfg(jsnJACfg) } func (jc *JanusConn) loadFromJSONCfg(jsnCfg *JanusConnJsonCfg) (err error) { @@ -89,7 +89,7 @@ func (jc *JanusConn) Clone() (cln *JanusConn) { return } -func (jaCfg *JanusAgentCfg) loadFromJSONCfg(jsnCfg *JanusAgentJsonCfg, separator string) (err error) { +func (jaCfg *JanusAgentCfg) loadFromJSONCfg(jsnCfg *JanusAgentJsonCfg) (err error) { if jaCfg == nil { return } @@ -115,19 +115,19 @@ func (jaCfg *JanusAgentCfg) loadFromJSONCfg(jsnCfg *JanusAgentJsonCfg, separator jaCfg.JanusConns[idx] = jc } } - jaCfg.RequestProcessors, err = appendRequestProcessors(jaCfg.RequestProcessors, jsnCfg.Request_processors, separator) + jaCfg.RequestProcessors, err = appendRequestProcessors(jaCfg.RequestProcessors, jsnCfg.Request_processors) return } // AsMapInterface returns the config as a map[string]any -func (jaCfg JanusAgentCfg) AsMapInterface(separator string) any { +func (jaCfg JanusAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: jaCfg.Enabled, utils.URLCfg: jaCfg.URL, } requestProcessors := make([]map[string]any, len(jaCfg.RequestProcessors)) for i, item := range jaCfg.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } mp[utils.RequestProcessorsCfg] = requestProcessors if jaCfg.SessionSConns != nil { @@ -235,7 +235,7 @@ func diffJanusConnsJsonCfg(d *[]*JanusConnJsonCfg, v1, v2 []*JanusConn) *[]*Janu return d } -func diffJanusAgentSJsonCfg(d *JanusAgentJsonCfg, v1, v2 *JanusAgentCfg, separator string) *JanusAgentJsonCfg { +func diffJanusAgentSJsonCfg(d *JanusAgentJsonCfg, v1, v2 *JanusAgentCfg) *JanusAgentJsonCfg { if d == nil { d = new(JanusAgentJsonCfg) } @@ -248,7 +248,7 @@ func diffJanusAgentSJsonCfg(d *JanusAgentJsonCfg, v1, v2 *JanusAgentCfg, separat if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) d.Janus_conns = diffJanusConnsJsonCfg(d.Janus_conns, v1.JanusConns, v2.JanusConns) return d } diff --git a/config/kamagentcfg.go b/config/kamagentcfg.go index 9fe78789f..6dabff2bd 100644 --- a/config/kamagentcfg.go +++ b/config/kamagentcfg.go @@ -120,7 +120,7 @@ func (ka *KamAgentCfg) loadFromJSONCfg(jsnCfg *KamAgentJsonCfg) error { } // AsMapInterface returns the config as a map[string]any -func (ka KamAgentCfg) AsMapInterface(string) any { +func (ka KamAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: ka.Enabled, utils.CreateCdrCfg: ka.CreateCdr, diff --git a/config/kamagentcfg_test.go b/config/kamagentcfg_test.go index b8c548e66..a09e5e40d 100644 --- a/config/kamagentcfg_test.go +++ b/config/kamagentcfg_test.go @@ -113,7 +113,7 @@ func TestKamAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.kamAgentCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.kamAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -138,7 +138,7 @@ func TestKamAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.kamAgentCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.kamAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } diff --git a/config/libdynamics.go b/config/libdynamics.go index c37c3fd33..2f107efa5 100644 --- a/config/libdynamics.go +++ b/config/libdynamics.go @@ -255,7 +255,7 @@ func DynamicStringOptEqual(v1, v2 []*DynamicStringOpt) bool { if v1[i].value != v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -276,7 +276,7 @@ func DynamicBoolOptEqual(v1, v2 []*DynamicBoolOpt) bool { if v1[i].value != v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -297,7 +297,7 @@ func DynamicIntOptEqual(v1, v2 []*DynamicIntOpt) bool { if v1[i].value != v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -318,7 +318,7 @@ func DynamicFloat64OptEqual(v1, v2 []*DynamicFloat64Opt) bool { if v1[i].value != v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -339,7 +339,7 @@ func DynamicDurationOptEqual(v1, v2 []*DynamicDurationOpt) bool { if v1[i].value != v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -358,7 +358,7 @@ func DynamicDecimalOptEqual(v1, v2 []*DynamicDecimalOpt) bool { v1[i].value.Cmp(v2[i].value) != 0 { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -397,7 +397,7 @@ func DynamicIntPointerOptEqual(v1, v2 []*DynamicIntPointerOpt) bool { if *v1[i].value != *v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -418,7 +418,7 @@ func DynamicDurationPointerOptEqual(v1, v2 []*DynamicDurationPointerOpt) bool { if *v1[i].value != *v2[i].value { return false } - if v1[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) != v2[i].rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) { + if v1[i].rsVal.GetRule() != v2[i].rsVal.GetRule() { return false } } @@ -434,7 +434,7 @@ func InterfaceToDynamicStringOpts(strJsOpts []*DynamicInterfaceOpt) (strOpts []* } strval := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strval, utils.DynamicDataPrefix) { - strOpts[indx].rsVal, err = NewRSRParsers(strval, CgrConfig().GeneralCfg().RSRSep) + strOpts[indx].rsVal, err = NewRSRParsers(strval, utils.RSRSep) if err != nil { return } @@ -453,7 +453,7 @@ func DynamicStringToInterfaceOpts(strOpts []*DynamicStringOpt) (strJsOpts []*Dyn FilterIDs: opt.FilterIDs, } if opt.rsVal != nil { - strOpts[index].value = opt.rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) + strOpts[index].value = opt.rsVal.GetRule() continue } strJsOpts[index].Value = opt.value @@ -470,7 +470,7 @@ func InterfaceToFloat64DynamicOpts(strJsOpts []*DynamicInterfaceOpt) (flOpts []* } strVal := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strVal, utils.DynamicDataPrefix) { - flOpts[index].rsVal, err = NewRSRParsers(strVal, CgrConfig().GeneralCfg().RSRSep) + flOpts[index].rsVal, err = NewRSRParsers(strVal, utils.RSRSep) if err != nil { return nil, err } @@ -507,7 +507,7 @@ func IfaceToIntDynamicOpts(strJsOpts []*DynamicInterfaceOpt) (intPtOpts []*Dynam } strval := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strval, utils.DynamicDataPrefix) { - intPtOpts[index].rsVal, err = NewRSRParsers(strval, CgrConfig().GeneralCfg().RSRSep) + intPtOpts[index].rsVal, err = NewRSRParsers(strval, utils.RSRSep) if err != nil { return nil, err } @@ -544,7 +544,7 @@ func IfaceToDecimalBigDynamicOpts(strOpts []*DynamicInterfaceOpt) (decOpts []*Dy } strVal := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strVal, utils.DynamicDataPrefix) { - decOpts[index].rsVal, err = NewRSRParsers(strVal, CgrConfig().GeneralCfg().RSRSep) + decOpts[index].rsVal, err = NewRSRParsers(strVal, utils.RSRSep) if err != nil { return nil, err } @@ -565,7 +565,7 @@ func DecimalToIfaceDynamicOpts(decOpts []*DynamicDecimalOpt) (strOpts []*Dynamic FilterIDs: opt.FilterIDs, } if opt.value == nil { - strOpts[index].Value = opt.rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) + strOpts[index].Value = opt.rsVal.GetRule() continue } strOpts[index].Value = opt.value.String() @@ -582,7 +582,7 @@ func IfaceToDurationDynamicOpts(ifOpts []*DynamicInterfaceOpt) (durOpts []*Dynam } strVal := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strVal, utils.DynamicDataPrefix) { - durOpts[index].rsVal, err = NewRSRParsers(strVal, CgrConfig().GeneralCfg().RSRSep) + durOpts[index].rsVal, err = NewRSRParsers(strVal, utils.RSRSep) if err != nil { return nil, err } @@ -603,7 +603,7 @@ func DurationToIfaceDynamicOpts(durOpts []*DynamicDurationOpt) (strOpts []*Dynam FilterIDs: opt.FilterIDs, } if opt.rsVal != nil { - strOpts[index].Value = opt.rsVal.GetRule(CgrConfig().GeneralCfg().RSRSep) + strOpts[index].Value = opt.rsVal.GetRule() continue } strOpts[index].Value = opt.value @@ -620,7 +620,7 @@ func IfaceToIntPointerDynamicOpts(ifOpts []*DynamicInterfaceOpt) (intPtOpts []*D } strval := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strval, utils.DynamicDataPrefix) { - intPtOpts[index].rsVal, err = NewRSRParsers(strval, CgrConfig().GeneralCfg().RSRSep) + intPtOpts[index].rsVal, err = NewRSRParsers(strval, utils.RSRSep) if err != nil { return nil, err } @@ -657,7 +657,7 @@ func IfaceToDurationPointerDynamicOpts(ifOpts []*DynamicInterfaceOpt) (durPtOpts } strVal := utils.IfaceAsString(opt.Value) if strings.HasPrefix(strVal, utils.DynamicDataPrefix) { - durPtOpts[index].rsVal, err = NewRSRParsers(strVal, CgrConfig().GeneralCfg().RSRSep) + durPtOpts[index].rsVal, err = NewRSRParsers(strVal, utils.RSRSep) if err != nil { return nil, err } @@ -692,7 +692,7 @@ func IfaceToBoolDynamicOpts(strOpts []*DynamicInterfaceOpt) (boolOpts []*Dynamic Tenant: opt.Tenant, } if dynVal := utils.IfaceAsString(opt.Value); strings.HasPrefix(dynVal, utils.DynamicDataPrefix) { - boolOpts[index].rsVal, err = NewRSRParsers(dynVal, CgrConfig().GeneralCfg().RSRSep) + boolOpts[index].rsVal, err = NewRSRParsers(dynVal, utils.RSRSep) if err != nil { return } diff --git a/config/listencfg.go b/config/listencfg.go index c29c12c54..db32f066e 100644 --- a/config/listencfg.go +++ b/config/listencfg.go @@ -69,7 +69,7 @@ func (lstcfg *ListenCfg) loadFromJSONCfg(jsnListenCfg *ListenJsonCfg) (err error } // AsMapInterface returns the config as a map[string]any -func (lstcfg ListenCfg) AsMapInterface(string) any { +func (lstcfg ListenCfg) AsMapInterface() any { return map[string]any{ utils.RPCJSONListenCfg: lstcfg.RPCJSONListen, utils.RPCGOBListenCfg: lstcfg.RPCGOBListen, diff --git a/config/listencfg_test.go b/config/listencfg_test.go index 0fb49c33d..75017c9bf 100644 --- a/config/listencfg_test.go +++ b/config/listencfg_test.go @@ -67,7 +67,7 @@ func TestListenCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.listenCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.listenCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } @@ -92,7 +92,7 @@ func TestListenCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.listenCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.listenCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } diff --git a/config/loadercgrcfg.go b/config/loadercgrcfg.go index a3120ce9d..3c3d86266 100644 --- a/config/loadercgrcfg.go +++ b/config/loadercgrcfg.go @@ -80,7 +80,7 @@ func (ld *LoaderCgrCfg) loadFromJSONCfg(jsnCfg *LoaderCfgJson) (err error) { } // AsMapInterface returns the config as a map[string]any -func (ld LoaderCgrCfg) AsMapInterface(string) any { +func (ld LoaderCgrCfg) AsMapInterface() any { mp := map[string]any{ utils.TpIDCfg: ld.TpID, utils.DataPathCfg: ld.DataPath, diff --git a/config/loadercgrcfg_test.go b/config/loadercgrcfg_test.go index b2e7a3b20..e91e7e7ce 100644 --- a/config/loadercgrcfg_test.go +++ b/config/loadercgrcfg_test.go @@ -83,7 +83,7 @@ func TestLoaderCgrCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.loaderCgrCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.loaderCgrCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/loaderscfg.go b/config/loaderscfg.go index 30b895fab..9ac3974fe 100644 --- a/config/loaderscfg.go +++ b/config/loaderscfg.go @@ -55,7 +55,7 @@ func (ldrs *LoaderSCfgs) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRCon *ldrs = append(*ldrs, ldr) // use append so the loaderS profile to be loaded from multiple files } - if err = ldr.loadFromJSONCfg(profile, cfg.templates, cfg.generalCfg.RSRSep); err != nil { + if err = ldr.loadFromJSONCfg(profile, cfg.templates); err != nil { return } } @@ -63,10 +63,10 @@ func (ldrs *LoaderSCfgs) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRCon } // AsMapInterface returns the config as a map[string]any -func (ldrs LoaderSCfgs) AsMapInterface(separator string) any { +func (ldrs LoaderSCfgs) AsMapInterface() any { mp := make([]map[string]any, len(ldrs)) for i, item := range ldrs { - mp[i] = item.AsMapInterface(separator) + mp[i] = item.AsMapInterface() } return mp } @@ -144,7 +144,7 @@ func (l *LoaderSOptsCfg) loadFromJSONCfg(jsnCfg *LoaderJsonOptsCfg) { l.StopOnError = *jsnCfg.StopOnError } } -func (lData *LoaderDataType) loadFromJSONCfg(jsnCfg *LoaderJsonDataType, msgTemplates map[string][]*FCTemplate, separator string) (err error) { +func (lData *LoaderDataType) loadFromJSONCfg(jsnCfg *LoaderJsonDataType, msgTemplates map[string][]*FCTemplate) (err error) { if jsnCfg == nil { return nil } @@ -161,7 +161,7 @@ func (lData *LoaderDataType) loadFromJSONCfg(jsnCfg *LoaderJsonDataType, msgTemp lData.Flags = utils.FlagsWithParamsFromSlice(*jsnCfg.Flags) } if jsnCfg.Fields != nil { - if lData.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields, separator); err != nil { + if lData.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields); err != nil { return } if tpls, err := InflateTemplates(lData.Fields, msgTemplates); err != nil { @@ -173,7 +173,7 @@ func (lData *LoaderDataType) loadFromJSONCfg(jsnCfg *LoaderJsonDataType, msgTemp return nil } -func (l *LoaderSCfg) loadFromJSONCfg(jsnCfg *LoaderJsonCfg, msgTemplates map[string][]*FCTemplate, separator string) (err error) { +func (l *LoaderSCfg) loadFromJSONCfg(jsnCfg *LoaderJsonCfg, msgTemplates map[string][]*FCTemplate) (err error) { if jsnCfg == nil { return nil } @@ -230,7 +230,7 @@ func (l *LoaderSCfg) loadFromJSONCfg(jsnCfg *LoaderJsonCfg, msgTemplates map[str ldrDataType = new(LoaderDataType) l.Data = append(l.Data, ldrDataType) // use append so the loaderS profile to be loaded from multiple files } - if err := ldrDataType.loadFromJSONCfg(jsnLoCfg, msgTemplates, separator); err != nil { + if err := ldrDataType.loadFromJSONCfg(jsnLoCfg, msgTemplates); err != nil { return err } } @@ -303,7 +303,7 @@ func (l LoaderSCfg) Clone() (cln *LoaderSCfg) { } // AsMapInterface returns the config as a map[string]any -func (lData LoaderDataType) AsMapInterface(separator string) (initialMP map[string]any) { +func (lData LoaderDataType) AsMapInterface() (initialMP map[string]any) { initialMP = map[string]any{ utils.TypeCf: lData.Type, utils.FilenameCfg: lData.Filename, @@ -312,14 +312,14 @@ func (lData LoaderDataType) AsMapInterface(separator string) (initialMP map[stri fields := make([]map[string]any, len(lData.Fields)) for i, item := range lData.Fields { - fields[i] = item.AsMapInterface(separator) + fields[i] = item.AsMapInterface() } initialMP[utils.FieldsCfg] = fields return } // AsMapInterface returns the config as a map[string]any -func (l LoaderSCfg) AsMapInterface(separator string) (mp map[string]any) { +func (l LoaderSCfg) AsMapInterface() (mp map[string]any) { mp = map[string]any{ utils.IDCfg: l.ID, utils.TenantCfg: l.Tenant, @@ -340,7 +340,7 @@ func (l LoaderSCfg) AsMapInterface(separator string) (mp map[string]any) { if l.Data != nil { data := make([]map[string]any, len(l.Data)) for i, item := range l.Data { - data[i] = item.AsMapInterface(separator) + data[i] = item.AsMapInterface() } mp[utils.DataCfg] = data } @@ -424,7 +424,7 @@ func diffLoaderJsonOptsCfg(v1, v2 *LoaderSOptsCfg) (d *LoaderJsonOptsCfg) { } return } -func diffLoaderJsonCfg(v1, v2 *LoaderSCfg, separator string) (d *LoaderJsonCfg) { +func diffLoaderJsonCfg(v1, v2 *LoaderSCfg) (d *LoaderJsonCfg) { d = new(LoaderJsonCfg) if v1.ID != v2.ID { d.ID = utils.StringPointer(v2.ID) @@ -457,7 +457,7 @@ func diffLoaderJsonCfg(v1, v2 *LoaderSCfg, separator string) (d *LoaderJsonCfg) data := make([]*LoaderJsonDataType, len(v2.Data)) for i, val2 := range v2.Data { var req []*FcTemplateJsonCfg - req = diffFcTemplateJsonCfg(req, nil, val2.Fields, separator) + req = diffFcTemplateJsonCfg(req, nil, val2.Fields) data[i] = &LoaderJsonDataType{ Id: utils.StringPointer(val2.ID), Type: utils.StringPointer(val2.Type), @@ -501,14 +501,14 @@ func equalsLoadersJsonCfg(v1, v2 LoaderSCfgs) bool { } return true } -func diffLoadersJsonCfg(d []*LoaderJsonCfg, v1, v2 LoaderSCfgs, separator string) []*LoaderJsonCfg { +func diffLoadersJsonCfg(d []*LoaderJsonCfg, v1, v2 LoaderSCfgs) []*LoaderJsonCfg { if equalsLoadersJsonCfg(v1, v2) { return d } d = make([]*LoaderJsonCfg, len(v2)) dft := getDftLoaderCfg() for i, val2 := range v2 { - d[i] = diffLoaderJsonCfg(dft, val2, separator) + d[i] = diffLoaderJsonCfg(dft, val2) } return d } diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index a847007ae..b4591c747 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -912,7 +912,7 @@ func TestLoaderDataTypeLoadFromJSONNil(t *testing.T) { }, } - if err := lData.loadFromJSONCfg(nil, nil, ""); err != nil { + if err := lData.loadFromJSONCfg(nil, nil); err != nil { t.Error(err) } } @@ -930,7 +930,7 @@ func TestLoaderSCfgloadFromJsonCfgCase3(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -949,7 +949,7 @@ func TestLoaderSCfgloadFromJsonCfgCase4(t *testing.T) { } expected := "no template with id: <>" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1000,7 +1000,7 @@ func TestLoaderSCfgloadFromJsonCfgCase5(t *testing.T) { }, } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, msgTemplates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, msgTemplates); err != nil { t.Error(err) } else if !reflect.DeepEqual(jsonCfg.loaderCfg[0].Data[1].Fields[0], expectedFields[0].Data[0].Fields[0]) { t.Errorf("Expected %+v,\n received %+v", utils.ToJSON(expectedFields[0].Data[0].Fields[0]), utils.ToJSON(jsonCfg.loaderCfg[0].Data[1].Fields[0])) @@ -1012,14 +1012,14 @@ func TestLoaderSCfgloadFromJsonCfgCase6(t *testing.T) { Data: &[]*LoaderJsonDataType{nil}, } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.loaderCfg[0].loadFromJSONCfg(cfg, jsonCfg.templates); err != nil { t.Error(err) } } func TestLoaderSCfgloadFromJsonCfgCase7(t *testing.T) { cfg := &LoaderSCfg{} - if err := cfg.loadFromJSONCfg(nil, nil, ""); err != nil { + if err := cfg.loadFromJSONCfg(nil, nil); err != nil { t.Error(err) } } @@ -2042,7 +2042,7 @@ func TestLoaderCfgAsMapInterfaceCase1(t *testing.T) { if cfgCgr, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else { - rcv := cfgCgr.loaderCfg.AsMapInterface(cfgCgr.generalCfg.RSRSep) + rcv := cfgCgr.loaderCfg.AsMapInterface() if len(cfgCgr.loaderCfg) != 1 { t.Errorf("expected: <%+v>, \nreceived: <%+v>", 1, len(cfgCgr.loaderCfg)) } else if !reflect.DeepEqual(rcv, eMap) { @@ -2113,7 +2113,7 @@ func TestLoaderCfgAsMapInterfaceCase2(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := jsonCfg.loaderCfg.AsMapInterface(jsonCfg.generalCfg.RSRSep).([]map[string]any); !reflect.DeepEqual(rcv[0][utils.Tenant], eMap[0][utils.Tenant]) { + } else if rcv := jsonCfg.loaderCfg.AsMapInterface().([]map[string]any); !reflect.DeepEqual(rcv[0][utils.Tenant], eMap[0][utils.Tenant]) { t.Errorf("Expected %+v, received %+v", rcv[0][utils.Tenant], eMap[0][utils.Tenant]) } } @@ -2297,14 +2297,14 @@ func TestDiffLoaderJsonCfg(t *testing.T) { Cache: map[string]*CacheParamJsonCfg{}, } - rcv := diffLoaderJsonCfg(v1, v2, ";") + rcv := diffLoaderJsonCfg(v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } v1 = v2 expected = &LoaderJsonCfg{Opts: &LoaderJsonOptsCfg{}, Cache: make(map[string]*CacheParamJsonCfg)} - rcv = diffLoaderJsonCfg(v1, v2, ";") + rcv = diffLoaderJsonCfg(v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -2458,14 +2458,14 @@ func TestDiffLoadersJsonCfg(t *testing.T) { }, } - rcv := diffLoadersJsonCfg(d, v1, v2, ";") + rcv := diffLoadersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } v1 = v2 expected = nil - rcv = diffLoadersJsonCfg(d, v1, v2, ";") + rcv = diffLoadersJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -2488,7 +2488,7 @@ func TestLockFolderRelativePath(t *testing.T) { Tp_out_dir: utils.StringPointer("/var/spool/cgrates/loader/out/"), } expPath := path.Join(ldr.LockFilePath) - if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}, utils.InfieldSep); err != nil { + if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}); err != nil { t.Error(err) } else if ldr.LockFilePath != expPath { t.Errorf("Expected %v \n but received \n %v", expPath, ldr.LockFilePath) @@ -2511,7 +2511,7 @@ func TestLockFolderNonRelativePath(t *testing.T) { Tp_out_dir: utils.StringPointer("/var/spool/cgrates/loader/out/"), } expPath := path.Join("/tmp/", utils.ResourcesCsv) - if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}, utils.InfieldSep); err != nil { + if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}); err != nil { t.Error(err) } else if ldr.LockFilePath != expPath { t.Errorf("Expected %v \n but received \n %v", expPath, ldr.LockFilePath) @@ -2534,7 +2534,7 @@ func TestLockFolderIsDir(t *testing.T) { } expPath := path.Join("/tmp") - if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}, utils.InfieldSep); err != nil { + if err := ldr.loadFromJSONCfg(jsonCfg, map[string][]*FCTemplate{}); err != nil { t.Error(err) } else if ldr.LockFilePath != expPath { t.Errorf("Expected %v \n but received \n %v", expPath, ldr.LockFilePath) @@ -2616,7 +2616,7 @@ func TestLoaderDataTypeLoadFromJSONId(t *testing.T) { Id: utils.StringPointer("IdTest"), } - if err := lData.loadFromJSONCfg(jsnCfg, nil, ""); err != nil { + if err := lData.loadFromJSONCfg(jsnCfg, nil); err != nil { t.Errorf("Expected error <%v>, Received error <%v>", nil, err) } } @@ -2630,7 +2630,7 @@ func TestLoaderSCfgloadFromJSONCfgDataId(t *testing.T) { }, }, } - if err := l.loadFromJSONCfg(jsnCfg, nil, ""); err != nil { + if err := l.loadFromJSONCfg(jsnCfg, nil); err != nil { t.Errorf("Expected error <%v>, Received error <%v>", nil, err) } @@ -2646,7 +2646,7 @@ func TestLoaderSCfgloadFromJSONCacheErr(t *testing.T) { } expErr := `time: invalid duration "invalid"` - if err := l.loadFromJSONCfg(jsnCfg, nil, ""); err.Error() != expErr { + if err := l.loadFromJSONCfg(jsnCfg, nil); err.Error() != expErr { t.Errorf("Expected error <%v>, Received error <%v>", expErr, err.Error()) } } diff --git a/config/loggercfg.go b/config/loggercfg.go index 98d83baca..46b087c52 100644 --- a/config/loggercfg.go +++ b/config/loggercfg.go @@ -62,7 +62,7 @@ func (loggCfg *LoggerCfg) loadFromJSONCfg(jsnLoggerCfg *LoggerJsonCfg) (err erro } // AsMapInterface returns the config of logger as a map[string]any -func (loggCfg *LoggerCfg) AsMapInterface(string) any { +func (loggCfg *LoggerCfg) AsMapInterface() any { mp := map[string]any{ utils.TypeCfg: loggCfg.Type, utils.LevelCfg: loggCfg.Level, diff --git a/config/migratorcfg.go b/config/migratorcfg.go index b68a2d351..88f363f9f 100644 --- a/config/migratorcfg.go +++ b/config/migratorcfg.go @@ -89,7 +89,7 @@ func (mg *MigratorCgrCfg) loadFromJSONCfg(jsnCfg *MigratorCfgJson) (err error) { } // AsMapInterface returns the config as a map[string]any -func (mg MigratorCgrCfg) AsMapInterface(string) any { +func (mg MigratorCgrCfg) AsMapInterface() any { outDataDBOpts := map[string]any{ utils.RedisMaxConnsCfg: mg.OutDataDBOpts.RedisMaxConns, utils.RedisConnectAttemptsCfg: mg.OutDataDBOpts.RedisConnectAttempts, diff --git a/config/migratorcfg_test.go b/config/migratorcfg_test.go index 903ecaad0..10eed6841 100644 --- a/config/migratorcfg_test.go +++ b/config/migratorcfg_test.go @@ -121,7 +121,7 @@ func TestMigratorCgrCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -167,7 +167,7 @@ func TestMigratorCgrCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -209,7 +209,7 @@ func TestMigratorCgrCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.migratorCgrCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } diff --git a/config/multifiles_it_test.go b/config/multifiles_it_test.go index cc187e0c7..544db5248 100644 --- a/config/multifiles_it_test.go +++ b/config/multifiles_it_test.go @@ -71,7 +71,6 @@ func TestMfEnvReaderITRead(t *testing.T) { LockingTimeout: 0, DigestSeparator: ",", DigestEqual: ":", - RSRSep: ";", MaxParallelConns: 100, Opts: &GeneralOpts{ ExporterIDs: []*DynamicStringSliceOpt{}, diff --git a/config/radiuscfg.go b/config/radiuscfg.go index d3bd30b73..e246ccdb8 100644 --- a/config/radiuscfg.go +++ b/config/radiuscfg.go @@ -38,15 +38,15 @@ type RadiusAgentCfg struct { } // loadRadiusAgentCfg loads the RadiusAgent section of the configuration -func (ra *RadiusAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) (err error) { +func (ra *RadiusAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, _ *CGRConfig) (err error) { jsnRACfg := new(RadiusAgentJsonCfg) if err = jsnCfg.GetSection(ctx, RadiusAgentJSON, jsnRACfg); err != nil { return } - return ra.loadFromJSONCfg(jsnRACfg, cfg.generalCfg.RSRSep) + return ra.loadFromJSONCfg(jsnRACfg) } -func (ra *RadiusAgentCfg) loadFromJSONCfg(jsnCfg *RadiusAgentJsonCfg, separator string) (err error) { +func (ra *RadiusAgentCfg) loadFromJSONCfg(jsnCfg *RadiusAgentJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -75,12 +75,12 @@ func (ra *RadiusAgentCfg) loadFromJSONCfg(jsnCfg *RadiusAgentJsonCfg, separator if jsnCfg.Sessions_conns != nil { ra.SessionSConns = updateBiRPCInternalConns(*jsnCfg.Sessions_conns, utils.MetaSessionS) } - ra.RequestProcessors, err = appendRequestProcessors(ra.RequestProcessors, jsnCfg.Request_processors, separator) + ra.RequestProcessors, err = appendRequestProcessors(ra.RequestProcessors, jsnCfg.Request_processors) return } // AsMapInterface returns the config as a map[string]any -func (ra RadiusAgentCfg) AsMapInterface(separator string) any { +func (ra RadiusAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: ra.Enabled, utils.ListenNetCfg: ra.ListenNet, @@ -90,7 +90,7 @@ func (ra RadiusAgentCfg) AsMapInterface(separator string) any { requestProcessors := make([]map[string]any, len(ra.RequestProcessors)) for i, item := range ra.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } mp[utils.RequestProcessorsCfg] = requestProcessors @@ -153,7 +153,7 @@ type RadiusAgentJsonCfg struct { Request_processors *[]*ReqProcessorJsnCfg } -func diffRadiusAgentJsonCfg(d *RadiusAgentJsonCfg, v1, v2 *RadiusAgentCfg, separator string) *RadiusAgentJsonCfg { +func diffRadiusAgentJsonCfg(d *RadiusAgentJsonCfg, v1, v2 *RadiusAgentCfg) *RadiusAgentJsonCfg { if d == nil { d = new(RadiusAgentJsonCfg) } @@ -174,7 +174,7 @@ func diffRadiusAgentJsonCfg(d *RadiusAgentJsonCfg, v1, v2 *RadiusAgentCfg, separ if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) return d } diff --git a/config/radiuscfg_test.go b/config/radiuscfg_test.go index f3d5d9456..996088cd4 100644 --- a/config/radiuscfg_test.go +++ b/config/radiuscfg_test.go @@ -89,13 +89,13 @@ func TestRadiusAgentCfgloadFromJsonCfgCase1(t *testing.T) { r.ComputePath() } cfg := NewDefaultCGRConfig() - if err := cfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON, cfg.generalCfg.RSRSep); err != nil { + if err := cfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, cfg.radiusAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfg.radiusAgentCfg)) } cfgJSON = nil - if err := cfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON, cfg.generalCfg.RSRSep); err != nil { + if err := cfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } } @@ -126,7 +126,7 @@ func TestRadiusAgentCfgloadFromJsonCfgCase2(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if err := jsonCfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err := jsonCfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(jsonCfg.radiusAgentCfg.RequestProcessors[0].ID, expected.RequestProcessors[0].ID) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(jsonCfg.radiusAgentCfg.RequestProcessors[0].ID), @@ -144,7 +144,7 @@ func TestRadiusAgentCfgloadFromJsonCfgCase3(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.radiusAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -202,7 +202,7 @@ func TestRadiusAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -227,7 +227,7 @@ func TestRadiusAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -334,7 +334,7 @@ func TestDiffRadiusAgentJsonCfg(t *testing.T) { }, } - rcv := diffRadiusAgentJsonCfg(d, v1, v2, ";") + rcv := diffRadiusAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -347,7 +347,7 @@ func TestDiffRadiusAgentJsonCfg(t *testing.T) { {}, }, } - rcv = diffRadiusAgentJsonCfg(d, v1, v2, ";") + rcv = diffRadiusAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/rankingscfg.go b/config/rankingscfg.go index c56257818..fcb28f62c 100644 --- a/config/rankingscfg.go +++ b/config/rankingscfg.go @@ -73,7 +73,7 @@ func (rnk *RankingSCfg) loadFromJSONCfg(jsnCfg *RankingSJsonCfg) (err error) { return } -func (rnk *RankingSCfg) AsMapInterface(string) any { +func (rnk *RankingSCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: rnk.Enabled, utils.StoreIntervalCfg: utils.EmptyString, diff --git a/config/rankingscfg_test.go b/config/rankingscfg_test.go index 1b86e6331..fe7401333 100644 --- a/config/rankingscfg_test.go +++ b/config/rankingscfg_test.go @@ -352,7 +352,7 @@ func TestRankingSCfgAsMapInterfaceStoreInterval(t *testing.T) { rnk := &RankingSCfg{ StoreInterval: 30 * time.Second, } - result := rnk.AsMapInterface("") + result := rnk.AsMapInterface() resultMap, ok := result.(map[string]any) if !ok { t.Fatalf("Expected result to be of type map[string]any, got %T", result) diff --git a/config/ratescfg.go b/config/ratescfg.go index ebc8b64aa..bfb66680a 100644 --- a/config/ratescfg.go +++ b/config/ratescfg.go @@ -174,7 +174,7 @@ func (rCfg *RateSCfg) loadFromJSONCfg(jsnCfg *RateSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (rCfg RateSCfg) AsMapInterface(string) any { +func (rCfg RateSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: rCfg.Opts.ProfileIDs, utils.MetaStartTime: rCfg.Opts.StartTime, diff --git a/config/ratescfg_test.go b/config/ratescfg_test.go index c82095474..3b68bd643 100644 --- a/config/ratescfg_test.go +++ b/config/ratescfg_test.go @@ -111,7 +111,7 @@ func TestRatesCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.rateSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.rateSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -163,7 +163,7 @@ func TestRatesCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.rateSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.rateSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/registrarccfg.go b/config/registrarccfg.go index 8806d72fc..2800f970f 100644 --- a/config/registrarccfg.go +++ b/config/registrarccfg.go @@ -48,7 +48,7 @@ func (dps *RegistrarCCfgs) loadFromJSONCfg(jsnCfg *RegistrarCJsonCfgs) (err erro } // AsMapInterface returns the config as a map[string]any -func (dps RegistrarCCfgs) AsMapInterface(string) any { +func (dps RegistrarCCfgs) AsMapInterface() any { return map[string]any{ utils.RPCCfg: dps.RPC.AsMapInterface(), } diff --git a/config/reqprocessorcfg.go b/config/reqprocessorcfg.go index 9ef75b7ac..04d5309ca 100644 --- a/config/reqprocessorcfg.go +++ b/config/reqprocessorcfg.go @@ -35,7 +35,7 @@ type RequestProcessor struct { ReplyFields []*FCTemplate } -func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep string) (err error) { +func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg) (err error) { if jsnCfg == nil { return nil } @@ -52,17 +52,17 @@ func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep stri rp.Timezone = *jsnCfg.Timezone } if jsnCfg.Tenant != nil { - if rp.Tenant, err = NewRSRParsers(*jsnCfg.Tenant, sep); err != nil { + if rp.Tenant, err = NewRSRParsers(*jsnCfg.Tenant, utils.RSRSep); err != nil { return } } if jsnCfg.Request_fields != nil { - if rp.RequestFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Request_fields, sep); err != nil { + if rp.RequestFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Request_fields); err != nil { return } } if jsnCfg.Reply_fields != nil { - if rp.ReplyFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Reply_fields, sep); err != nil { + if rp.ReplyFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Reply_fields); err != nil { return } } @@ -70,7 +70,7 @@ func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep stri } // AsMapInterface returns the config as a map[string]any -func (rp *RequestProcessor) AsMapInterface(separator string) (initialMP map[string]any) { +func (rp *RequestProcessor) AsMapInterface() (initialMP map[string]any) { initialMP = map[string]any{ utils.IDCfg: rp.ID, utils.FiltersCfg: slices.Clone(rp.Filters), @@ -78,19 +78,19 @@ func (rp *RequestProcessor) AsMapInterface(separator string) (initialMP map[stri utils.TimezoneCfg: rp.Timezone, } if rp.Tenant != nil { - initialMP[utils.TenantCfg] = rp.Tenant.GetRule(separator) + initialMP[utils.TenantCfg] = rp.Tenant.GetRule() } if rp.RequestFields != nil { requestFields := make([]map[string]any, len(rp.RequestFields)) for i, item := range rp.RequestFields { - requestFields[i] = item.AsMapInterface(separator) + requestFields[i] = item.AsMapInterface() } initialMP[utils.RequestFieldsCfg] = requestFields } if rp.ReplyFields != nil { replyFields := make([]map[string]any, len(rp.ReplyFields)) for i, item := range rp.ReplyFields { - replyFields[i] = item.AsMapInterface(separator) + replyFields[i] = item.AsMapInterface() } initialMP[utils.ReplyFieldsCfg] = replyFields } @@ -133,15 +133,15 @@ type ReqProcessorJsnCfg struct { Reply_fields *[]*FcTemplateJsonCfg } -func diffReqProcessorJsnCfg(d *ReqProcessorJsnCfg, v1, v2 *RequestProcessor, separator string) *ReqProcessorJsnCfg { +func diffReqProcessorJsnCfg(d *ReqProcessorJsnCfg, v1, v2 *RequestProcessor) *ReqProcessorJsnCfg { if d == nil { d = new(ReqProcessorJsnCfg) } if v1.ID != v2.ID { d.ID = utils.StringPointer(v2.ID) } - tnt1 := v1.Tenant.GetRule(separator) - tnt2 := v2.Tenant.GetRule(separator) + tnt1 := v1.Tenant.GetRule() + tnt2 := v2.Tenant.GetRule() if tnt1 != tnt2 { d.Tenant = utils.StringPointer(tnt2) } @@ -160,7 +160,7 @@ func diffReqProcessorJsnCfg(d *ReqProcessorJsnCfg, v1, v2 *RequestProcessor, sep if d.Request_fields != nil { req = *d.Request_fields } - req = diffFcTemplateJsonCfg(req, v1.RequestFields, v2.RequestFields, separator) + req = diffFcTemplateJsonCfg(req, v1.RequestFields, v2.RequestFields) if req != nil { d.Request_fields = &req } @@ -168,7 +168,7 @@ func diffReqProcessorJsnCfg(d *ReqProcessorJsnCfg, v1, v2 *RequestProcessor, sep if d.Reply_fields != nil { rply = *d.Reply_fields } - rply = diffFcTemplateJsonCfg(rply, v1.ReplyFields, v2.ReplyFields, separator) + rply = diffFcTemplateJsonCfg(rply, v1.ReplyFields, v2.ReplyFields) if rply != nil { d.Reply_fields = &rply } @@ -192,13 +192,13 @@ func getRequestProcessor(d []*RequestProcessor, id string) *RequestProcessor { return new(RequestProcessor) } -func diffReqProcessorsJsnCfg(d *[]*ReqProcessorJsnCfg, v1, v2 []*RequestProcessor, separator string) *[]*ReqProcessorJsnCfg { +func diffReqProcessorsJsnCfg(d *[]*ReqProcessorJsnCfg, v1, v2 []*RequestProcessor) *[]*ReqProcessorJsnCfg { if d == nil || *d == nil { d = &[]*ReqProcessorJsnCfg{} } for _, val := range v2 { dv, i := getReqProcessorJsnCfg(*d, val.ID) - dv = diffReqProcessorJsnCfg(dv, getRequestProcessor(v1, val.ID), val, separator) + dv = diffReqProcessorJsnCfg(dv, getRequestProcessor(v1, val.ID), val) if i == -1 { *d = append(*d, dv) } else { @@ -208,7 +208,7 @@ func diffReqProcessorsJsnCfg(d *[]*ReqProcessorJsnCfg, v1, v2 []*RequestProcesso return d } -func appendRequestProcessors(to []*RequestProcessor, from *[]*ReqProcessorJsnCfg, separator string) (_ []*RequestProcessor, err error) { +func appendRequestProcessors(to []*RequestProcessor, from *[]*ReqProcessorJsnCfg) (_ []*RequestProcessor, err error) { if from == nil { return to, nil } @@ -224,7 +224,7 @@ func appendRequestProcessors(to []*RequestProcessor, from *[]*ReqProcessorJsnCfg } } } - if err = rp.loadFromJSONCfg(rpJsn, separator); err != nil { + if err = rp.loadFromJSONCfg(rpJsn); err != nil { return } if !haveID { diff --git a/config/reqprocessorcfg_test.go b/config/reqprocessorcfg_test.go index 31e15f394..79a8106c9 100644 --- a/config/reqprocessorcfg_test.go +++ b/config/reqprocessorcfg_test.go @@ -107,7 +107,7 @@ func TestDiffReqProcessorJsnCfg(t *testing.T) { }, } - rcv := diffReqProcessorJsnCfg(d, v1, v2, ";") + rcv := diffReqProcessorJsnCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -143,7 +143,7 @@ func TestDiffReqProcessorJsnCfg(t *testing.T) { } v1 = v2 - rcv = diffReqProcessorJsnCfg(d, v1, v2, ";") + rcv = diffReqProcessorJsnCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -236,7 +236,7 @@ func TestDiffReqProcessorsJsnCfg(t *testing.T) { }, } - rcv := diffReqProcessorsJsnCfg(d, v1, v2, ";") + rcv := diffReqProcessorsJsnCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -267,7 +267,7 @@ func TestDiffReqProcessorsJsnCfg(t *testing.T) { }, }, } - rcv = diffReqProcessorsJsnCfg(d, v1, v2, ";") + rcv = diffReqProcessorsJsnCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -278,7 +278,7 @@ func TestDiffReqProcessorsJsnCfg(t *testing.T) { expected = &[]*ReqProcessorJsnCfg{ {}, } - rcv = diffReqProcessorsJsnCfg(d, v1, v2, ";") + rcv = diffReqProcessorsJsnCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/resourcescfg.go b/config/resourcescfg.go index 2056e1e88..817a62e03 100644 --- a/config/resourcescfg.go +++ b/config/resourcescfg.go @@ -130,7 +130,7 @@ func (rlcfg *ResourceSConfig) loadFromJSONCfg(jsnCfg *ResourceSJsonCfg) (err err } // AsMapInterface returns the config as a map[string]any -func (rlcfg ResourceSConfig) AsMapInterface(string) any { +func (rlcfg ResourceSConfig) AsMapInterface() any { opts := map[string]any{ utils.MetaUsageIDCfg: rlcfg.Opts.UsageID, utils.MetaUsageTTLCfg: rlcfg.Opts.UsageTTL, diff --git a/config/resourcescfg_test.go b/config/resourcescfg_test.go index 0aa050dd3..c206381a7 100644 --- a/config/resourcescfg_test.go +++ b/config/resourcescfg_test.go @@ -149,7 +149,7 @@ func TestResourceSConfigAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.resourceSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.resourceSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -188,7 +188,7 @@ func TestResourceSConfigAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.resourceSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.resourceSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/routescfg.go b/config/routescfg.go index c557f7a0c..fe3fea7e0 100644 --- a/config/routescfg.go +++ b/config/routescfg.go @@ -228,7 +228,7 @@ func (rts *RoutesOpts) Clone() (cln *RoutesOpts) { } // AsMapInterface returns the config as a map[string]any -func (rts RouteSCfg) AsMapInterface(string) any { +func (rts RouteSCfg) AsMapInterface() any { opts := map[string]any{ utils.OptsContext: rts.Opts.Context, utils.MetaProfileCountCfg: rts.Opts.ProfileCount, diff --git a/config/routescfg_test.go b/config/routescfg_test.go index 41949a047..ea24a9a6c 100644 --- a/config/routescfg_test.go +++ b/config/routescfg_test.go @@ -131,7 +131,7 @@ func TestRouteSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.routeSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.routeSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -183,7 +183,7 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.routeSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.routeSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/rpcconn.go b/config/rpcconn.go index 0cd6e3d3f..703e2449c 100644 --- a/config/rpcconn.go +++ b/config/rpcconn.go @@ -83,7 +83,7 @@ func (rC RPCConns) loadFromJSONCfg(jsn RPCConnsJson) { } // AsMapInterface returns the config as a map[string]any -func (rC RPCConns) AsMapInterface(string) any { +func (rC RPCConns) AsMapInterface() any { rpcConns := make(map[string]any) for key, value := range rC { rpcConns[key] = value.AsMapInterface() diff --git a/config/rpcconn_test.go b/config/rpcconn_test.go index 701f0032e..87b758b6e 100644 --- a/config/rpcconn_test.go +++ b/config/rpcconn_test.go @@ -305,7 +305,7 @@ func TestRPCConnsAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.rpcConns.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.rpcConns.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -365,7 +365,7 @@ func TestRpcConnAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.rpcConns.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.rpcConns.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/rsrparser.go b/config/rsrparser.go index 489242b3c..0aea22242 100644 --- a/config/rsrparser.go +++ b/config/rsrparser.go @@ -32,7 +32,7 @@ var ( ) // NewRSRParsers creates a new RSRParsers by spliting the rule using the separator -func NewRSRParsers(parsersRules string, rsrSeparator string) (prsrs RSRParsers, err error) { +func NewRSRParsers(parsersRules, sep string) (prsrs RSRParsers, err error) { if parsersRules == utils.EmptyString { return } @@ -82,7 +82,7 @@ func NewRSRParsers(parsersRules string, rsrSeparator string) (prsrs RSRParsers, } return NewRSRParsersFromSlice(splitedRule) } - return NewRSRParsersFromSlice(strings.Split(parsersRules, rsrSeparator)) + return NewRSRParsersFromSlice(strings.Split(parsersRules, sep)) } // NewRSRParsersFromSlice creates a new RSRParsers from a slice @@ -111,9 +111,9 @@ func NewRSRParsersMustCompile(parsersRules string, rsrSeparator string) (prsrs R type RSRParsers []*RSRParser // GetRule returns the original string from which the rules were composed -func (prsrs RSRParsers) GetRule(sep string) (out string) { +func (prsrs RSRParsers) GetRule() (out string) { for _, prsr := range prsrs { - out += sep + prsr.Rules + out += utils.RSRSep + prsr.Rules } if len(out) != 0 { out = out[1:] @@ -263,7 +263,7 @@ func (prsr *RSRParser) Compile() (err error) { if dynIdxEnd := strings.IndexByte(parserRules[dynIdxStart:], utils.RSRDynEndChar); dynIdxEnd != -1 { var dynrules RSRParsers if dynrules, err = NewRSRParsers(parserRules[dynIdxStart+1:dynIdxStart+dynIdxEnd], - CgrConfig().GeneralCfg().RSRSep); err != nil { + utils.RSRSep); err != nil { return } prsr.dynRules = dynrules diff --git a/config/rsrparser_test.go b/config/rsrparser_test.go index 02fae3348..96408bfc3 100644 --- a/config/rsrparser_test.go +++ b/config/rsrparser_test.go @@ -235,7 +235,7 @@ func TestRSRParserGetRule(t *testing.T) { ruleStr := "constant;~*req.Account" if rsrParsers, err := NewRSRParsers(ruleStr, utils.InfieldSep); err != nil { t.Error("Unexpected error: ", err.Error()) - } else if rule := rsrParsers.GetRule(utils.InfieldSep); rule != ruleStr { + } else if rule := rsrParsers.GetRule(); rule != ruleStr { t.Errorf("Expected: %q received: %q", ruleStr, rule) } } diff --git a/config/sentrypeercfg.go b/config/sentrypeercfg.go index 9826a64f4..cb458248e 100644 --- a/config/sentrypeercfg.go +++ b/config/sentrypeercfg.go @@ -68,7 +68,7 @@ func (sentrypeer *SentryPeerCfg) loadFromJSONCfg(jsnCfg *SentryPeerJsonCfg) (err } return } -func (sentrypeer SentryPeerCfg) AsMapInterface(string) any { +func (sentrypeer SentryPeerCfg) AsMapInterface() any { return map[string]any{ utils.ClientIDCfg: sentrypeer.ClientID, utils.ClientSecretCfg: sentrypeer.ClientSecret, diff --git a/config/sentrypeercfg_test.go b/config/sentrypeercfg_test.go index 3f63ae2e4..1b5a90e0b 100644 --- a/config/sentrypeercfg_test.go +++ b/config/sentrypeercfg_test.go @@ -90,7 +90,7 @@ func TestSentryPeerCfgAsMapInterface(t *testing.T) { t.Error(err) } else if err = sp.Load(context.Background(), jsnCfg, nil); err != nil { t.Error(err) - } else if rcv := sp.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := sp.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected: %+v ,received: %+v", eMap, rcv) } } diff --git a/config/sessionscfg.go b/config/sessionscfg.go index c3f870022..cdb5c7b70 100644 --- a/config/sessionscfg.go +++ b/config/sessionscfg.go @@ -424,7 +424,7 @@ func (scfg SessionSCfg) GetDefaultUsage(tor string) time.Duration { } // AsMapInterface returns the config as a map[string]any -func (scfg SessionSCfg) AsMapInterface(string) any { +func (scfg SessionSCfg) AsMapInterface() any { maxComputed := make(map[string]string) for key, item := range scfg.DefaultUsage { if key == utils.MetaAny || key == utils.MetaVoice { diff --git a/config/sessionscfg_test.go b/config/sessionscfg_test.go index 6193fa5cb..71ca52d8c 100644 --- a/config/sessionscfg_test.go +++ b/config/sessionscfg_test.go @@ -564,7 +564,7 @@ func TestSessionSCfgAsMapInterfaceCase1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sessionSCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.sessionSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -699,7 +699,7 @@ func TestSessionSCfgAsMapInterfaceCase2(t *testing.T) { if err != nil { t.Error(err) } - rcv := cgrCfg.sessionSCfg.AsMapInterface("").(map[string]any) + rcv := cgrCfg.sessionSCfg.AsMapInterface().(map[string]any) sort.Strings(rcv[utils.STIRCfg].(map[string]any)[utils.AllowedAtestCfg].([]string)) if !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) @@ -726,7 +726,7 @@ func TestSessionSCfgAsMapInterfaceCase3(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sessionSCfg.AsMapInterface("").(map[string]any); !reflect.DeepEqual(eMap[utils.STIRCfg], rcv[utils.STIRCfg]) { + } else if rcv := cgrCfg.sessionSCfg.AsMapInterface().(map[string]any); !reflect.DeepEqual(eMap[utils.STIRCfg], rcv[utils.STIRCfg]) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap[utils.STIRCfg]), utils.ToJSON(rcv[utils.STIRCfg])) } } @@ -832,7 +832,7 @@ func TestFsAgentCfgAsMapInterfaceCase1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -874,7 +874,7 @@ func TestFsAgentCfgAsMapInterfaceCase2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -911,7 +911,7 @@ func TestFsAgentCfgAsMapInterfaceCase3(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } @@ -1033,7 +1033,7 @@ func TestAsteriskAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -1067,7 +1067,7 @@ func TestAsteriskAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/sipagentcfg.go b/config/sipagentcfg.go index 4b3ba5cca..636176113 100644 --- a/config/sipagentcfg.go +++ b/config/sipagentcfg.go @@ -38,15 +38,15 @@ type SIPAgentCfg struct { } // loadSIPAgentCfg loads the sip_agent section of the configuration -func (sa *SIPAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, cfg *CGRConfig) (err error) { +func (sa *SIPAgentCfg) Load(ctx *context.Context, jsnCfg ConfigDB, _ *CGRConfig) (err error) { jsnSIPAgentCfg := new(SIPAgentJsonCfg) if err = jsnCfg.GetSection(ctx, SIPAgentJSON, jsnSIPAgentCfg); err != nil { return } - return sa.loadFromJSONCfg(jsnSIPAgentCfg, cfg.generalCfg.RSRSep) + return sa.loadFromJSONCfg(jsnSIPAgentCfg) } -func (sa *SIPAgentCfg) loadFromJSONCfg(jsnCfg *SIPAgentJsonCfg, sep string) (err error) { +func (sa *SIPAgentCfg) loadFromJSONCfg(jsnCfg *SIPAgentJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -70,12 +70,12 @@ func (sa *SIPAgentCfg) loadFromJSONCfg(jsnCfg *SIPAgentJsonCfg, sep string) (err return err } } - sa.RequestProcessors, err = appendRequestProcessors(sa.RequestProcessors, jsnCfg.Request_processors, sep) + sa.RequestProcessors, err = appendRequestProcessors(sa.RequestProcessors, jsnCfg.Request_processors) return } // AsMapInterface returns the config as a map[string]any -func (sa SIPAgentCfg) AsMapInterface(separator string) any { +func (sa SIPAgentCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: sa.Enabled, utils.ListenCfg: sa.Listen, @@ -86,7 +86,7 @@ func (sa SIPAgentCfg) AsMapInterface(separator string) any { requestProcessors := make([]map[string]any, len(sa.RequestProcessors)) for i, item := range sa.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) + requestProcessors[i] = item.AsMapInterface() } mp[utils.RequestProcessorsCfg] = requestProcessors @@ -131,7 +131,7 @@ type SIPAgentJsonCfg struct { Request_processors *[]*ReqProcessorJsnCfg } -func diffSIPAgentJsonCfg(d *SIPAgentJsonCfg, v1, v2 *SIPAgentCfg, separator string) *SIPAgentJsonCfg { +func diffSIPAgentJsonCfg(d *SIPAgentJsonCfg, v1, v2 *SIPAgentCfg) *SIPAgentJsonCfg { if d == nil { d = new(SIPAgentJsonCfg) } @@ -153,6 +153,6 @@ func diffSIPAgentJsonCfg(d *SIPAgentJsonCfg, v1, v2 *SIPAgentCfg, separator stri if v1.RetransmissionTimer != v2.RetransmissionTimer { d.Retransmission_timer = utils.StringPointer(v2.RetransmissionTimer.String()) } - d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) + d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors) return d } diff --git a/config/sipagentcfg_test.go b/config/sipagentcfg_test.go index 488baa1a1..071f825eb 100644 --- a/config/sipagentcfg_test.go +++ b/config/sipagentcfg_test.go @@ -81,13 +81,13 @@ func TestSIPAgentCfgloadFromJsonCfgCase1(t *testing.T) { r.ComputePath() } jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSONS, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSONS); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsonCfg.sipAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.sipAgentCfg)) } cfgJSONS = nil - if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSONS, jsonCfg.generalCfg.RSRSep); err != nil { + if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSONS); err != nil { t.Error(err) } } @@ -98,7 +98,7 @@ func TestSIPAgentCfgloadFromJsonCfgCase2(t *testing.T) { } expected := "time: unknown unit \"ss\" in duration \"1ss\"" jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -127,7 +127,7 @@ func TestSIPAgentCfgloadFromJsonCfgCase4(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(sipAgent, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(sipAgent); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected.RequestProcessors[0].ID, jsonCfg.sipAgentCfg.RequestProcessors[0].ID) { t.Errorf("Expected %+v, received %+v", expected.RequestProcessors[0].ID, jsonCfg.sipAgentCfg.RequestProcessors[0].ID) @@ -142,7 +142,7 @@ func TestSIPAgentCfgloadFromJsonCfgCase5(t *testing.T) { } expected := "invalid converter terminator in rule: " jsonCfg := NewDefaultCGRConfig() - if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(sipAgent, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + if err := jsonCfg.sipAgentCfg.loadFromJSONCfg(sipAgent); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -171,7 +171,7 @@ func TestSIPAgentCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } @@ -237,7 +237,7 @@ func TestSIPAgentCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } @@ -287,7 +287,7 @@ func TestSIPAgentCfgAsMapInterface2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.sipAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } @@ -368,7 +368,7 @@ func TestDiffSIPAgentJsonCfg(t *testing.T) { Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv := diffSIPAgentJsonCfg(d, v1, v2, ";") + rcv := diffSIPAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } @@ -377,7 +377,7 @@ func TestDiffSIPAgentJsonCfg(t *testing.T) { expected = &SIPAgentJsonCfg{ Request_processors: &[]*ReqProcessorJsnCfg{}, } - rcv = diffSIPAgentJsonCfg(d, v1, v2, ";") + rcv = diffSIPAgentJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/statscfg.go b/config/statscfg.go index 2da880d3b..60f26e645 100644 --- a/config/statscfg.go +++ b/config/statscfg.go @@ -142,7 +142,7 @@ func (st *StatSCfg) loadFromJSONCfg(jsnCfg *StatServJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (st StatSCfg) AsMapInterface(string) any { +func (st StatSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: st.Opts.ProfileIDs, utils.MetaProfileIgnoreFilters: st.Opts.ProfileIgnoreFilters, diff --git a/config/statscfg_test.go b/config/statscfg_test.go index c9d7ea42d..d1feb3d0e 100644 --- a/config/statscfg_test.go +++ b/config/statscfg_test.go @@ -141,7 +141,7 @@ func TestStatSCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.statsCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.statsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } @@ -185,7 +185,7 @@ func TestStatSCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.statsCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.statsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } diff --git a/config/stordbcfg.go b/config/stordbcfg.go index 5e9d2ec6c..be36b5a0e 100644 --- a/config/stordbcfg.go +++ b/config/stordbcfg.go @@ -245,7 +245,7 @@ func (dbcfg StorDbCfg) Clone() (cln *StorDbCfg) { } // AsMapInterface returns the config as a map[string]any -func (dbcfg StorDbCfg) AsMapInterface(string) any { +func (dbcfg StorDbCfg) AsMapInterface() any { opts := map[string]any{ utils.SQLMaxOpenConnsCfg: dbcfg.Opts.SQLMaxOpenConns, utils.SQLMaxIdleConnsCfg: dbcfg.Opts.SQLMaxIdleConns, diff --git a/config/stordbcfg_test.go b/config/stordbcfg_test.go index ec0647382..c5fa5fd8b 100644 --- a/config/stordbcfg_test.go +++ b/config/stordbcfg_test.go @@ -261,7 +261,7 @@ func TestStorDbCfgAsMapInterface(t *testing.T) { if cfgCgr, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else { - rcv := cfgCgr.storDbCfg.AsMapInterface("").(map[string]any) + rcv := cfgCgr.storDbCfg.AsMapInterface().(map[string]any) if !reflect.DeepEqual(eMap[utils.ItemsCfg].(map[string]any)[utils.SessionSConnsCfg], rcv[utils.ItemsCfg].(map[string]any)[utils.SessionSConnsCfg]) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(eMap[utils.ItemsCfg].(map[string]any)[utils.SessionSConnsCfg]), diff --git a/config/suretaxcfg.go b/config/suretaxcfg.go index 5113c52bf..4978477ce 100644 --- a/config/suretaxcfg.go +++ b/config/suretaxcfg.go @@ -185,7 +185,7 @@ func (st *SureTaxCfg) loadFromJSONCfg(jsnCfg *SureTaxJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (st SureTaxCfg) AsMapInterface(separator string) any { +func (st SureTaxCfg) AsMapInterface() any { return map[string]any{ utils.URLCfg: st.URL, utils.ClientNumberCfg: st.ClientNumber, @@ -198,22 +198,22 @@ func (st SureTaxCfg) AsMapInterface(separator string) any { utils.ResponseTypeCfg: st.ResponseType, utils.RegulatoryCodeCfg: st.RegulatoryCode, - utils.ClientTrackingCfg: st.ClientTracking.GetRule(separator), - utils.CustomerNumberCfg: st.CustomerNumber.GetRule(separator), - utils.OrigNumberCfg: st.OrigNumber.GetRule(separator), - utils.TermNumberCfg: st.TermNumber.GetRule(separator), - utils.BillToNumberCfg: st.BillToNumber.GetRule(separator), - utils.ZipcodeCfg: st.Zipcode.GetRule(separator), - utils.Plus4Cfg: st.Plus4.GetRule(separator), - utils.P2PZipcodeCfg: st.P2PZipcode.GetRule(separator), - utils.P2PPlus4Cfg: st.P2PPlus4.GetRule(separator), - utils.UnitsCfg: st.Units.GetRule(separator), - utils.UnitTypeCfg: st.UnitType.GetRule(separator), - utils.TaxIncludedCfg: st.TaxIncluded.GetRule(separator), - utils.TaxSitusRuleCfg: st.TaxSitusRule.GetRule(separator), - utils.TransTypeCodeCfg: st.TransTypeCode.GetRule(separator), - utils.SalesTypeCodeCfg: st.SalesTypeCode.GetRule(separator), - utils.TaxExemptionCodeListCfg: st.TaxExemptionCodeList.GetRule(separator), + utils.ClientTrackingCfg: st.ClientTracking.GetRule(), + utils.CustomerNumberCfg: st.CustomerNumber.GetRule(), + utils.OrigNumberCfg: st.OrigNumber.GetRule(), + utils.TermNumberCfg: st.TermNumber.GetRule(), + utils.BillToNumberCfg: st.BillToNumber.GetRule(), + utils.ZipcodeCfg: st.Zipcode.GetRule(), + utils.Plus4Cfg: st.Plus4.GetRule(), + utils.P2PZipcodeCfg: st.P2PZipcode.GetRule(), + utils.P2PPlus4Cfg: st.P2PPlus4.GetRule(), + utils.UnitsCfg: st.Units.GetRule(), + utils.UnitTypeCfg: st.UnitType.GetRule(), + utils.TaxIncludedCfg: st.TaxIncluded.GetRule(), + utils.TaxSitusRuleCfg: st.TaxSitusRule.GetRule(), + utils.TransTypeCodeCfg: st.TransTypeCode.GetRule(), + utils.SalesTypeCodeCfg: st.SalesTypeCode.GetRule(), + utils.TaxExemptionCodeListCfg: st.TaxExemptionCodeList.GetRule(), } } @@ -287,7 +287,7 @@ type SureTaxJsonCfg struct { Tax_exemption_code_list *string } -func diffSureTaxJsonCfg(d *SureTaxJsonCfg, v1, v2 *SureTaxCfg, separator string) *SureTaxJsonCfg { +func diffSureTaxJsonCfg(d *SureTaxJsonCfg, v1, v2 *SureTaxCfg) *SureTaxJsonCfg { if d == nil { d = new(SureTaxJsonCfg) } @@ -321,83 +321,83 @@ func diffSureTaxJsonCfg(d *SureTaxJsonCfg, v1, v2 *SureTaxCfg, separator string) if v1.RegulatoryCode != v2.RegulatoryCode { d.Regulatory_code = utils.StringPointer(v2.RegulatoryCode) } - rs1 := v1.ClientTracking.GetRule(separator) - rs2 := v2.ClientTracking.GetRule(separator) + rs1 := v1.ClientTracking.GetRule() + rs2 := v2.ClientTracking.GetRule() if rs1 != rs2 { d.Client_tracking = utils.StringPointer(rs2) } - rs1 = v1.CustomerNumber.GetRule(separator) - rs2 = v2.CustomerNumber.GetRule(separator) + rs1 = v1.CustomerNumber.GetRule() + rs2 = v2.CustomerNumber.GetRule() if rs1 != rs2 { d.Customer_number = utils.StringPointer(rs2) } - rs1 = v1.OrigNumber.GetRule(separator) - rs2 = v2.OrigNumber.GetRule(separator) + rs1 = v1.OrigNumber.GetRule() + rs2 = v2.OrigNumber.GetRule() if rs1 != rs2 { d.Orig_number = utils.StringPointer(rs2) } - rs1 = v1.TermNumber.GetRule(separator) - rs2 = v2.TermNumber.GetRule(separator) + rs1 = v1.TermNumber.GetRule() + rs2 = v2.TermNumber.GetRule() if rs1 != rs2 { d.Term_number = utils.StringPointer(rs2) } - rs1 = v1.BillToNumber.GetRule(separator) - rs2 = v2.BillToNumber.GetRule(separator) + rs1 = v1.BillToNumber.GetRule() + rs2 = v2.BillToNumber.GetRule() if rs1 != rs2 { d.Bill_to_number = utils.StringPointer(rs2) } - rs1 = v1.Zipcode.GetRule(separator) - rs2 = v2.Zipcode.GetRule(separator) + rs1 = v1.Zipcode.GetRule() + rs2 = v2.Zipcode.GetRule() if rs1 != rs2 { d.Zipcode = utils.StringPointer(rs2) } - rs1 = v1.Plus4.GetRule(separator) - rs2 = v2.Plus4.GetRule(separator) + rs1 = v1.Plus4.GetRule() + rs2 = v2.Plus4.GetRule() if rs1 != rs2 { d.Plus4 = utils.StringPointer(rs2) } - rs1 = v1.P2PZipcode.GetRule(separator) - rs2 = v2.P2PZipcode.GetRule(separator) + rs1 = v1.P2PZipcode.GetRule() + rs2 = v2.P2PZipcode.GetRule() if rs1 != rs2 { d.P2PZipcode = utils.StringPointer(rs2) } - rs1 = v1.P2PPlus4.GetRule(separator) - rs2 = v2.P2PPlus4.GetRule(separator) + rs1 = v1.P2PPlus4.GetRule() + rs2 = v2.P2PPlus4.GetRule() if rs1 != rs2 { d.P2PPlus4 = utils.StringPointer(rs2) } - rs1 = v1.Units.GetRule(separator) - rs2 = v2.Units.GetRule(separator) + rs1 = v1.Units.GetRule() + rs2 = v2.Units.GetRule() if rs1 != rs2 { d.Units = utils.StringPointer(rs2) } - rs1 = v1.UnitType.GetRule(separator) - rs2 = v2.UnitType.GetRule(separator) + rs1 = v1.UnitType.GetRule() + rs2 = v2.UnitType.GetRule() if rs1 != rs2 { d.Unit_type = utils.StringPointer(rs2) } - rs1 = v1.TaxIncluded.GetRule(separator) - rs2 = v2.TaxIncluded.GetRule(separator) + rs1 = v1.TaxIncluded.GetRule() + rs2 = v2.TaxIncluded.GetRule() if rs1 != rs2 { d.Tax_included = utils.StringPointer(rs2) } - rs1 = v1.TaxSitusRule.GetRule(separator) - rs2 = v2.TaxSitusRule.GetRule(separator) + rs1 = v1.TaxSitusRule.GetRule() + rs2 = v2.TaxSitusRule.GetRule() if rs1 != rs2 { d.Tax_situs_rule = utils.StringPointer(rs2) } - rs1 = v1.TransTypeCode.GetRule(separator) - rs2 = v2.TransTypeCode.GetRule(separator) + rs1 = v1.TransTypeCode.GetRule() + rs2 = v2.TransTypeCode.GetRule() if rs1 != rs2 { d.Trans_type_code = utils.StringPointer(rs2) } - rs1 = v1.SalesTypeCode.GetRule(separator) - rs2 = v2.SalesTypeCode.GetRule(separator) + rs1 = v1.SalesTypeCode.GetRule() + rs2 = v2.SalesTypeCode.GetRule() if rs1 != rs2 { d.Sales_type_code = utils.StringPointer(rs2) } - rs1 = v1.TaxExemptionCodeList.GetRule(separator) - rs2 = v2.TaxExemptionCodeList.GetRule(separator) + rs1 = v1.TaxExemptionCodeList.GetRule() + rs2 = v2.TaxExemptionCodeList.GetRule() if rs1 != rs2 { d.Tax_exemption_code_list = utils.StringPointer(rs2) } diff --git a/config/suretaxcfg_test.go b/config/suretaxcfg_test.go index 09008e939..da580af4b 100644 --- a/config/suretaxcfg_test.go +++ b/config/suretaxcfg_test.go @@ -344,7 +344,7 @@ func TestSureTaxCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.sureTaxCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.sureTaxCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -484,14 +484,14 @@ func TestDiffSureTaxJson(t *testing.T) { Tax_exemption_code_list: utils.StringPointer(utils.EmptyString), } - rcv := diffSureTaxJsonCfg(d, v1, v2, ";") + rcv := diffSureTaxJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } v1 = v2 expected = &SureTaxJsonCfg{} - rcv = diffSureTaxJsonCfg(d, v1, v2, ";") + rcv = diffSureTaxJsonCfg(d, v1, v2) if !reflect.DeepEqual(rcv, expected) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv)) } diff --git a/config/thresholdscfg.go b/config/thresholdscfg.go index 247092f90..5119a8931 100644 --- a/config/thresholdscfg.go +++ b/config/thresholdscfg.go @@ -120,7 +120,7 @@ func (t *ThresholdSCfg) loadFromJSONCfg(jsnCfg *ThresholdSJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (t ThresholdSCfg) AsMapInterface(string) any { +func (t ThresholdSCfg) AsMapInterface() any { opts := map[string]any{ utils.MetaProfileIDs: t.Opts.ProfileIDs, utils.MetaProfileIgnoreFilters: t.Opts.ProfileIgnoreFilters, diff --git a/config/thresholdscfg_test.go b/config/thresholdscfg_test.go index 249734112..868046ab3 100644 --- a/config/thresholdscfg_test.go +++ b/config/thresholdscfg_test.go @@ -137,7 +137,7 @@ func TestThresholdSCfgAsMapInterfaceCase1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.thresholdSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.thresholdSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expextec %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -177,7 +177,7 @@ func TestThresholdSCfgAsMapInterfaceCase2(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.thresholdSCfg.AsMapInterface(""); !reflect.DeepEqual(rcv, eMap) { + } else if rcv := cgrCfg.thresholdSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/tlscfg.go b/config/tlscfg.go index 174147277..0853db323 100644 --- a/config/tlscfg.go +++ b/config/tlscfg.go @@ -72,7 +72,7 @@ func (tls *TLSCfg) loadFromJSONCfg(jsnCfg *TlsJsonCfg) (err error) { } // AsMapInterface returns the config as a map[string]any -func (tls TLSCfg) AsMapInterface(string) any { +func (tls TLSCfg) AsMapInterface() any { return map[string]any{ utils.ServerCerificateCfg: tls.ServerCerificate, utils.ServerKeyCfg: tls.ServerKey, diff --git a/config/tlscfg_test.go b/config/tlscfg_test.go index 2ef275b04..d7f84db8b 100644 --- a/config/tlscfg_test.go +++ b/config/tlscfg_test.go @@ -71,7 +71,7 @@ func TestTlsCfgAsMapInterface(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.tlsCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.tlsCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -99,7 +99,7 @@ func TestTlsCfgAsMapInterface1(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if rcv := cgrCfg.tlsCfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.tlsCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/tpes.go b/config/tpes.go index 3fa7df5e3..c6be05a80 100644 --- a/config/tpes.go +++ b/config/tpes.go @@ -45,7 +45,7 @@ func (tp *TpeSCfg) Load(ctx *context.Context, db ConfigDB, _ *CGRConfig) (err er return } -func (tp TpeSCfg) AsMapInterface(string) any { +func (tp TpeSCfg) AsMapInterface() any { return map[string]any{ utils.EnabledCfg: tp.Enabled, } diff --git a/config/trendscfg.go b/config/trendscfg.go index d29116ada..6454ab09d 100644 --- a/config/trendscfg.go +++ b/config/trendscfg.go @@ -78,7 +78,7 @@ func (t *TrendSCfg) loadFromJSONCfg(jsnCfg *TrendSJsonCfg) (err error) { return } -func (t *TrendSCfg) AsMapInterface(string) any { +func (t *TrendSCfg) AsMapInterface() any { mp := map[string]any{ utils.EnabledCfg: t.Enabled, utils.StoreIntervalCfg: utils.EmptyString, diff --git a/config/trendscfg_test.go b/config/trendscfg_test.go index 1c124b18b..046624c82 100644 --- a/config/trendscfg_test.go +++ b/config/trendscfg_test.go @@ -167,13 +167,13 @@ func TestTrendSCfgAsMapInterface(t *testing.T) { utils.EEsConnsCfg: getInternalJSONConns(eesConns), utils.EEsExporterIDsCfg: eesExporterIDs, } - result := trendCfg.AsMapInterface("").(map[string]any) + result := trendCfg.AsMapInterface().(map[string]any) if !reflect.DeepEqual(result, expectedMap) { t.Errorf("Expected: %+v, got: %+v", expectedMap, result) } trendCfg.StoreInterval = 0 expectedMap[utils.StoreIntervalCfg] = utils.EmptyString - result = trendCfg.AsMapInterface("").(map[string]any) + result = trendCfg.AsMapInterface().(map[string]any) if result[utils.StoreIntervalCfg] != utils.EmptyString { t.Errorf("Expected StoreInterval to be '%s', but got: %v", utils.EmptyString, result[utils.StoreIntervalCfg]) } diff --git a/data/conf/cgrates/cgrates.json b/data/conf/cgrates/cgrates.json index 169d80c96..42f2a3f94 100755 --- a/data/conf/cgrates/cgrates.json +++ b/data/conf/cgrates/cgrates.json @@ -27,7 +27,6 @@ // "locking_timeout": "0", // timeout internal locks to avoid deadlocks // "digest_separator": ",", // separator to use in replies containing data digests // "digest_equal": ":", // equal symbol used in case of digests -// "rsr_separator": ";", // separator used within RSR fields // "max_parallel_conns": 100, // the maximum number of connection used by the *parallel strategy // "decimal_max_scale": 0, // the maximum scale for decimal numbers // "decimal_min_scale": 0, // the minimum scale for decimal numbers diff --git a/engine/actionprofile.go b/engine/actionprofile.go index ac0e1e204..08bd9dc38 100644 --- a/engine/actionprofile.go +++ b/engine/actionprofile.go @@ -81,11 +81,11 @@ type APDiktat struct { } // RSRValues returns the Value as RSRParsers -func (dk *APDiktat) RSRValues(sep string) (_ config.RSRParsers, err error) { +func (dk *APDiktat) RSRValues() (config.RSRParsers, error) { if dk.valRSR == nil { - dk.valRSR, err = config.NewRSRParsers(dk.Value, sep) + return config.NewRSRParsers(dk.Value, utils.RSRSep) } - return dk.valRSR, err + return dk.valRSR, nil } // ActionProfileWithAPIOpts is used in API calls @@ -94,7 +94,7 @@ type ActionProfileWithAPIOpts struct { APIOpts map[string]any } -func (aP *ActionProfile) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (aP *ActionProfile) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { case 0: return utils.ErrWrongPath diff --git a/engine/actionprofile_test.go b/engine/actionprofile_test.go index edc2978fc..a265d5f1a 100644 --- a/engine/actionprofile_test.go +++ b/engine/actionprofile_test.go @@ -111,7 +111,7 @@ func TestActionAPDiktatRSRValues(t *testing.T) { }, }, } - rsrPars, err := apdDiktat.RSRValues(";") + rsrPars, err := apdDiktat.RSRValues() if err != nil { t.Error(err) } @@ -131,7 +131,7 @@ func TestActionAPDiktatRSRValues(t *testing.T) { func TestActionAPDiktatRSRValuesNil(t *testing.T) { apdDiktat := APDiktat{} - rsrPars, err := apdDiktat.RSRValues(";") + rsrPars, err := apdDiktat.RSRValues() if err != nil { t.Error(err) } @@ -147,7 +147,7 @@ func TestActionAPDiktatRSRValuesError(t *testing.T) { Value: "val`val2val3", } expErr := "Closed unspilit syntax" - _, err := apdDiktat.RSRValues(";") + _, err := apdDiktat.RSRValues() if err == nil || err.Error() != expErr { t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expErr, err) } @@ -155,7 +155,7 @@ func TestActionAPDiktatRSRValuesError(t *testing.T) { } func TestAPDiktatRSRValues(t *testing.T) { dk := &APDiktat{Value: "1001"} - if rply, err := dk.RSRValues(utils.InfieldSep); err != nil { + if rply, err := dk.RSRValues(); err != nil { return } else if exp := config.NewRSRParsersMustCompile("1001", utils.InfieldSep); !reflect.DeepEqual(exp, rply) { t.Errorf("Expected: %+v ,received: %+v", exp, rply) @@ -200,85 +200,85 @@ func TestActionProfileSet(t *testing.T) { }}, }}, } - if err := ap.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Schedule}, utils.MetaNow, false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Schedule}, utils.MetaNow, false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Targets + "[" + utils.MetaAccounts + "]"}, "1001;1002", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Targets + "[" + utils.MetaAccounts + "]"}, "1001;1002", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Targets, utils.MetaThresholds}, "TH1;TH2", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Targets, utils.MetaThresholds}, "TH1;TH2", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions + "[acc1]", utils.ID}, "acc1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions + "[acc1]", utils.ID}, "acc1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", "Wrong", "path", "2"}, "acc1", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{utils.Actions, "acc1", "Wrong", "path", "2"}, "acc1", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", "Wrong", "path"}, "acc1", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{utils.Actions, "acc1", "Wrong", "path"}, "acc1", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", "Wrong"}, "acc1", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := ap.Set([]string{utils.Actions, "acc1", "Wrong"}, "acc1", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts}, "opt0:val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts}, "opt0:val1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts + "[opt1]"}, "val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts + "[opt1]"}, "val1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts, "opt2"}, "val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts, "opt2"}, "val1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts, "opt3", "opt4"}, "val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Opts, "opt3", "opt4"}, "val1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Type}, "val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Type}, "val1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.FilterIDs}, "fltr1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.TTL}, "10", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.TTL}, "10", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Diktats, utils.Path}, "path", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Diktats, utils.Path}, "path", false); err != nil { t.Error(err) } - if err := ap.Set([]string{utils.Actions, "acc1", utils.Diktats, utils.Value}, "val1", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Actions, "acc1", utils.Diktats, utils.Value}, "val1", false); err != nil { t.Error(err) } if err := ap.Actions[0].Set(nil, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := ap.Set([]string{utils.Blockers}, ";true", false, utils.EmptyString); err != nil { + if err := ap.Set([]string{utils.Blockers}, ";true", false); err != nil { t.Error(err) } if !reflect.DeepEqual(exp, ap) { diff --git a/engine/attributes.go b/engine/attributes.go index 14d67a04c..23ad560e3 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -191,7 +191,7 @@ func (alS *AttributeS) processEvent(ctx *context.Context, tnt string, args *util } } var out any - if out, err = ParseAttribute(dynDP, utils.FirstNonEmpty(attribute.Type, utils.MetaVariable), utils.DynamicDataPrefix+attribute.Path, attribute.Value, alS.cfg.GeneralCfg().RoundingDecimals, alS.cfg.GeneralCfg().DefaultTimezone, time.RFC3339, alS.cfg.GeneralCfg().RSRSep); err != nil { + if out, err = ParseAttribute(dynDP, utils.FirstNonEmpty(attribute.Type, utils.MetaVariable), utils.DynamicDataPrefix+attribute.Path, attribute.Value, alS.cfg.GeneralCfg().RoundingDecimals, alS.cfg.GeneralCfg().DefaultTimezone, time.RFC3339); err != nil { rply = nil return } @@ -364,7 +364,7 @@ func (alS *AttributeS) V1ProcessEvent(ctx *context.Context, args *utils.CGREvent return } -func ParseAttribute(dp utils.DataProvider, attrType, path string, value config.RSRParsers, roundingDec int, timeZone, layout, rsrSep string) ( +func ParseAttribute(dp utils.DataProvider, attrType, path string, value config.RSRParsers, roundingDec int, timeZone, layout string) ( out any, err error) { switch attrType { case utils.MetaNone: @@ -468,7 +468,7 @@ func ParseAttribute(dp utils.DataProvider, attrType, path string, value config.R out = dtFld.Format(layout) case utils.MetaPrefix: var pathRsr config.RSRParsers - pathRsr, err = config.NewRSRParsers(path, rsrSep) + pathRsr, err = config.NewRSRParsers(path, utils.RSRSep) if err != nil { return } @@ -483,7 +483,7 @@ func ParseAttribute(dp utils.DataProvider, attrType, path string, value config.R out = val + pathVal case utils.MetaSuffix: var pathRsr config.RSRParsers - pathRsr, err = config.NewRSRParsers(path, rsrSep) + pathRsr, err = config.NewRSRParsers(path, utils.RSRSep) if err != nil { return } diff --git a/engine/attributes_test.go b/engine/attributes_test.go index bce4344d6..610678f7e 100644 --- a/engine/attributes_test.go +++ b/engine/attributes_test.go @@ -39,7 +39,7 @@ func TestParseAtributeUsageDiffVal1(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -54,7 +54,7 @@ func TestParseAtributeUsageDiffVal2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.usage1;~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -68,7 +68,7 @@ func TestParseAtributeUsageDiffTimeVal1(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.usage1;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Unsupported time format" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -83,7 +83,7 @@ func TestParseAtributeUsageDiffTimeVal2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.usage1;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Unsupported time format" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -97,7 +97,7 @@ func TestParseAtributeSum(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaSum, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.valid", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -110,7 +110,7 @@ func TestParseAtributeDifference(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.valid", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -123,7 +123,7 @@ func TestParseAtributeMultiply(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaMultiply, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.valid", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -136,7 +136,7 @@ func TestParseAtributeDivide(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaDivide, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.valid", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -150,7 +150,7 @@ func TestParseAtributeExponentVal1(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaValueExponent, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong;~*req.exponent", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -164,7 +164,7 @@ func TestParseAtributeExponentVal2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaValueExponent, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.number;~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -178,7 +178,7 @@ func TestParseAtributeExponentWrongNumber(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaValueExponent, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.number;~*req.exponent", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "invalid value to *valueExponent" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -193,7 +193,7 @@ func TestParseAtributeExponentWrongExponent(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaValueExponent, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.number;~*req.exponent", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := `strconv.Atoi: parsing "NaN": invalid syntax` if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -207,7 +207,7 @@ func TestParseAtributeUnixTimestampWrongField(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUnixTimestamp, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -220,7 +220,7 @@ func TestParseAtributeUnixTimestampWrongVal(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUnixTimestamp, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.unix_timestamp", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Unsupported time format" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -234,7 +234,7 @@ func TestParseAtributePrefixPath(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaPrefix, "```", config.NewRSRParsersMustCompile("~*req.prefix", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Closed unspilit syntax" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -248,7 +248,7 @@ func TestParseAtributePrefixField(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaPrefix, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -261,7 +261,7 @@ func TestParseAtributeSuffixPath(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaSuffix, "```", config.NewRSRParsersMustCompile("~*req.suffix", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Closed unspilit syntax" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -275,7 +275,7 @@ func TestParseAtributeSuffixField(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaSuffix, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -290,7 +290,7 @@ func TestParseAtributeCCUsageLessThanTwo(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := `invalid arguments <[{"Rules":"~*req.cc1"},{"Rules":"~*req.cc2"}]> to *ccUsage` if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -306,7 +306,7 @@ func TestParseAtributeCCUsageField1(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.wrong;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -321,7 +321,7 @@ func TestParseAtributeCCUsageVal1(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := `invalid requestNumber to *ccUsage` if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -337,7 +337,7 @@ func TestParseAtributeCCUsageField2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.wrong;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -352,7 +352,7 @@ func TestParseAtributeCCUsageVal2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := `invalid usedCCTime to *ccUsage` if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -368,7 +368,7 @@ func TestParseAtributeCCUsageField3(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.wrong", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -383,7 +383,7 @@ func TestParseAtributeCCUsageVal3(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := `invalid debitInterval to *ccUsage` if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -399,7 +399,7 @@ func TestParseAtributeCCUsageNoErr(t *testing.T) { }, } out, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err != nil { t.Error(err) } @@ -442,7 +442,7 @@ func TestAttributeProfileForEventWeightFromDynamicsErr(t *testing.T) { t.Fatal(err) } - value := config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep) + value := config.NewRSRParsersMustCompile("abcd123", utils.RSRSep) attrPrf := &AttributeProfile{ Tenant: "cgrates.org", @@ -506,7 +506,7 @@ func TestAttributeProcessEventBlockerFromDynamicsErr(t *testing.T) { filterS := NewFilterS(cfg, nil, dm) attrS := NewAttributeService(dm, filterS, cfg) - value := config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep) + value := config.NewRSRParsersMustCompile("abcd123", utils.RSRSep) attrPrf := &AttributeProfile{ Tenant: "cgrates.org", @@ -587,7 +587,7 @@ func TestAttributeSProcessEventPassErr(t *testing.T) { FilterIDs: []string{"*apiban:~*req.<~*req.IP>{*}:*all"}, Path: "*req.Password", Type: utils.MetaPassword, - Value: config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("abcd123", utils.RSRSep), }, }, Weights: utils.DynamicWeights{ @@ -654,7 +654,7 @@ func TestAttributeSProcessAttrBlockerFromDynamicsErr(t *testing.T) { }}, Path: "*req.Password", Type: utils.MetaPassword, - Value: config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("abcd123", utils.RSRSep), }, }, Weights: utils.DynamicWeights{ @@ -712,7 +712,7 @@ func TestAttributeSProcessSubstituteRmvBlockerTrue(t *testing.T) { { Path: utils.MetaRemove, Type: utils.MetaVariable, - Value: config.NewRSRParsersMustCompile(utils.MetaRemove, config.CgrConfig().GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile(utils.MetaRemove, utils.RSRSep), }, { Blockers: utils.DynamicBlockers{{ @@ -720,7 +720,7 @@ func TestAttributeSProcessSubstituteRmvBlockerTrue(t *testing.T) { }}, Path: "*req.Password", Type: utils.MetaPassword, - Value: config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("abcd123", utils.RSRSep), }, }, Weights: utils.DynamicWeights{ @@ -881,7 +881,7 @@ func TestParseAtributeUsageDiffDetectLayoutErr2(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.UnixTimeStamp;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) errExp := "Unsupported time format" if err == nil || err.Error() != errExp { t.Errorf("Expected %v\n but received %v", errExp, err) @@ -892,7 +892,7 @@ func TestParseAtributeMetaPrefixParseDPErr(t *testing.T) { dp := utils.MapStorage{} _, err := ParseAttribute(dp, utils.MetaPrefix, "constant;`>;q=0.7;expires=3600`;~*req.Account", config.NewRSRParsersMustCompile("~*req.UnixTimeStamp;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -902,7 +902,7 @@ func TestParseAtributeMetaSuffixParseDPErr(t *testing.T) { dp := utils.MapStorage{} _, err := ParseAttribute(dp, utils.MetaSuffix, "constant;`>;q=0.7;expires=3600`;~*req.Account", config.NewRSRParsersMustCompile("~*req.UnixTimeStamp;~*req.usage2", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) } @@ -917,7 +917,7 @@ func TestParseAtributeCCUsageNegativeReqNr(t *testing.T) { }, } out, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cc1;~*req.cc2;~*req.cc3", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err != nil { t.Error(err) } @@ -965,7 +965,7 @@ func TestAttributeFromHTTP(t *testing.T) { attr := attrPrf.Attributes[0] if out, err := ParseAttribute(dp, attr.Type, attr.Path, attr.Value, - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) diff --git a/engine/datamanager.go b/engine/datamanager.go index bbe0b50d1..cf7696244 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -1875,11 +1875,11 @@ func (dm *DataManager) SetAttributeProfile(ctx *context.Context, ap *AttributePr } for _, attribute := range ap.Attributes { if attribute.Type == utils.MetaPassword { - password := attribute.Value.GetRule(config.CgrConfig().GeneralCfg().RSRSep) + password := attribute.Value.GetRule() if password, err = utils.ComputeHash(password); err != nil { return } - if attribute.Value, err = config.NewRSRParsers(password, config.CgrConfig().GeneralCfg().RSRSep); err != nil { + if attribute.Value, err = config.NewRSRParsers(password, utils.RSRSep); err != nil { return } attribute.Type = utils.MetaConstant diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 2191d9ce3..0d1a1fd43 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -7546,7 +7546,7 @@ func TestDMSetAttributeProfileComputeHashErr(t *testing.T) { } cM := NewConnManager(cfg) dm := NewDataManager(data, cfg.CacheCfg(), cM) - value := config.NewRSRParsersMustCompile("31 0a 0a 32 0a 0a 33 0a 0a 34 0a 0a 35 0a 0a 36 0a 0a 37 0a 0a 38 0a 0a 39 0a 0a 31 30 0a 0a 31", config.CgrConfig().GeneralCfg().RSRSep) + value := config.NewRSRParsersMustCompile("31 0a 0a 32 0a 0a 33 0a 0a 34 0a 0a 35 0a 0a 36 0a 0a 37 0a 0a 38 0a 0a 39 0a 0a 31 30 0a 0a 31", utils.RSRSep) attrPrfl := &AttributeProfile{ Tenant: "cgrates.org", ID: "ATTR_ID", diff --git a/engine/dispatcherprfl.go b/engine/dispatcherprfl.go index 23da2c5d3..c3c6d275a 100644 --- a/engine/dispatcherprfl.go +++ b/engine/dispatcherprfl.go @@ -161,7 +161,7 @@ func (dHPrflIDs DispatcherHostIDs) Clone() (cln DispatcherHostIDs) { return } -func (dH *DispatcherHost) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (dH *DispatcherHost) Set(path []string, val any, newBranch bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/dispatcherprfl_test.go b/engine/dispatcherprfl_test.go index e49772499..55cb98e31 100644 --- a/engine/dispatcherprfl_test.go +++ b/engine/dispatcherprfl_test.go @@ -245,54 +245,54 @@ func TestDispatcherHostSet(t *testing.T) { CaCertificate: "ca", }, } - if err := dp.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Address}, "127.0.0.1", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Address}, "127.0.0.1", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Transport}, utils.MetaJSON, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Transport}, utils.MetaJSON, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ConnectAttempts}, 1, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ConnectAttempts}, 1, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Reconnects}, 1, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Reconnects}, 1, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.MaxReconnectInterval}, 1, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.MaxReconnectInterval}, 1, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ConnectTimeout}, 1, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ConnectTimeout}, 1, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ReplyTimeout}, 1, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ReplyTimeout}, 1, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.TLS}, true, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.TLS}, true, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ClientKey}, "key", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ClientKey}, "key", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ClientCertificate}, "ce", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ClientCertificate}, "ce", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.CaCertificate}, "ca", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.CaCertificate}, "ca", false); err != nil { t.Error(err) } diff --git a/engine/exportrequest.go b/engine/exportrequest.go index 652bd9ef2..015d40826 100644 --- a/engine/exportrequest.go +++ b/engine/exportrequest.go @@ -177,7 +177,7 @@ func (eeR *ExportRequest) ParseField( case utils.MetaGroup: tmpType = utils.MetaVariable } - out, err = ParseAttribute(eeR, tmpType, cfgFld.Path, cfgFld.Value, config.CgrConfig().GeneralCfg().RoundingDecimals, utils.FirstNonEmpty(cfgFld.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone), cfgFld.Layout, config.CgrConfig().GeneralCfg().RSRSep) + out, err = ParseAttribute(eeR, tmpType, cfgFld.Path, cfgFld.Value, config.CgrConfig().GeneralCfg().RoundingDecimals, utils.FirstNonEmpty(cfgFld.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone), cfgFld.Layout) if err != nil && !strings.HasPrefix(err.Error(), "Could not find") { diff --git a/engine/filters.go b/engine/filters.go index f1c5f5194..8ac11243e 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -816,7 +816,7 @@ func (fltr *FilterRule) passHttp(dDP utils.DataProvider) (bool, error) { } -func (fltr *Filter) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (fltr *Filter) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { default: return utils.ErrWrongPath diff --git a/engine/filters_test.go b/engine/filters_test.go index c7e1377a1..c4dc2e23c 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -1437,42 +1437,42 @@ func TestFilterSet(t *testing.T) { Values: []string{"1001", "1002"}, }}, } - if err := fltr.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := fltr.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := fltr.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := fltr.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := fltr.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := fltr.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := fltr.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Type}, utils.MetaString, false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Type}, utils.MetaString, false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Element}, "~*req.Account", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Element}, "~*req.Account", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Values}, "1001", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Values}, "1001", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Type}, utils.MetaString, true, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Type}, utils.MetaString, true); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Element}, "~*req.Account", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Element}, "~*req.Account", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, utils.Values}, "1002", false, utils.EmptyString); err != nil { + if err := fltr.Set([]string{utils.Rules, utils.Values}, "1002", false); err != nil { t.Error(err) } - if err := fltr.Set([]string{utils.Rules, "Wrong"}, "1002", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := fltr.Set([]string{utils.Rules, "Wrong"}, "1002", false); err != utils.ErrWrongPath { t.Error(err) } diff --git a/engine/libattributes.go b/engine/libattributes.go index 7e2f22ad7..732aee986 100644 --- a/engine/libattributes.go +++ b/engine/libattributes.go @@ -127,7 +127,7 @@ func NewAPIAttributeProfile(attr *AttributeProfile) (ext *APIAttributeProfile) { Blockers: at.Blockers, Path: at.Path, Type: at.Type, - Value: at.Value.GetRule(utils.InfieldSep), + Value: at.Value.GetRule(), } } return @@ -199,7 +199,7 @@ func externalAttributeAPI(httpType string, dDP utils.DataProvider) (string, erro return externalAPI(urlS, bytes.NewReader([]byte(dDP.String()))) } -func (ap *AttributeProfile) Set(path []string, val any, newBranch bool, rsrSep string) (err error) { +func (ap *AttributeProfile) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { case 1: switch path[0] { @@ -243,7 +243,7 @@ func (ap *AttributeProfile) Set(path []string, val any, newBranch bool, rsrSep s case utils.Type: ap.Attributes[len(ap.Attributes)-1].Type = utils.IfaceAsString(val) case utils.Value: - ap.Attributes[len(ap.Attributes)-1].Value, err = config.NewRSRParsers(utils.IfaceAsString(val), rsrSep) + ap.Attributes[len(ap.Attributes)-1].Value, err = config.NewRSRParsers(utils.IfaceAsString(val), utils.RSRSep) default: return utils.ErrWrongPath } @@ -359,6 +359,6 @@ func (at *Attribute) FieldAsInterface(fldPath []string) (_ any, err error) { case utils.Type: return at.Type, nil case utils.Value: - return at.Value.GetRule(config.CgrConfig().GeneralCfg().RSRSep), nil + return at.Value.GetRule(), nil } } diff --git a/engine/libattributes_test.go b/engine/libattributes_test.go index 7302d853d..1b465e99e 100644 --- a/engine/libattributes_test.go +++ b/engine/libattributes_test.go @@ -266,47 +266,47 @@ func TestAttributeProfileSet(t *testing.T) { exp.Weights[0] = &utils.DynamicWeight{ Weight: 10, } - if err := dp.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := dp.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Blockers}, ";true", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Blockers}, ";true", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, utils.Path}, "*req.Account", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Attributes, utils.Path}, "*req.Account", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, utils.Type}, utils.MetaConstant, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Attributes, utils.Type}, utils.MetaConstant, false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, utils.Value}, "10", false, utils.InfieldSep); err != nil { + if err := dp.Set([]string{utils.Attributes, utils.Value}, "10", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, utils.FilterIDs}, "fltr1", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Attributes, utils.FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, utils.Blockers}, ";true", false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.Attributes, utils.Blockers}, ";true", false); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Attributes, "Wrong"}, true, false, utils.EmptyString); err != utils.ErrWrongPath { + if err := dp.Set([]string{utils.Attributes, "Wrong"}, true, false); err != utils.ErrWrongPath { t.Error(err) } diff --git a/engine/libchargers.go b/engine/libchargers.go index 0013af7bc..b5ea39f63 100644 --- a/engine/libchargers.go +++ b/engine/libchargers.go @@ -54,7 +54,7 @@ func (cps ChargerProfiles) Sort() { sort.Slice(cps, func(i, j int) bool { return cps[i].weight > cps[j].weight }) } -func (cp *ChargerProfile) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (cp *ChargerProfile) Set(path []string, val any, newBranch bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/libchargers_test.go b/engine/libchargers_test.go index 3c9d2aa51..f165e9d94 100644 --- a/engine/libchargers_test.go +++ b/engine/libchargers_test.go @@ -39,32 +39,32 @@ func TestChargerProfileSet(t *testing.T) { RunID: utils.MetaDefault, AttributeIDs: []string{"attr1"}, } - if err := cp.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.RunID}, utils.MetaDefault, false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.RunID}, utils.MetaDefault, false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.AttributeIDs}, "attr1", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.AttributeIDs}, "attr1", false); err != nil { t.Error(err) } @@ -208,7 +208,7 @@ func TestChargerProfileSetBlockers(t *testing.T) { }, } - err := cp.Set([]string{utils.Blockers}, ";true", false, "") + err := cp.Set([]string{utils.Blockers}, ";true", false) if err != nil { t.Errorf("unexpected error: %v", err) } else if !reflect.DeepEqual(exp, cp) { diff --git a/engine/libindex_test.go b/engine/libindex_test.go index 29a04f095..e34186994 100644 --- a/engine/libindex_test.go +++ b/engine/libindex_test.go @@ -191,7 +191,7 @@ func TestLibIndexSetUpdateRemAttributeProfile(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } @@ -222,7 +222,7 @@ func TestLibIndexSetUpdateRemAttributeProfile(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } @@ -248,7 +248,7 @@ func TestLibIndexSetUpdateRemAttributeProfile(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } @@ -279,7 +279,7 @@ func TestLibIndexSetUpdateRemAttributeProfile(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } @@ -313,7 +313,7 @@ func TestLibIndexSetUpdateRemAttributeProfile(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } @@ -378,7 +378,7 @@ func TestLibIndexModifyAttrPrfFilter(t *testing.T) { { Type: utils.MetaConstant, Path: "~*req.Account", - Value: config.NewRSRParsersMustCompile("1002", cfg.GeneralCfg().RSRSep), + Value: config.NewRSRParsersMustCompile("1002", utils.RSRSep), }, }, } diff --git a/engine/librankings.go b/engine/librankings.go index 4ef55439d..669c63700 100644 --- a/engine/librankings.go +++ b/engine/librankings.go @@ -305,7 +305,7 @@ type RankingSummary struct { SortedStatIDs []string } -func (tp *RankingProfile) Set(path []string, val any, _ bool, _ string) (err error) { +func (tp *RankingProfile) Set(path []string, val any, _ bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/libstats.go b/engine/libstats.go index 503c64dbb..98505518d 100644 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -588,7 +588,7 @@ func (ssq *StatQueueWithAPIOpts) UnmarshalJSON(data []byte) (err error) { return } -func (sqp *StatQueueProfile) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (sqp *StatQueueProfile) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { default: return utils.ErrWrongPath diff --git a/engine/libstats_test.go b/engine/libstats_test.go index f5be5b8cc..8fa63d755 100644 --- a/engine/libstats_test.go +++ b/engine/libstats_test.go @@ -1404,58 +1404,58 @@ func TestStatQueueProfileSet(t *testing.T) { FilterIDs: []string{"fltr1"}, }}, } - if err := sq.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := sq.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := sq.Set([]string{""}, "", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{""}, "", false); err != nil { t.Error(err) } - if err := sq.Set([]string{"NotAField"}, ";", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := sq.Set([]string{"NotAField"}, ";", false); err != utils.ErrWrongPath { t.Error(err) } - if err := sq.Set([]string{"NotAField", "1"}, ";", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := sq.Set([]string{"NotAField", "1"}, ";", false); err != utils.ErrWrongPath { t.Error(err) } - if err := sq.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.QueueLength}, 10, false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.QueueLength}, 10, false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.TTL}, 10, false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.TTL}, 10, false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.MinItems}, 10, false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.MinItems}, 10, false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Stored}, true, false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Stored}, true, false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Blockers}, ";true", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Blockers}, ";true", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.ThresholdIDs}, "TH1", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.ThresholdIDs}, "TH1", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Metrics, utils.MetricID}, "*tcd;*acd", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Metrics, utils.MetricID}, "*tcd;*acd", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Metrics, utils.FilterIDs}, "fltr1", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Metrics, utils.FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := sq.Set([]string{utils.Metrics, "wrong"}, "fltr1", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := sq.Set([]string{utils.Metrics, "wrong"}, "fltr1", false); err != utils.ErrWrongPath { t.Error(err) } if !reflect.DeepEqual(exp, sq) { @@ -1702,7 +1702,6 @@ func TestStatQueueProfile_Set(t *testing.T) { path []string val any newBranch bool - in3 string } tests := []struct { name string @@ -1728,7 +1727,7 @@ func TestStatQueueProfile_Set(t *testing.T) { ThresholdIDs: tt.fields.ThresholdIDs, lkID: tt.fields.lkID, } - if err := sqp.Set(tt.args.path, tt.args.val, tt.args.newBranch, tt.args.in3); err != nil != tt.wantErr { + if err := sqp.Set(tt.args.path, tt.args.val, tt.args.newBranch); err != nil != tt.wantErr { t.Errorf("StatQueueProfile.Set() error = %v, wantErr %v", err, tt.wantErr) } }) @@ -1824,7 +1823,7 @@ func TestStatQueueProfileSetBlockersErr(t *testing.T) { sq := StatQueueProfile{} expErr := "invalid DynamicBlocker format for string " - if err := sq.Set([]string{utils.Metrics, utils.Blockers}, "incorrect input", false, utils.EmptyString); err == nil || err.Error() != expErr { + if err := sq.Set([]string{utils.Metrics, utils.Blockers}, "incorrect input", false); err == nil || err.Error() != expErr { t.Errorf("Expected error <%v>, Received error <%v>", expErr, err) } @@ -1851,7 +1850,7 @@ func TestStatQueueProfileSetBlockersOK(t *testing.T) { }, } - if err := sq.Set([]string{utils.Metrics, utils.Blockers}, "*string:~*opts.*cost:0;false;*suffix:~*req.Destination:+4432&eq:~*opts.*usage:10s;false;*notstring:~*req.RequestType:*prepaid;true;;false", false, utils.EmptyString); err != nil { + if err := sq.Set([]string{utils.Metrics, utils.Blockers}, "*string:~*opts.*cost:0;false;*suffix:~*req.Destination:+4432&eq:~*opts.*usage:10s;false;*notstring:~*req.RequestType:*prepaid;true;;false", false); err != nil { t.Error(err) } diff --git a/engine/libtrends.go b/engine/libtrends.go index ffbea50b7..127eecd0a 100644 --- a/engine/libtrends.go +++ b/engine/libtrends.go @@ -309,7 +309,7 @@ type TrendSummary struct { Metrics map[string]*MetricWithTrend } -func (tp *TrendProfile) Set(path []string, val any, _ bool, _ string) (err error) { +func (tp *TrendProfile) Set(path []string, val any, _ bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 40d69c197..8e05dc47e 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1503,7 +1503,7 @@ func APItoAttributeProfile(tpAttr *utils.TPAttributeProfile, timezone string) (a err = fmt.Errorf("empty path in AttributeProfile <%s>", attrPrf.TenantID()) return } - sbstPrsr, err := config.NewRSRParsers(reqAttr.Value, config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers(reqAttr.Value, utils.RSRSep) if err != nil { return nil, err } @@ -1538,7 +1538,7 @@ func AttributeProfileToAPI(attrPrf *AttributeProfile) (tpAttr *utils.TPAttribute Blockers: attr.Blockers.String(utils.InfieldSep, utils.ANDSep), Path: attr.Path, Type: attr.Type, - Value: attr.Value.GetRule(utils.InfieldSep), + Value: attr.Value.GetRule(), } } return diff --git a/engine/resources.go b/engine/resources.go index 24175648f..4d4d15022 100644 --- a/engine/resources.go +++ b/engine/resources.go @@ -1023,7 +1023,7 @@ func (rS *ResourceS) V1GetResourceWithConfig(ctx *context.Context, arg *utils.Te return } -func (rp *ResourceProfile) Set(path []string, val any, _ bool, _ string) (err error) { +func (rp *ResourceProfile) Set(path []string, val any, _ bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/routes.go b/engine/routes.go index 77824dd17..41974c1d2 100644 --- a/engine/routes.go +++ b/engine/routes.go @@ -485,7 +485,7 @@ func (rpS *RouteS) V1GetRoutesList(ctx *context.Context, args *utils.CGREvent, r return } -func (rp *RouteProfile) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (rp *RouteProfile) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { default: return utils.ErrWrongPath diff --git a/engine/routes_test.go b/engine/routes_test.go index 0d34eb042..98692a227 100644 --- a/engine/routes_test.go +++ b/engine/routes_test.go @@ -875,73 +875,73 @@ func TestRouteProfileSet(t *testing.T) { RouteParameters: "params", }}, } - if err := rp.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := rp.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{"", ""}, "", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{"", ""}, "", false); err != nil { t.Error(err) } - if err := rp.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := rp.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{"NotAField", "1"}, ":", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := rp.Set([]string{"NotAField", "1"}, ":", false); err != utils.ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Weights}, ";0", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Weights}, ";0", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Blockers}, ";false", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Blockers}, ";false", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Sorting}, utils.MetaQOS, false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Sorting}, utils.MetaQOS, false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.SortingParameters}, "param", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.SortingParameters}, "param", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.ID}, "RT1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.ID}, "RT1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.FilterIDs}, "fltr1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.AccountIDs}, "acc1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.AccountIDs}, "acc1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.RateProfileIDs}, "rp1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.RateProfileIDs}, "rp1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.ResourceIDs}, "res1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.ResourceIDs}, "res1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.StatIDs}, "stat1", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.StatIDs}, "stat1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.Weights}, ";0", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.Weights}, ";0", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.Blockers}, ";true", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.Blockers}, ";true", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.Routes, utils.RouteParameters}, "params", false, utils.EmptyString); err != nil { + if err := rp.Set([]string{utils.Routes, utils.RouteParameters}, "params", false); err != nil { t.Error(err) } - if err := rp.Set([]string{utils.SortingParameters, "wrong"}, "param", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := rp.Set([]string{utils.SortingParameters, "wrong"}, "param", false); err != utils.ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{utils.Routes, "wrong"}, "param", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := rp.Set([]string{utils.Routes, "wrong"}, "param", false); err != utils.ErrWrongPath { t.Error(err) } diff --git a/engine/thresholds.go b/engine/thresholds.go index 6cf989d53..d958a2abf 100644 --- a/engine/thresholds.go +++ b/engine/thresholds.go @@ -600,7 +600,7 @@ func (tS *ThresholdS) V1ResetThreshold(ctx *context.Context, tntID *utils.Tenant return } -func (tp *ThresholdProfile) Set(path []string, val any, _ bool, _ string) (err error) { +func (tp *ThresholdProfile) Set(path []string, val any, _ bool) (err error) { if len(path) != 1 { return utils.ErrWrongPath } diff --git a/engine/thresholds_test.go b/engine/thresholds_test.go index fe10bf1cc..6ee1736cc 100644 --- a/engine/thresholds_test.go +++ b/engine/thresholds_test.go @@ -3129,45 +3129,45 @@ func TestThresholdProfileSet(t *testing.T) { Async: true, ActionProfileIDs: []string{"acc1"}, } - if err := th.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := th.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := th.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := th.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := th.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := th.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := th.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.MaxHits}, 10, false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.MaxHits}, 10, false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.MinHits}, 10, false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.MinHits}, 10, false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.MinSleep}, 10, false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.MinSleep}, 10, false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.Blocker}, true, false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.Blocker}, true, false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.Async}, true, false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.Async}, true, false); err != nil { t.Error(err) } - if err := th.Set([]string{utils.ActionProfileIDs}, "acc1", false, utils.EmptyString); err != nil { + if err := th.Set([]string{utils.ActionProfileIDs}, "acc1", false); err != nil { t.Error(err) } if !reflect.DeepEqual(exp, th) { diff --git a/engine/z_attributes_test.go b/engine/z_attributes_test.go index 059f195fc..3ed9f24c2 100644 --- a/engine/z_attributes_test.go +++ b/engine/z_attributes_test.go @@ -4256,7 +4256,7 @@ func TestAttributesParseAttributeSIPCID(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) @@ -4270,7 +4270,7 @@ func TestAttributesParseAttributeSIPCID(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) @@ -4286,7 +4286,7 @@ func TestAttributesParseAttributeSIPCID(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.extra;~*req.from", - utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) @@ -4301,7 +4301,7 @@ func TestAttributesParseAttributeSIPCID(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.extra;~*req.to;~*req.from", - utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) @@ -4313,7 +4313,7 @@ func TestAttributesParseAttributeSIPCID(t *testing.T) { }, } if _, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.extra;~*req.to;~*req.from", utils. - InfieldSep), 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != utils.ErrNotFound { + InfieldSep), 0, utils.EmptyString, utils.EmptyString); err != utils.ErrNotFound { t.Errorf("Expected <%+v>, received <%+v>", utils.ErrNotFound, err) } } @@ -4329,7 +4329,7 @@ func TestAttributesParseAttributeSIPCIDWrongPathErr(t *testing.T) { } value := config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from;~*opts.WrongPath", utils.InfieldSep) if _, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, value, - 0, time.UTC.String(), utils.EmptyString, utils.InfieldSep); err == nil || + 0, time.UTC.String(), utils.EmptyString); err == nil || err.Error() != utils.ErrWrongPath.Error() { t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrWrongPath, err) } @@ -4344,7 +4344,7 @@ func TestAttributesParseAttributeSIPCIDNotFoundErr(t *testing.T) { } value := config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep) if _, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, value, - 0, time.UTC.String(), utils.EmptyString, utils.InfieldSep); err == nil || + 0, time.UTC.String(), utils.EmptyString); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrNotFound, err) } @@ -4360,7 +4360,7 @@ func TestAttributesParseAttributeSIPCIDInvalidArguments(t *testing.T) { value := config.RSRParsers{} experr := `invalid number of arguments <[]> to *sipcid` if _, err := ParseAttribute(dp, utils.MetaSIPCID, utils.EmptyString, value, - 0, time.UTC.String(), utils.EmptyString, utils.InfieldSep); err == nil || + 0, time.UTC.String(), utils.EmptyString); err == nil || err.Error() != experr { t.Errorf("expected: <%+v>, \nreceived: <%+v>", experr, err) } @@ -5176,7 +5176,7 @@ func TestAttributesParseAttributeMetaNone(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaNone, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if out != nil { t.Errorf("Expected %+v, Received %+v", nil, out) @@ -5191,7 +5191,7 @@ func TestAttributesParseAttributeMetaUsageDifferenceBadValError(t *testing.T) { "from": "1002", }, } - _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("", utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + _, err := ParseAttribute(dp, utils.MetaUsageDifference, utils.EmptyString, config.NewRSRParsersMustCompile("", utils.InfieldSep), 0, utils.EmptyString, utils.EmptyString) if err == nil || err.Error() != "invalid arguments to *usageDifference" { t.Fatal(err) @@ -5207,7 +5207,7 @@ func TestAttributesParseAttributeMetaCCUsageError(t *testing.T) { }, } _, err := ParseAttribute(dp, utils.MetaCCUsage, utils.EmptyString, config.NewRSRParsersMustCompile("::;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep) + 0, utils.EmptyString, utils.EmptyString) if err == nil || err.Error() != "invalid requestNumber <::> to *ccUsage" { t.Fatal(err) } @@ -5369,7 +5369,7 @@ func TestAttributesParseAttributeMetaGeneric(t *testing.T) { }, } if out, err := ParseAttribute(dp, utils.MetaGeneric, utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err != nil { + 0, utils.EmptyString, utils.EmptyString); err != nil { t.Fatal(err) } else if exp != out { t.Errorf("Expected %q, Received %q", exp, out) @@ -5385,7 +5385,7 @@ func TestAttributesParseAttributeError(t *testing.T) { }, } if _, err := ParseAttribute(dp, "badType", utils.EmptyString, config.NewRSRParsersMustCompile("~*req.cid;~*req.to;~*req.from", utils.InfieldSep), - 0, utils.EmptyString, utils.EmptyString, utils.InfieldSep); err == nil || err.Error() != "unsupported type: " { + 0, utils.EmptyString, utils.EmptyString); err == nil || err.Error() != "unsupported type: " { t.Errorf("Expected %q, Received %q", "unsupported type: ", err) } } @@ -5405,7 +5405,7 @@ func TestAttributesProcessEventPasswordAttribute(t *testing.T) { filterS := NewFilterS(cfg, nil, dm) attrS := NewAttributeService(dm, filterS, cfg) - value := config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep) + value := config.NewRSRParsersMustCompile("abcd123", utils.RSRSep) attrPrf := &AttributeProfile{ Tenant: "cgrates.org", @@ -5471,7 +5471,7 @@ func TestAttributesProcessEventPasswordAttribute(t *testing.T) { } } - value = config.NewRSRParsersMustCompile(hashedPw, config.CgrConfig().GeneralCfg().RSRSep) + value = config.NewRSRParsersMustCompile(hashedPw, utils.RSRSep) expAttrPrf := &AttributeProfile{ Tenant: "cgrates.org", ID: "ATTR_TEST", @@ -5509,7 +5509,7 @@ func TestAttributesSetAttributeProfilePasswordAttr(t *testing.T) { dm := NewDataManager(data, cfg.CacheCfg(), nil) Cache = NewCacheS(cfg, dm, nil, nil) - value := config.NewRSRParsersMustCompile("abcd123", config.CgrConfig().GeneralCfg().RSRSep) + value := config.NewRSRParsersMustCompile("abcd123", utils.RSRSep) attrPrf := &AttributeProfile{ Tenant: "cgrates.org", ID: "ATTR_TEST", @@ -5549,7 +5549,7 @@ func TestAttributesSetAttributeProfilePasswordAttr(t *testing.T) { if rcv, err := dm.GetAttributeProfile(context.Background(), attrPrf.Tenant, attrPrf.ID, true, true, utils.NonTransactional); err != nil { t.Error(err) - } else if hashedPw := rcv.Attributes[0].Value.GetRule(cfg.GeneralCfg().RSRSep); !utils.VerifyHash(hashedPw, "abcd123") { + } else if hashedPw := rcv.Attributes[0].Value.GetRule(); !utils.VerifyHash(hashedPw, "abcd123") { t.Errorf("Received an incorrect password") } else { rcv.Attributes[0].Value = nil diff --git a/engine/z_resources_test.go b/engine/z_resources_test.go index 3792c430d..11a40a5df 100644 --- a/engine/z_resources_test.go +++ b/engine/z_resources_test.go @@ -6913,44 +6913,44 @@ func TestResourceProfileSet(t *testing.T) { Stored: true, ThresholdIDs: []string{"TH1"}, } - if err := cp.Set([]string{}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{"NotAField"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{"NotAField"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{"NotAField", "1"}, "", false, utils.EmptyString); err != utils.ErrWrongPath { + if err := cp.Set([]string{"NotAField", "1"}, "", false); err != utils.ErrWrongPath { t.Error(err) } - if err := cp.Set([]string{utils.Tenant}, "cgrates.org", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.ID}, "ID", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.ID}, "ID", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Weights}, ";10", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.UsageTTL}, 10, false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.UsageTTL}, 10, false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.Limit}, 10, false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Limit}, 10, false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.AllocationMessage}, "new", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.AllocationMessage}, "new", false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.Blocker}, true, false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Blocker}, true, false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.Stored}, true, false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.Stored}, true, false); err != nil { t.Error(err) } - if err := cp.Set([]string{utils.ThresholdIDs}, "TH1", false, utils.EmptyString); err != nil { + if err := cp.Set([]string{utils.ThresholdIDs}, "TH1", false); err != nil { t.Error(err) } diff --git a/ers/ers.go b/ers/ers.go index c2ff16bff..3bc1b8d76 100644 --- a/ers/ers.go +++ b/ers/ers.go @@ -298,8 +298,7 @@ func (erS *ERService) processPartialEvent(ev *utils.CGREvent, rdrCfg *config.Eve var cgrEv *utils.CGREvent if cgrEv, err = mergePartialEvents(cgrEvs.events, cgrEvs.rdrCfg, erS.filterS, // merge the events erS.cfg.GeneralCfg().DefaultTenant, - erS.cfg.GeneralCfg().DefaultTimezone, - erS.cfg.GeneralCfg().RSRSep); err != nil { + erS.cfg.GeneralCfg().DefaultTimezone); err != nil { return } if partial := cgrEv.APIOpts[utils.PartialOpt]; !slices.Contains([]string{utils.FalseStr, utils.EmptyString}, @@ -332,8 +331,7 @@ func (erS *ERService) onEvicted(id string, value any) { case utils.MetaPostCDR: // merge the events and post the to erS cgrEv, err := mergePartialEvents(eEvs.events, eEvs.rdrCfg, erS.filterS, erS.cfg.GeneralCfg().DefaultTenant, - erS.cfg.GeneralCfg().DefaultTimezone, - erS.cfg.GeneralCfg().RSRSep) + erS.cfg.GeneralCfg().DefaultTimezone) if err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> failed posting expired parial events <%s> due error <%s>", @@ -351,8 +349,7 @@ func (erS *ERService) onEvicted(id string, value any) { } cgrEv, err := mergePartialEvents(eEvs.events, eEvs.rdrCfg, erS.filterS, // merge the partial events erS.cfg.GeneralCfg().DefaultTenant, - erS.cfg.GeneralCfg().DefaultTimezone, - erS.cfg.GeneralCfg().RSRSep) + erS.cfg.GeneralCfg().DefaultTimezone) if err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> failed posting expired parial events <%s> due error <%s>", @@ -420,8 +417,7 @@ func (erS *ERService) onEvicted(id string, value any) { } cgrEv, err := mergePartialEvents(eEvs.events, eEvs.rdrCfg, erS.filterS, // merge the partial events erS.cfg.GeneralCfg().DefaultTenant, - erS.cfg.GeneralCfg().DefaultTimezone, - erS.cfg.GeneralCfg().RSRSep) + erS.cfg.GeneralCfg().DefaultTimezone) if err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> failed posting expired parial events <%s> due error <%s>", diff --git a/ers/libers.go b/ers/libers.go index 42fab220b..68cff6a1c 100644 --- a/ers/libers.go +++ b/ers/libers.go @@ -31,7 +31,7 @@ import ( ) // mergePartialEvents will unite the events using the reader configuration -func mergePartialEvents(cgrEvs []*utils.CGREvent, cfg *config.EventReaderCfg, fltrS *engine.FilterS, dftTnt, dftTmz, rsrSep string) (cgrEv *utils.CGREvent, err error) { +func mergePartialEvents(cgrEvs []*utils.CGREvent, cfg *config.EventReaderCfg, fltrS *engine.FilterS, dftTnt, dftTmz string) (cgrEv *utils.CGREvent, err error) { cgrEv = cgrEvs[0] // by default there is at least one event if len(cgrEvs) != 1 { // need to merge the incoming events // prepare the field after which the events are ordered @@ -40,7 +40,7 @@ func mergePartialEvents(cgrEvs []*utils.CGREvent, cfg *config.EventReaderCfg, fl ordFld = *cfg.Opts.PartialOrderField } var ordPath config.RSRParsers - if ordPath, err = config.NewRSRParsers(ordFld, rsrSep); err != nil { // convert the option to rsrParsers + if ordPath, err = config.NewRSRParsers(ordFld, utils.RSRSep); err != nil { // convert the option to rsrParsers return nil, err } diff --git a/ers/libers_test.go b/ers/libers_test.go index 1e36d7e94..83eb79de6 100644 --- a/ers/libers_test.go +++ b/ers/libers_test.go @@ -89,7 +89,7 @@ func TestLibErsMergePartialEvents(t *testing.T) { }, } if rcv, err := mergePartialEvents(cgrEvs, confg.ERsCfg().Readers[0], fltrS, confg.GeneralCfg().DefaultTenant, - confg.GeneralCfg().DefaultTimezone, confg.GeneralCfg().RSRSep); err != nil { + confg.GeneralCfg().DefaultTimezone); err != nil { t.Error(err) } else { rcv.ID = utils.EmptyString diff --git a/general_tests/all_sections_cfg_rld_it_test.go b/general_tests/all_sections_cfg_rld_it_test.go index a4e651e10..5b8f47be0 100644 --- a/general_tests/all_sections_cfg_rld_it_test.go +++ b/general_tests/all_sections_cfg_rld_it_test.go @@ -131,13 +131,13 @@ func testSectConfigSReloadGeneral(t *testing.T) { var reply string if err := testSectRPC.Call(context.Background(), utils.ConfigSv1SetConfigFromJSON, &config.SetConfigFromJSONArgs{ Tenant: "cgrates.org", - Config: `{"general":{"connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","locking_timeout":"0","log_level":7,"logger":"*syslog","max_parallel_conns":100,"node_id":"98ead14","poster_attempts":3,"reconnects":-1,"reply_timeout":"50s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"}}`, + Config: `{"general":{"connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","failed_posts_dir":"/var/spool/cgrates/failed_posts","failed_posts_ttl":"5s","locking_timeout":"0","log_level":7,"logger":"*syslog","max_parallel_conns":100,"node_id":"98ead14","poster_attempts":3,"reconnects":-1,"reply_timeout":"50s","rounding_decimals":5,"tpexport_dir":"/var/spool/cgrates/tpe"}}`, }, &reply); err != nil { t.Error(err) } else if reply != utils.OK { t.Errorf("Expected OK received: %+v", reply) } - cfgStr := `{"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"98ead14","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"50s","rounding_decimals":5,"rsr_separator":";","tpexport_dir":"/var/spool/cgrates/tpe"}}` + cfgStr := `{"general":{"caching_delay":"0","connect_attempts":5,"connect_timeout":"1s","dbdata_encoding":"*msgpack","decimal_max_scale":0,"decimal_min_scale":0,"decimal_precision":0,"decimal_rounding_mode":"*toNearestEven","default_caching":"*reload","default_category":"call","default_request_type":"*rated","default_tenant":"cgrates.org","default_timezone":"Local","digest_equal":":","digest_separator":",","locking_timeout":"0","max_parallel_conns":100,"max_reconnect_interval":"0","node_id":"98ead14","opts":{"*exporterIDs":[]},"reconnects":-1,"reply_timeout":"50s","rounding_decimals":5,"tpexport_dir":"/var/spool/cgrates/tpe"}}` var rpl string if err := testSectRPC.Call(context.Background(), utils.ConfigSv1GetConfigAsJSON, &config.SectionWithAPIOpts{ Tenant: "cgrates.org", diff --git a/loaders/libloader.go b/loaders/libloader.go index 76f1c5f36..d35f5f61b 100644 --- a/loaders/libloader.go +++ b/loaders/libloader.go @@ -124,7 +124,7 @@ func (ar *record) FieldAsInterface(fldPath []string) (val any, err error) { } // SetFields will populate fields of record out of templates -func (ar *record) SetFields(ctx *context.Context, tmpls []*config.FCTemplate, filterS *engine.FilterS, rndDec int, dftTmz, rsrSep string) (err error) { +func (ar *record) SetFields(ctx *context.Context, tmpls []*config.FCTemplate, filterS *engine.FilterS, rndDec int, dftTmz string) (err error) { ar.tmp = &utils.DataNode{Type: utils.NMMapType, Map: make(map[string]*utils.DataNode)} for _, fld := range tmpls { if pass, err := filterS.Pass(context.TODO(), ar.tenant, @@ -147,7 +147,7 @@ func (ar *record) SetFields(ctx *context.Context, tmpls []*config.FCTemplate, fi default: var out any if out, err = engine.ParseAttribute(ar, fld.Type, fld.Path, fld.Value, rndDec, - utils.FirstNonEmpty(fld.Timezone, dftTmz), fld.Layout, rsrSep); err != nil { + utils.FirstNonEmpty(fld.Timezone, dftTmz), fld.Layout); err != nil { if err == utils.ErrNotFound { if !fld.Mandatory { err = nil @@ -170,9 +170,9 @@ func (ar *record) SetFields(ctx *context.Context, tmpls []*config.FCTemplate, fi nMItm := &utils.DataLeaf{Data: out, NewBranch: fld.NewBranch, AttributeID: fld.AttributeID} switch fld.Type { case utils.MetaComposed: - err = ar.Compose(fullPath, nMItm, rsrSep) + err = ar.Compose(fullPath, nMItm) default: - err = ar.Set(fullPath, nMItm, rsrSep) + err = ar.Set(fullPath, nMItm) } if err != nil { return @@ -215,7 +215,7 @@ func (ar *record) Remove(fullPath *utils.FullPath) error { // Set sets the value at the given path // this used with full path and the processed path to not calculate them for every set -func (ar *record) Compose(fullPath *utils.FullPath, val *utils.DataLeaf, sep string) (err error) { +func (ar *record) Compose(fullPath *utils.FullPath, val *utils.DataLeaf) (err error) { switch fullPath.PathSlice[0] { case utils.MetaTmp: return ar.tmp.Compose(fullPath.PathSlice[1:], val) @@ -234,15 +234,15 @@ func (ar *record) Compose(fullPath *utils.FullPath, val *utils.DataLeaf, sep str if valStr, err = ar.FieldAsString(fullPath.PathSlice); err != nil && err != utils.ErrNotFound { return } - return ar.data.Set(fullPath.PathSlice, valStr+utils.IfaceAsString(val.Data), val.NewBranch, utils.InfieldSep) + return ar.data.Set(fullPath.PathSlice, valStr+utils.IfaceAsString(val.Data), val.NewBranch) } } // Set implements utils.NMInterface -func (ar *record) Set(fullPath *utils.FullPath, nm *utils.DataLeaf, sep string) (err error) { +func (ar *record) Set(fullPath *utils.FullPath, nm *utils.DataLeaf) (err error) { switch fullPath.PathSlice[0] { default: - return ar.data.Set(fullPath.PathSlice, nm.Data, nm.NewBranch, sep) + return ar.data.Set(fullPath.PathSlice, nm.Data, nm.NewBranch) case utils.MetaTmp: _, err = ar.tmp.Set(fullPath.PathSlice[1:], nm.Data) return @@ -254,7 +254,7 @@ func (ar *record) Set(fullPath *utils.FullPath, nm *utils.DataLeaf, sep string) type profile interface { utils.DataProvider - Set([]string, any, bool, string) error + Set([]string, any, bool) error Merge(any) TenantID() string } diff --git a/loaders/libloader_test.go b/loaders/libloader_test.go index db885a310..f1d5f7506 100644 --- a/loaders/libloader_test.go +++ b/loaders/libloader_test.go @@ -67,12 +67,12 @@ func TestNewRecord(t *testing.T) { SetFields(context.Background(), []*config.FCTemplate{ {Filters: []string{"*exists:~*req.NoField:"}}, {Filters: []string{"*string"}}, - }, fs, 0, "", utils.InfieldSep); err == nil || err.Error() != expErrMsg { + }, fs, 0, ""); err == nil || err.Error() != expErrMsg { t.Errorf("Expeceted: %q, received: %v", expErrMsg, err) } pt := profileTest{} if err := newRecord(utils.MapStorage{}, pt, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), []*config.FCTemplate{}, fs, 0, "", utils.InfieldSep); err != nil { + SetFields(context.Background(), []*config.FCTemplate{}, fs, 0, ""); err != nil { t.Error(err) } if len(pt) != 0 { @@ -107,7 +107,7 @@ func TestNewRecordWithCahe(t *testing.T) { } r := profileTest{} if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err != nil { + SetFields(context.Background(), fc, fs, 0, ""); err != nil { t.Error(err) } else if !reflect.DeepEqual(r, exp) { t.Errorf("Expected %+v, received %+v", exp, r) @@ -136,7 +136,7 @@ func TestNewRecordWithTmp(t *testing.T) { } r := profileTest{} if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err != nil { + SetFields(context.Background(), fc, fs, 0, ""); err != nil { t.Error(err) } else if !reflect.DeepEqual(r, exp) { t.Errorf("Expected %+v, received %+v", exp, r) @@ -145,7 +145,7 @@ func TestNewRecordWithTmp(t *testing.T) { type profileTest utils.MapStorage -func (p profileTest) Set(path []string, val any, _ bool, _ string) error { +func (p profileTest) Set(path []string, val any, _ bool) error { return utils.MapStorage(p).Set(path, val) } func (p profileTest) Merge(v2 any) { @@ -195,7 +195,7 @@ func TestNewRecordWithTmp2(t *testing.T) { } r := profileTest{} if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err != nil { + SetFields(context.Background(), fc, fs, 0, ""); err != nil { t.Error(err) } else if !reflect.DeepEqual(r, exp) { t.Errorf("Expected %+v, received %+v", exp, r) @@ -218,7 +218,7 @@ func TestNewRecordWithComposeError(t *testing.T) { "Value": []string{}, } if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err != utils.ErrWrongPath { + SetFields(context.Background(), fc, fs, 0, ""); err != utils.ErrWrongPath { t.Error(err) } } @@ -238,7 +238,7 @@ func TestNewRecordWithRemoveError(t *testing.T) { } expErrMsg := `strconv.Atoi: parsing "NotVal": invalid syntax` if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err == nil || err.Error() != expErrMsg { + SetFields(context.Background(), fc, fs, 0, ""); err == nil || err.Error() != expErrMsg { t.Errorf("Expeceted: %v, received: %v", expErrMsg, err) } } @@ -257,7 +257,7 @@ func TestNewRecordSetFieldsError(t *testing.T) { "Value": []string{}, } if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err != utils.ErrWrongPath { + SetFields(context.Background(), fc, fs, 0, ""); err != utils.ErrWrongPath { t.Error(err) } } @@ -276,7 +276,7 @@ func TestNewRecordSetFieldsMandatoryError(t *testing.T) { } expErrMsg := `NOT_FOUND:` if err := newRecord(config.NewSliceDP([]string{"cgrates.org", "Attr1"}, nil), r, "cgrates.org", cfg, ltcache.NewCache(-1, 0, false, nil)). - SetFields(context.Background(), fc, fs, 0, "", utils.InfieldSep); err == nil || err.Error() != expErrMsg { + SetFields(context.Background(), fc, fs, 0, ""); err == nil || err.Error() != expErrMsg { t.Errorf("Expeceted: %v, received: %v", expErrMsg, err) } } diff --git a/loaders/loader.go b/loaders/loader.go index 7346521ad..f3ebc62c8 100644 --- a/loaders/loader.go +++ b/loaders/loader.go @@ -270,7 +270,7 @@ func (l *loader) processData(ctx *context.Context, csv *CSVFile, tmpls []*config tmp := newPrf() if err = newRecord(config.NewSliceDP(record, nil), tmp, l.ldrCfg.Tenant, l.cfg, l.dataCache[lType]). - SetFields(ctx, tmpls, l.filterS, l.cfg.GeneralCfg().RoundingDecimals, l.cfg.GeneralCfg().DefaultTimezone, l.cfg.GeneralCfg().RSRSep); err != nil { + SetFields(ctx, tmpls, l.filterS, l.cfg.GeneralCfg().RoundingDecimals, l.cfg.GeneralCfg().DefaultTimezone); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> <%s> file<%s> line: %d, error: %s", utils.LoaderS, l.ldrCfg.ID, csv.Path(), lineNr, err)) diff --git a/migrator/attributes.go b/migrator/attributes.go index 5ec0c0e5d..6d2ac61aa 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -290,7 +290,7 @@ func (v1AttrPrf v1AttributeProfile) AsAttributeProfile() (attrPrf *v2AttributePr for _, mp := range v1AttrPrf.Attributes { for _, attr := range mp { - sbstPrsr, err := config.NewRSRParsers(attr.Substitute, config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers(attr.Substitute, utils.RSRSep) if err != nil { return nil, err } @@ -358,7 +358,7 @@ func (v1AttrPrf v1AttributeProfile) AsAttributeProfileV1To4() (attrPrf *v4Attrib filterIDs = append(filterIDs, utils.MetaString+utils.ConcatenatedKeySep+attr.FieldName+utils.ConcatenatedKeySep+attr.Initial) } // create RSRParser - sbstPrsr, err := config.NewRSRParsers(attr.Substitute, config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers(attr.Substitute, utils.RSRSep) if err != nil { return nil, err } @@ -404,12 +404,12 @@ func (v4AttrPrf v4AttributeProfile) AsAttributeProfile() (attrPrf *v6AttributePr Weight: v4AttrPrf.Weight, } for _, attr := range v4AttrPrf.Attributes { // ToDo:redo this - val := attr.Value.GetRule(utils.InfieldSep) + val := attr.Value.GetRule() rsrVal := attr.Value if strings.HasPrefix(val, utils.DynamicDataPrefix) { val = val[1:] // remove the DynamicDataPrefix val = utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + val - rsrVal, err = config.NewRSRParsers(val, config.CgrConfig().GeneralCfg().RSRSep) + rsrVal, err = config.NewRSRParsers(val, utils.RSRSep) if err != nil { return nil, err } diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index ef7d5a613..5a3d60349 100644 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -737,7 +737,7 @@ func testAttrITV1ToV5(t *testing.T) { } // Construct the exepected output - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } @@ -825,7 +825,7 @@ func testAttrITV1ToV5(t *testing.T) { func testAttrITV2ToV5(t *testing.T) { // contruct the first v2 attributeProfile with all fields filled up - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } @@ -953,7 +953,7 @@ func testAttrITV2ToV5(t *testing.T) { func testAttrITV3ToV5(t *testing.T) { // contruct the first v3 attributeProfile with all fields filled up - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } @@ -1089,7 +1089,7 @@ func testAttrITV3ToV5(t *testing.T) { func testAttrITdryRunV2ToV5(t *testing.T) { // Test with dryRun on true // contruct the v2 attributeProfile with all fields filled up - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } @@ -1148,7 +1148,7 @@ func testAttrITdryRunV2ToV5(t *testing.T) { func testAttrITdryRunV3ToV5(t *testing.T) { // Test with dryRun on true // contruct the v3 attributeProfile with all fields filled up - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } diff --git a/migrator/attributes_test.go b/migrator/attributes_test.go index dd725d0ca..c4373c9f3 100644 --- a/migrator/attributes_test.go +++ b/migrator/attributes_test.go @@ -275,7 +275,7 @@ func TestAsAttributeProfileV2(t *testing.T) { Attributes: mapSubstitutes, Weight: 20, } - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } @@ -464,7 +464,7 @@ func TestAsAttributeProfileV1To4(t *testing.T) { Attributes: mapSubstitutes, Weight: 20, } - sbstPrsr, err := config.NewRSRParsers("Al1", config.CgrConfig().GeneralCfg().RSRSep) + sbstPrsr, err := config.NewRSRParsers("Al1", utils.RSRSep) if err != nil { t.Error("Error converting Substitute from string to RSRParser: ", err) } diff --git a/utils/account.go b/utils/account.go index 713b6daa6..b3e69a9cf 100644 --- a/utils/account.go +++ b/utils/account.go @@ -519,7 +519,7 @@ type ArgsActRemoveBalances struct { APIOpts map[string]any } -func (ap *Account) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (ap *Account) Set(path []string, val any, newBranch bool) (err error) { switch len(path) { case 0: return ErrWrongPath diff --git a/utils/account_test.go b/utils/account_test.go index 4609d526b..2ebf1cf69 100644 --- a/utils/account_test.go +++ b/utils/account_test.go @@ -992,146 +992,146 @@ func TestAccountSet(t *testing.T) { }, }, } - if err := acc.Set([]string{}, "", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{}, "", false); err != ErrWrongPath { t.Error(err) } - if err := acc.Set([]string{"NotAField"}, "", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{"NotAField"}, "", false); err != ErrWrongPath { t.Error(err) } - if err := acc.Set([]string{"NotAField", "1"}, "", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{"NotAField", "1"}, "", false); err != ErrWrongPath { t.Error(err) } expErr := `malformed map pair: <"bal">` - if err := acc.Set([]string{Opts}, "bal", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Opts}, "bal", false); err == nil || err.Error() != expErr { t.Error(err) } - if err := acc.Set([]string{Opts}, "bal:val;bal2:val2", false, EmptyString); err != nil { + if err := acc.Set([]string{Opts}, "bal:val;bal2:val2", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Opts, "bal3"}, "val2", false, EmptyString); err != nil { + if err := acc.Set([]string{Opts, "bal3"}, "val2", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Opts + "[bal4]"}, "val2", false, EmptyString); err != nil { + if err := acc.Set([]string{Opts + "[bal4]"}, "val2", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Opts + "[bal5]", "bal6"}, "val3", false, EmptyString); err != nil { + if err := acc.Set([]string{Opts + "[bal5]", "bal6"}, "val3", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Tenant}, "cgrates.org", false, EmptyString); err != nil { + if err := acc.Set([]string{Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := acc.Set([]string{ID}, "ID", false, EmptyString); err != nil { + if err := acc.Set([]string{ID}, "ID", false); err != nil { t.Error(err) } - if err := acc.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false, EmptyString); err != nil { + if err := acc.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := acc.Set([]string{ThresholdIDs}, "TH1", false, EmptyString); err != nil { + if err := acc.Set([]string{ThresholdIDs}, "TH1", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Weights}, ";0", false, EmptyString); err != nil { + if err := acc.Set([]string{Weights}, ";0", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Blockers}, ";0", false, EmptyString); err != nil { + if err := acc.Set([]string{Blockers}, ";0", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances + "[bal1]", ID}, "bal1", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances + "[bal1]", ID}, "bal1", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Type}, MetaConcrete, false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Type}, MetaConcrete, false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts}, "", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Opts}, "", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]"}, "val3", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]"}, "val3", false); err != ErrWrongPath { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]", ""}, "val3", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]", ""}, "val3", false); err != ErrWrongPath { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts + "[bal7]"}, "val3", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Opts + "[bal7]"}, "val3", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts + "[bal8]", "bal9"}, "val3", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Opts + "[bal8]", "bal9"}, "val3", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Opts, "bal10"}, "val3", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Opts, "bal10"}, "val3", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", FilterIDs}, "*string:~*req.Account:1001", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", FilterIDs}, "*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", AttributeIDs}, "Attr1;Attr2", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", AttributeIDs}, "Attr1;Attr2", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", RateProfileIDs}, "Attr1;Attr2", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", RateProfileIDs}, "Attr1;Attr2", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Units}, "10", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Units}, "10", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Weights}, ";10", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Weights}, ";10", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", Blockers}, ";false", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", Blockers}, ";false", false); err != nil { t.Error(err) } expErr = `invalid key: <1> for BalanceUnitFactors` - if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "1", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "1", false); err == nil || err.Error() != expErr { t.Error(err) } expErr = `can't convert to decimal` - if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "a;a", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "a;a", false); err == nil || err.Error() != expErr { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "fltr1;10", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "fltr1;10", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", UnitFactors, "Wrong"}, "fltr1;10", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{Balances, "bal1", UnitFactors, "Wrong"}, "fltr1;10", false); err != ErrWrongPath { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", UnitFactors, Factor}, "101", true, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", UnitFactors, Factor}, "101", true); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", UnitFactors, FilterIDs}, "fltr1", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", UnitFactors, FilterIDs}, "fltr1", false); err != nil { t.Error(err) } expErr = `invalid key: <1> for BalanceCostIncrements` - if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "1", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "1", false); err == nil || err.Error() != expErr { t.Error(err) } expErr = `can't convert to decimal` - if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;a;10", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;a;10", false); err == nil || err.Error() != expErr { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;a;10;10", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;a;10;10", false); err == nil || err.Error() != expErr { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;a", false, EmptyString); err == nil || err.Error() != expErr { + if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;a", false); err == nil || err.Error() != expErr { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;10", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;10", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements, FixedFee}, "101", true, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", CostIncrements, FixedFee}, "101", true); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements, RecurrentFee}, "101", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", CostIncrements, RecurrentFee}, "101", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements, Increment}, "101", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", CostIncrements, Increment}, "101", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements, FilterIDs}, "fltr1", false, EmptyString); err != nil { + if err := acc.Set([]string{Balances, "bal1", CostIncrements, FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := acc.Set([]string{Balances, "bal1", CostIncrements, "Wrong"}, "fltr1", false, EmptyString); err != ErrWrongPath { + if err := acc.Set([]string{Balances, "bal1", CostIncrements, "Wrong"}, "fltr1", false); err != ErrWrongPath { t.Error(err) } diff --git a/utils/consts.go b/utils/consts.go index e418ad311..71691f0a0 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -150,6 +150,7 @@ const ( CSVSep = ',' FallbackSep = ';' InfieldSep = ";" + RSRSep = ";" MetaPipe = "*|" FieldsSep = "," InInFieldSep = ":" @@ -1867,7 +1868,6 @@ const ( LockingTimeoutCfg = "locking_timeout" DigestSeparatorCfg = "digest_separator" DigestEqualCfg = "digest_equal" - RSRSepCfg = "rsr_separator" MaxParallelConnsCfg = "max_parallel_conns" EEsConnsCfg = "ees_conns" DecimalMaxScaleCfg = "decimal_max_scale" diff --git a/utils/librates.go b/utils/librates.go index fd7eb9f52..a53315f48 100644 --- a/utils/librates.go +++ b/utils/librates.go @@ -669,7 +669,7 @@ type RemoveRPrfRates struct { APIOpts map[string]any } -func (rp *RateProfile) Set(path []string, val any, newBranch bool, _ string) (err error) { +func (rp *RateProfile) Set(path []string, val any, newBranch bool) (err error) { if len(path) == 0 { return ErrWrongPath } diff --git a/utils/librates_test.go b/utils/librates_test.go index de7fd4b07..3a51ff3a9 100644 --- a/utils/librates_test.go +++ b/utils/librates_test.go @@ -1802,81 +1802,81 @@ func TestRateProfile(t *testing.T) { }, }, } - if err := rp.Set([]string{}, "", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{}, "", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{"NotAField"}, "", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{"NotAField"}, "", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{"NotAField", "1"}, "", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{"NotAField", "1"}, "", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{Tenant}, "cgrates.org", false, EmptyString); err != nil { + if err := rp.Set([]string{Tenant}, "cgrates.org", false); err != nil { t.Error(err) } - if err := rp.Set([]string{ID}, ID, false, EmptyString); err != nil { + if err := rp.Set([]string{ID}, ID, false); err != nil { t.Error(err) } - if err := rp.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false, EmptyString); err != nil { + if err := rp.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Weights}, ";10", false, EmptyString); err != nil { + if err := rp.Set([]string{Weights}, ";10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{MinCost}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{MinCost}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{MaxCost}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{MaxCost}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{MaxCostStrategy}, "strategy", false, EmptyString); err != nil { + if err := rp.Set([]string{MaxCostStrategy}, "strategy", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates + "[rat1]", ID}, "rat1", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates + "[rat1]", ID}, "rat1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", FilterIDs}, "fltr1", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", FilterIDs}, "fltr1", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", Weights}, ";20", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", Weights}, ";20", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", ActivationTimes}, "* * * * *", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", ActivationTimes}, "* * * * *", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", Blocker}, "true", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", Blocker}, "true", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", "Wrong"}, "true", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{Rates, "rat1", "Wrong"}, "true", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path"}, "true", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path"}, "true", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path", "2"}, "true", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path", "2"}, "true", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, "Wrong"}, "true", false, EmptyString); err != ErrWrongPath { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, "Wrong"}, "true", false); err != ErrWrongPath { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, IntervalStart}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, IntervalStart}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, FixedFee}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, FixedFee}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, RecurrentFee}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, RecurrentFee}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, Unit}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, Unit}, "10", false); err != nil { t.Error(err) } - if err := rp.Set([]string{Rates, "rat1", IntervalRates, Increment}, "10", false, EmptyString); err != nil { + if err := rp.Set([]string{Rates, "rat1", IntervalRates, Increment}, "10", false); err != nil { t.Error(err) }