From 67163a1ff5e4acceca005b59a137e0635628f371 Mon Sep 17 00:00:00 2001 From: adi Date: Thu, 22 Sep 2022 16:07:16 +0300 Subject: [PATCH] Merge fixes --- accounts/accounts.go | 10 +- actions/actions.go | 4 +- .../dispatcher_engine/cgrates.json | 1 + .../dispatcher_engine2/cgrates.json | 3 - .../cache_replicate/engine1/cgrates.json | 10 +- .../conf/samples/dispatcher_opts/cgrates.json | 22 +++- .../dispatcher_opts_admin/cgrates.json | 28 ++--- dispatchers/attributes_it_test.go | 8 ++ dispatchers/caches.go | 2 + dispatchers/dispatchers.go | 4 +- engine/attributes.go | 18 ++-- engine/cdrs.go | 14 +-- engine/{libfilters.go => libdynopts.go} | 8 +- ...{libfilters_test.go => libdynopts_test.go} | 8 +- engine/libengine.go | 13 +++ engine/routes.go | 2 +- engine/stats.go | 7 +- engine/thresholds.go | 2 +- general_tests/all_cfg_rld_it_test.go | 7 +- general_tests/dispatcher_opts_it_test.go | 72 ++++++++++--- rates/rates.go | 2 +- sessions/sessions.go | 102 +++++++++--------- 22 files changed, 224 insertions(+), 123 deletions(-) rename engine/{libfilters.go => libdynopts.go} (97%) rename engine/{libfilters_test.go => libdynopts_test.go} (99%) diff --git a/accounts/accounts.go b/accounts/accounts.go index 042d42286..ff159dc05 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -330,7 +330,7 @@ func (aS *AccountS) V1AccountsForEvent(ctx *context.Context, args *utils.CGREven return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, config.AccountsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -354,7 +354,7 @@ func (aS *AccountS) V1MaxAbstracts(ctx *context.Context, args *utils.CGREvent, e return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, config.AccountsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -384,7 +384,7 @@ func (aS *AccountS) V1DebitAbstracts(ctx *context.Context, args *utils.CGREvent, return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, config.AccountsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -414,7 +414,7 @@ func (aS *AccountS) V1MaxConcretes(ctx *context.Context, args *utils.CGREvent, e return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, config.AccountsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -444,7 +444,7 @@ func (aS *AccountS) V1DebitConcretes(ctx *context.Context, args *utils.CGREvent, return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.AccountSCfg().Opts.ProfileIgnoreFilters, config.AccountsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } diff --git a/actions/actions.go b/actions/actions.go index beff1e1d5..edd4f9521 100644 --- a/actions/actions.go +++ b/actions/actions.go @@ -283,7 +283,7 @@ func (aS *ActionS) V1ScheduleActions(ctx *context.Context, args *utils.CGREvent, return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.ActionSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.ActionSCfg().Opts.ProfileIgnoreFilters, config.ActionsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -303,7 +303,7 @@ func (aS *ActionS) V1ExecuteActions(ctx *context.Context, args *utils.CGREvent, return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, aS.fltrS, aS.cfg.ActionSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), aS.fltrS, aS.cfg.ActionSCfg().Opts.ProfileIgnoreFilters, config.ActionsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } diff --git a/data/conf/samples/cache_replicate/dispatcher_engine/cgrates.json b/data/conf/samples/cache_replicate/dispatcher_engine/cgrates.json index 7d0a191af..bb4c7a90e 100644 --- a/data/conf/samples/cache_replicate/dispatcher_engine/cgrates.json +++ b/data/conf/samples/cache_replicate/dispatcher_engine/cgrates.json @@ -20,6 +20,7 @@ "*dispatcher_loads": {"limit": -1, "replicate": true} }, "replication_conns": ["cacheReplication"], + "remote_conns": ["cacheReplication"], }, diff --git a/data/conf/samples/cache_replicate/dispatcher_engine2/cgrates.json b/data/conf/samples/cache_replicate/dispatcher_engine2/cgrates.json index 93f5a81a3..4815ca212 100644 --- a/data/conf/samples/cache_replicate/dispatcher_engine2/cgrates.json +++ b/data/conf/samples/cache_replicate/dispatcher_engine2/cgrates.json @@ -19,9 +19,6 @@ "db_port": 6379, "db_name": "11", }, - - - "caches":{ "partitions": { diff --git a/data/conf/samples/cache_replicate/engine1/cgrates.json b/data/conf/samples/cache_replicate/engine1/cgrates.json index ae7e2ef65..2efb97a2d 100644 --- a/data/conf/samples/cache_replicate/engine1/cgrates.json +++ b/data/conf/samples/cache_replicate/engine1/cgrates.json @@ -19,13 +19,21 @@ "db_type": "*internal", }, - +"caches":{ + "remote_conns": ["gob_cache"], // the conns that are queried when the items are not found in cache +}, "rpc_conns": { "conn1": { "strategy": "*first", "conns": [{"address": "127.0.0.1:6012", "transport":"*json"}], }, + "gob_cache": { + "strategy": "*first", + "conns": [ + {"address": "127.0.0.1:6013", "transport":"*gob"}, + ], + }, }, "attributes": { diff --git a/data/conf/samples/dispatcher_opts/cgrates.json b/data/conf/samples/dispatcher_opts/cgrates.json index 9116644dc..aab47d661 100644 --- a/data/conf/samples/dispatcher_opts/cgrates.json +++ b/data/conf/samples/dispatcher_opts/cgrates.json @@ -24,12 +24,32 @@ "dispatchers":{ "enabled": true, + "opts": { + "*dispatcherS": [ + { + "Tenant": "cgrates.org", + "FilterIDs": ["*string:~*opts.*subsys:*dispatchers"], + "Value": false, + }, + ], + }, }, - + "caches":{ + "remote_conns": ["gob_cache"], // the conns that are queried when the items are not found in cache + }, + "admins": { "enabled": true, }, + "rpc_conns": { + "gob_cache": { + "strategy": "*first", + "conns": [ + {"address": "127.0.0.1:2013", "transport":"*gob"}, + ], + }, + }, } \ No newline at end of file diff --git a/data/conf/samples/dispatcher_opts_admin/cgrates.json b/data/conf/samples/dispatcher_opts_admin/cgrates.json index 03eeb9f00..71bfec856 100644 --- a/data/conf/samples/dispatcher_opts_admin/cgrates.json +++ b/data/conf/samples/dispatcher_opts_admin/cgrates.json @@ -18,23 +18,22 @@ "db_name": "10", // data_db database name to connect to }, - /* + "dispatchers":{ "enabled": true, - "opts": { // - // "*dispatcherS": [ - // { - // "Tenant": "cgrates.org", - // "FilterIDs": [], - // "Value": true, - // }, - // ], - }, + "opts": { + "*dispatcherS": [ + { + "Tenant": "cgrates.org", + "FilterIDs": ["*string:~*opts.*subsys:*dispatchers"], + "Value": false, + }, + ], + }, }, - */ "caches":{ - //"remote_conns": ["*internal"], // the conns that are queried when the items are not found in cache + //"remote_conns": ["gob_cache"], // the conns that are queried when the items are not found in cache }, @@ -51,6 +50,11 @@ {"address": "127.0.0.1:4012", "transport":"*json"}, ], }, + /* "gob_cache": { + "conns": [ + {"address": "127.0.0.1:4012", "transport":"*gob"}, + ], + }, */ }, } \ No newline at end of file diff --git a/dispatchers/attributes_it_test.go b/dispatchers/attributes_it_test.go index b285f0526..678ca85bf 100644 --- a/dispatchers/attributes_it_test.go +++ b/dispatchers/attributes_it_test.go @@ -266,6 +266,8 @@ func testDspAttrGetAttrFailover(t *testing.T) { APIOpts: map[string]interface{}{ utils.OptsAPIKey: "attr12345", utils.OptsContext: "simpleauth", + utils.MetaNodeID: "DispatcherS1", + utils.MetaSubsys: "*dispatchers", }, }, } @@ -467,6 +469,8 @@ func testDspAttrTestAuthKey2(t *testing.T) { APIOpts: map[string]interface{}{ utils.OptsAPIKey: "attr12345", utils.OptsContext: "simpleauth", + utils.MetaNodeID: "DispatcherS1", + utils.MetaSubsys: "*dispatchers", }, }, } @@ -557,6 +561,8 @@ func testDspAttrGetAttrRoundRobin(t *testing.T) { APIOpts: map[string]interface{}{ utils.OptsAPIKey: "attr12345", utils.OptsContext: "simpleauth", + utils.MetaNodeID: "DispatcherS1", + utils.MetaSubsys: "*dispatchers", }, }, } @@ -632,6 +638,8 @@ func testDspAttrGetAttrInternal(t *testing.T) { APIOpts: map[string]interface{}{ utils.OptsAPIKey: "attr12345", utils.OptsContext: "simpleauth", + utils.MetaNodeID: "DispatcherS1", + utils.MetaSubsys: "*dispatchers", }, }, } diff --git a/dispatchers/caches.go b/dispatchers/caches.go index e034dd08f..05268882a 100644 --- a/dispatchers/caches.go +++ b/dispatchers/caches.go @@ -43,6 +43,7 @@ func (dS *DispatcherService) CacheSv1Clear(ctx *context.Context, args *utils.Att } return dS.Dispatch(ctx, &utils.CGREvent{Tenant: tnt, Event: ev, APIOpts: opts}, utils.MetaCaches, utils.CacheSv1Clear, args, reply) } + func (dS *DispatcherService) CacheSv1GetCacheStats(ctx *context.Context, args *utils.AttrCacheIDsWithAPIOpts, reply *map[string]*ltcache.CacheStats) (err error) { tnt := dS.cfg.GeneralCfg().DefaultTenant if args != nil && len(args.Tenant) != 0 { @@ -60,6 +61,7 @@ func (dS *DispatcherService) CacheSv1GetCacheStats(ctx *context.Context, args *u } return dS.Dispatch(ctx, &utils.CGREvent{Tenant: tnt, Event: ev, APIOpts: opts}, utils.MetaCaches, utils.CacheSv1GetCacheStats, args, reply) } + func (dS *DispatcherService) CacheSv1GetGroupItemIDs(ctx *context.Context, args *utils.ArgsGetGroupWithAPIOpts, reply *[]string) (err error) { tnt := dS.cfg.GeneralCfg().DefaultTenant if args != nil && len(args.Tenant) != 0 { diff --git a/dispatchers/dispatchers.go b/dispatchers/dispatchers.go index 0f865f235..19385ab6f 100644 --- a/dispatchers/dispatchers.go +++ b/dispatchers/dispatchers.go @@ -104,7 +104,7 @@ func (dS *DispatcherService) dispatcherProfilesForEvent(ctx *context.Context, tn evNm utils.MapStorage) (dPrlfs engine.DispatcherProfiles, err error) { // make sure dispatching is allowed var shouldDispatch bool - if shouldDispatch, err = engine.GetBoolOpts(ctx, tnt, ev, dS.fltrS, dS.cfg.DispatcherSCfg().Opts.Dispatchers, + if shouldDispatch, err = engine.GetBoolOpts(ctx, tnt, evNm, dS.fltrS, dS.cfg.DispatcherSCfg().Opts.Dispatchers, config.DispatchersDispatchersDftOpt, utils.OptsDispatchers); err != nil { return } else if !shouldDispatch { @@ -184,7 +184,7 @@ func (dS *DispatcherService) Dispatch(ctx *context.Context, ev *utils.CGREvent, } // avoid further processing if the request is internal var shouldDispatch bool - if shouldDispatch, err = engine.GetBoolOpts(ctx, tnt, ev, dS.fltrS, dS.cfg.DispatcherSCfg().Opts.Dispatchers, + if shouldDispatch, err = engine.GetBoolOpts(ctx, tnt, evNm, dS.fltrS, dS.cfg.DispatcherSCfg().Opts.Dispatchers, true, utils.OptsDispatchers); err != nil { return utils.NewErrDispatcherS(err) } else if !shouldDispatch { diff --git a/engine/attributes.go b/engine/attributes.go index bd8211088..2b0822a22 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -162,7 +162,7 @@ func (alS *AttributeS) processEvent(ctx *context.Context, tnt string, args *util return } var ignFilters bool - if ignFilters, err = GetBoolOpts(ctx, tnt, args, alS.fltrS, alS.cfg.AttributeSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = GetBoolOpts(ctx, tnt, evNm, alS.fltrS, alS.cfg.AttributeSCfg().Opts.ProfileIgnoreFilters, config.AttributesProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -256,18 +256,20 @@ func (alS *AttributeS) V1GetAttributeForEvent(ctx *context.Context, args *utils. config.AttributesProfileIDsDftOpt, utils.OptsAttributesProfileIDs); err != nil { return } - var ignFilters bool - if ignFilters, err = GetBoolOpts(ctx, tnt, args, alS.fltrS, alS.cfg.AttributeSCfg().Opts.ProfileIgnoreFilters, - config.AttributesProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { - return - } - attrPrf, err := alS.attributeProfileForEvent(ctx, tnt, attrIDs, utils.MapStorage{ + evNM := utils.MapStorage{ utils.MetaReq: args.Event, utils.MetaOpts: args.APIOpts, utils.MetaVars: utils.MapStorage{ utils.OptsAttributesProcessRuns: 0, }, - }, utils.EmptyString, make(map[string]int), 0, ignFilters) + } + var ignFilters bool + if ignFilters, err = GetBoolOpts(ctx, tnt, evNM, alS.fltrS, alS.cfg.AttributeSCfg().Opts.ProfileIgnoreFilters, + config.AttributesProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { + return + } + attrPrf, err := alS.attributeProfileForEvent(ctx, tnt, attrIDs, evNM, + utils.EmptyString, make(map[string]int), 0, ignFilters) if err != nil { if err != utils.ErrNotFound { err = utils.NewErrServerError(err) diff --git a/engine/cdrs.go b/engine/cdrs.go index 776a836a8..9e428ae26 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -195,7 +195,7 @@ func (cdrS *CDRServer) eeSProcessEvent(ctx *context.Context, cgrEv *utils.CGREve func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (evs []*utils.EventsWithOpts, err error) { // making the options var attrS bool - if attrS, err = GetBoolOpts(ctx, ev.Tenant, ev, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Attributes, + if attrS, err = GetBoolOpts(ctx, ev.Tenant, ev.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Attributes, config.CDRsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } @@ -211,7 +211,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e var cgrEvs []*utils.CGREvent var chrgS bool - if chrgS, err = GetBoolOpts(ctx, ev.Tenant, ev, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Chargers, + if chrgS, err = GetBoolOpts(ctx, ev.Tenant, ev.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Chargers, config.CDRsChargersDftOpt, utils.OptsChargerS); err != nil { return } @@ -231,7 +231,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e var rateS bool for _, cgrEv := range cgrEvs { - if rateS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Rates, + if rateS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Rates, config.CDRsRatesDftOpt, utils.OptsRateS); err != nil { return } @@ -247,7 +247,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e var acntS bool for _, cgrEv := range cgrEvs { - if acntS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Accounts, + if acntS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Accounts, config.CDRsAccountsDftOpt, utils.OptsAccountS); err != nil { return } @@ -287,7 +287,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e } var export bool for _, cgrEv := range cgrEvs { - if export, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Export, + if export, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Export, config.CDRsExportDftOpt, utils.OptsCDRsExport); err != nil { return } @@ -307,7 +307,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e var thdS bool for _, cgrEv := range cgrEvs { - if thdS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Thresholds, + if thdS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Thresholds, config.CDRsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -323,7 +323,7 @@ func (cdrS *CDRServer) processEvent(ctx *context.Context, ev *utils.CGREvent) (e var stS bool for _, cgrEv := range cgrEvs { - if stS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Stats, + if stS, err = GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(), cdrS.fltrS, cdrS.cfg.CdrsCfg().Opts.Stats, config.CDRsStatsDftOpt, utils.OptsStatS); err != nil { return } diff --git a/engine/libfilters.go b/engine/libdynopts.go similarity index 97% rename from engine/libfilters.go rename to engine/libdynopts.go index ed851ccb1..c71f3aa39 100644 --- a/engine/libfilters.go +++ b/engine/libdynopts.go @@ -171,19 +171,19 @@ func GetIntOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *Filter // GetBoolOpts checks the specified option names in order among the keys in APIOpts returning the first value it finds as bool, otherwise it // returns the config option if at least one filter passes or the default value if none of them do -func GetBoolOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *FilterS, dynOpts []*utils.DynamicBoolOpt, +func GetBoolOpts(ctx *context.Context, tnt string, dP utils.DataProvider, fS *FilterS, dynOpts []*utils.DynamicBoolOpt, dftOpt bool, optNames ...string) (cfgOpt bool, err error) { + optsDP := GetAPIOptsFromDataProvider(dP) for _, optName := range optNames { - if opt, has := ev.APIOpts[optName]; has { + if opt, has := optsDP[optName]; has { return utils.IfaceAsBool(opt) } } - evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } - if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does + if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, dP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does return false, err } else if pass { return opt.Value, nil diff --git a/engine/libfilters_test.go b/engine/libdynopts_test.go similarity index 99% rename from engine/libfilters_test.go rename to engine/libdynopts_test.go index 445721a5e..d0656f843 100644 --- a/engine/libfilters_test.go +++ b/engine/libdynopts_test.go @@ -785,7 +785,7 @@ func TestLibFiltersGetBoolOptsReturnConfigOpt(t *testing.T) { } expected := true - if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev, fS, dynOpts, + if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev.AsDataProvider(), fS, dynOpts, config.ThresholdsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { t.Error(err) } else if rcv != expected { @@ -816,7 +816,7 @@ func TestLibFiltersGetBoolOptsFilterCheckErr(t *testing.T) { } experr := `inline parse error for string: <*string.invalid:filter>` - if _, err := GetBoolOpts(context.Background(), "cgrates.org", ev, fS, dynOpts, + if _, err := GetBoolOpts(context.Background(), "cgrates.org", ev.AsDataProvider(), fS, dynOpts, config.ThresholdsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err == nil || err.Error() != experr { t.Errorf("expected: <%+v>, \nreceived: <%+v>", experr, err) @@ -845,7 +845,7 @@ func TestLibFiltersGetBoolOptsReturnDefaultOpt(t *testing.T) { }, } - if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev, fS, dynOpts, + if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev.AsDataProvider(), fS, dynOpts, config.ThresholdsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { t.Error(err) } else if rcv != config.ThresholdsProfileIgnoreFiltersDftOpt { @@ -879,7 +879,7 @@ func TestLibFiltersGetBoolOptsReturnOptFromAPIOpts(t *testing.T) { } expected := true - if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev, fS, dynOpts, + if rcv, err := GetBoolOpts(context.Background(), "cgrates.org", ev.AsDataProvider(), fS, dynOpts, config.ThresholdsProfileIgnoreFiltersDftOpt, "nonExistingAPIOpt", utils.MetaProfileIgnoreFilters); err != nil { t.Error(err) } else if rcv != expected { diff --git a/engine/libengine.go b/engine/libengine.go index c675a6907..81d759781 100644 --- a/engine/libengine.go +++ b/engine/libengine.go @@ -182,6 +182,19 @@ func NewServiceWithName(val interface{}, name string, useName bool) (_ IntServic return s, nil } +func GetAPIOptsFromDataProvider(dP utils.DataProvider) map[string]interface{} { + switch v := dP.(type) { + case utils.MapStorage: + if x, has := v[utils.MetaOpts]; has { + return x.(map[string]interface{}) + } + return make(map[string]interface{}) + case MapEvent: + return v + } + return nil +} + func NewDispatcherService(val interface{}) (_ IntService, err error) { var srv *birpc.Service if srv, err = birpc.NewService(val, utils.EmptyString, false); err != nil { diff --git a/engine/routes.go b/engine/routes.go index f3bf9c4ac..b2a4b96b2 100644 --- a/engine/routes.go +++ b/engine/routes.go @@ -198,7 +198,7 @@ func (rpS *RouteS) matchingRouteProfilesForEvent(ctx *context.Context, tnt strin func newOptsGetRoutes(ctx *context.Context, ev *utils.CGREvent, fS *FilterS, cfgOpts *config.RoutesOpts) (opts *optsGetRoutes, err error) { var ignoreErrors bool - if ignoreErrors, err = GetBoolOpts(ctx, ev.Tenant, ev, fS, cfgOpts.IgnoreErrors, + if ignoreErrors, err = GetBoolOpts(ctx, ev.Tenant, ev.AsDataProvider(), fS, cfgOpts.IgnoreErrors, config.RoutesIgnoreErrorsDftOpt, utils.OptsRoutesIgnoreErrors); err != nil { return } diff --git a/engine/stats.go b/engine/stats.go index eda415d57..b26c807c2 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -330,7 +330,7 @@ func (sS *StatS) processEvent(ctx *context.Context, tnt string, args *utils.CGRE return } var ignFilters bool - if ignFilters, err = GetBoolOpts(ctx, tnt, args, sS.fltrS, sS.cfg.StatSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = GetBoolOpts(ctx, tnt, evNm, sS.fltrS, sS.cfg.StatSCfg().Opts.ProfileIgnoreFilters, config.StatsProfileIgnoreFilters, utils.MetaProfileIgnoreFilters); err != nil { return } @@ -421,13 +421,14 @@ func (sS *StatS) V1GetStatQueuesForEvent(ctx *context.Context, args *utils.CGREv config.StatsProfileIDsDftOpt, utils.OptsStatsProfileIDs); err != nil { return } + evDp := args.AsDataProvider() var ignFilters bool - if ignFilters, err = GetBoolOpts(ctx, tnt, args, sS.fltrS, sS.cfg.StatSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = GetBoolOpts(ctx, tnt, evDp, sS.fltrS, sS.cfg.StatSCfg().Opts.ProfileIgnoreFilters, config.StatsProfileIgnoreFilters, utils.MetaProfileIgnoreFilters); err != nil { return } var sQs StatQueues - if sQs, err = sS.matchingStatQueuesForEvent(ctx, tnt, sqIDs, args.AsDataProvider(), ignFilters); err != nil { + if sQs, err = sS.matchingStatQueuesForEvent(ctx, tnt, sqIDs, evDp, ignFilters); err != nil { return } diff --git a/engine/thresholds.go b/engine/thresholds.go index 6ed83bc7e..24404af51 100644 --- a/engine/thresholds.go +++ b/engine/thresholds.go @@ -336,7 +336,7 @@ func (tS *ThresholdS) matchingThresholdsForEvent(ctx *context.Context, tnt strin return } var ignFilters bool - if ignFilters, err = GetBoolOpts(ctx, tnt, args, tS.fltrS, tS.cfg.ThresholdSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = GetBoolOpts(ctx, tnt, evNm, tS.fltrS, tS.cfg.ThresholdSCfg().Opts.ProfileIgnoreFilters, config.ThresholdsProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } diff --git a/general_tests/all_cfg_rld_it_test.go b/general_tests/all_cfg_rld_it_test.go index 42f3f14fe..98178d458 100644 --- a/general_tests/all_cfg_rld_it_test.go +++ b/general_tests/all_cfg_rld_it_test.go @@ -172,8 +172,7 @@ func testConfigSReload(t *testing.T) { t.Errorf("\nExpected %+v ,\n received: %+v", utils.ToIJSON(cfgStr), utils.ToIJSON(rpl7)) } } else if testCfgDir == "tutinternal" { - cfgStr = "{\"caches\":{\"partitions\":{\"*account_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*accounts\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*action_profile_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*action_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*apiban\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"2m0s\"},\"*attribute_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*attribute_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*caps_events\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*cdr_ids\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"10m0s\"},\"*charger_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*charger_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*closed_sessions\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"10s\"},\"*diameter_messages\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"3h0m0s\"},\"*dispatcher_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_hosts\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_loads\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_routes\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatchers\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*event_charges\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"10s\"},\"*event_resources\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*filters\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*load_ids\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_profile_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*replication_hosts\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*resource_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*resource_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*resources\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*reverse_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*route_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*route_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*rpc_connections\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*rpc_responses\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"2s\"},\"*stat_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*statqueue_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*statqueues\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*stir\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"3h0m0s\"},\"*threshold_filter_indexes\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*threshold_profiles\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*thresholds\":{\"limit\":0,\"precache\":false,\"replicate\":false,\"static_ttl\":false},\"*uch\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"3h0m0s\"}},\"replication_conns\":[]}}" - + cfgStr := "{\"caches\":{\"partitions\":{\"*account_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*accounts\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*action_profile_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*action_profiles\":{\"limit\":0,\"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\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*attribute_profiles\":{\"limit\":0,\"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\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*charger_profiles\":{\"limit\":0,\"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\"},\"*dispatcher_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_hosts\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_loads\":{\"limit\":-1,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_profiles\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatcher_routes\":{\"limit\":-1,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*dispatchers\":{\"limit\":-1,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*event_charges\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"10s\"},\"*event_resources\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*filters\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*load_ids\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_profile_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*rate_profiles\":{\"limit\":0,\"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\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*resource_profiles\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*resources\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*reverse_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*route_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*route_profiles\":{\"limit\":0,\"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\"},\"*stat_filter_indexes\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*statqueue_profiles\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*statqueues\":{\"limit\":0,\"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\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*threshold_profiles\":{\"limit\":0,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false},\"*thresholds\":{\"limit\":0,\"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\":[]}}" var rpl7 string if err := testRPC.Call(context.Background(), utils.ConfigSv1GetConfigAsJSON, &config.SectionWithAPIOpts{ Tenant: "cgrates.org", @@ -403,9 +402,7 @@ func testConfigSReload(t *testing.T) { } if testCfgDir == "tutinternal" { - - cfgStr = "{\"loaders\":[{\"action\":\"*store\",\"cache\":{\"*accounts\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*action_profiles\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*attributes\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*chargers\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*dispatcher_hosts\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*dispatchers\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*filters\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*rate_profiles\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*resources\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*routes\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*stats\":{\"limit\":-1,\"precache\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*thresholds\":{\"limit\":-1,\"precache\":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\":\"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\":\"Weight\",\"tag\":\"Weight\",\"type\":\"*variable\",\"value\":\"~*req.3\"},{\"path\":\"Strategy\",\"tag\":\"Strategy\",\"type\":\"*variable\",\"value\":\"~*req.4\"},{\"path\":\"StrategyParams\",\"tag\":\"StrategyParameters\",\"type\":\"*variable\",\"value\":\"~*req.5\"},{\"new_branch\":true,\"path\":\"Hosts.ID\",\"tag\":\"ConnID\",\"type\":\"*variable\",\"value\":\"~*req.6\"},{\"path\":\"Hosts.FilterIDs\",\"tag\":\"ConnFilterIDs\",\"type\":\"*variable\",\"value\":\"~*req.7\"},{\"path\":\"Hosts.Weight\",\"tag\":\"ConnWeight\",\"type\":\"*variable\",\"value\":\"~*req.8\"},{\"path\":\"Hosts.Blocker\",\"tag\":\"ConnBlocker\",\"type\":\"*variable\",\"value\":\"~*req.9\"},{\"path\":\"Hosts.Params\",\"tag\":\"ConnParameters\",\"type\":\"*variable\",\"value\":\"~*req.10\"}],\"file_name\":\"DispatcherProfiles.csv\",\"flags\":null,\"type\":\"*dispatchers\"},{\"fields\":[{\"mandatory\":true,\"path\":\"Tenant\",\"tag\":\"Tenant\",\"type\":\"*variable\",\"value\":\"~*req.0\"},{\"mandatory\":true,\"path\":\"ID\",\"tag\":\"ID\",\"type\":\"*variable\",\"value\":\"~*req.1\"},{\"path\":\"Address\",\"tag\":\"Address\",\"type\":\"*variable\",\"value\":\"~*req.2\"},{\"path\":\"Transport\",\"tag\":\"Transport\",\"type\":\"*variable\",\"value\":\"~*req.3\"},{\"path\":\"ConnectAttempts\",\"tag\":\"ConnectAttempts\",\"type\":\"*variable\",\"value\":\"~*req.4\"},{\"path\":\"Reconnects\",\"tag\":\"Reconnects\",\"type\":\"*variable\",\"value\":\"~*req.5\"},{\"path\":\"MaxReconnectInterval\",\"tag\":\"MaxReconnectInterval\",\"type\":\"*variable\",\"value\":\"~*req.6\"},{\"path\":\"ConnectTimeout\",\"tag\":\"ConnectTimeout\",\"type\":\"*variable\",\"value\":\"~*req.7\"},{\"path\":\"ReplyTimeout\",\"tag\":\"ReplyTimeout\",\"type\":\"*variable\",\"value\":\"~*req.8\"},{\"path\":\"TLS\",\"tag\":\"TLS\",\"type\":\"*variable\",\"value\":\"~*req.9\"},{\"path\":\"ClientKey\",\"tag\":\"ClientKey\",\"type\":\"*variable\",\"value\":\"~*req.10\"},{\"path\":\"ClientCertificate\",\"tag\":\"ClientCertificate\",\"type\":\"*variable\",\"value\":\"~*req.11\"},{\"path\":\"CaCertificate\",\"tag\":\"CaCertificate\",\"type\":\"*variable\",\"value\":\"~*req.12\"}],\"file_name\":\"DispatcherHosts.csv\",\"flags\":null,\"type\":\"*dispatcher_hosts\"},{\"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\"}]}" - + cfgStr := "{\"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\"},\"*dispatcher_hosts\":{\"limit\":-1,\"precache\":false,\"remote\":false,\"replicate\":false,\"static_ttl\":false,\"ttl\":\"5s\"},\"*dispatchers\":{\"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\"},\"*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\"}},\"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\":\"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\":\"Weight\",\"tag\":\"Weight\",\"type\":\"*variable\",\"value\":\"~*req.3\"},{\"path\":\"Strategy\",\"tag\":\"Strategy\",\"type\":\"*variable\",\"value\":\"~*req.4\"},{\"path\":\"StrategyParams\",\"tag\":\"StrategyParameters\",\"type\":\"*variable\",\"value\":\"~*req.5\"},{\"new_branch\":true,\"path\":\"Hosts.ID\",\"tag\":\"ConnID\",\"type\":\"*variable\",\"value\":\"~*req.6\"},{\"path\":\"Hosts.FilterIDs\",\"tag\":\"ConnFilterIDs\",\"type\":\"*variable\",\"value\":\"~*req.7\"},{\"path\":\"Hosts.Weight\",\"tag\":\"ConnWeight\",\"type\":\"*variable\",\"value\":\"~*req.8\"},{\"path\":\"Hosts.Blocker\",\"tag\":\"ConnBlocker\",\"type\":\"*variable\",\"value\":\"~*req.9\"},{\"path\":\"Hosts.Params\",\"tag\":\"ConnParameters\",\"type\":\"*variable\",\"value\":\"~*req.10\"}],\"file_name\":\"DispatcherProfiles.csv\",\"flags\":null,\"type\":\"*dispatchers\"},{\"fields\":[{\"mandatory\":true,\"path\":\"Tenant\",\"tag\":\"Tenant\",\"type\":\"*variable\",\"value\":\"~*req.0\"},{\"mandatory\":true,\"path\":\"ID\",\"tag\":\"ID\",\"type\":\"*variable\",\"value\":\"~*req.1\"},{\"path\":\"Address\",\"tag\":\"Address\",\"type\":\"*variable\",\"value\":\"~*req.2\"},{\"path\":\"Transport\",\"tag\":\"Transport\",\"type\":\"*variable\",\"value\":\"~*req.3\"},{\"path\":\"ConnectAttempts\",\"tag\":\"ConnectAttempts\",\"type\":\"*variable\",\"value\":\"~*req.4\"},{\"path\":\"Reconnects\",\"tag\":\"Reconnects\",\"type\":\"*variable\",\"value\":\"~*req.5\"},{\"path\":\"MaxReconnectInterval\",\"tag\":\"MaxReconnectInterval\",\"type\":\"*variable\",\"value\":\"~*req.6\"},{\"path\":\"ConnectTimeout\",\"tag\":\"ConnectTimeout\",\"type\":\"*variable\",\"value\":\"~*req.7\"},{\"path\":\"ReplyTimeout\",\"tag\":\"ReplyTimeout\",\"type\":\"*variable\",\"value\":\"~*req.8\"},{\"path\":\"TLS\",\"tag\":\"TLS\",\"type\":\"*variable\",\"value\":\"~*req.9\"},{\"path\":\"ClientKey\",\"tag\":\"ClientKey\",\"type\":\"*variable\",\"value\":\"~*req.10\"},{\"path\":\"ClientCertificate\",\"tag\":\"ClientCertificate\",\"type\":\"*variable\",\"value\":\"~*req.11\"},{\"path\":\"CaCertificate\",\"tag\":\"CaCertificate\",\"type\":\"*variable\",\"value\":\"~*req.12\"}],\"file_name\":\"DispatcherHosts.csv\",\"flags\":null,\"type\":\"*dispatcher_hosts\"},{\"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\"}]}" var rpl26 string if err := testRPC.Call(context.Background(), utils.ConfigSv1GetConfigAsJSON, &config.SectionWithAPIOpts{ Tenant: "cgrates.org", diff --git a/general_tests/dispatcher_opts_it_test.go b/general_tests/dispatcher_opts_it_test.go index 186097174..ee8215405 100644 --- a/general_tests/dispatcher_opts_it_test.go +++ b/general_tests/dispatcher_opts_it_test.go @@ -47,24 +47,24 @@ var ( testDispatcherOptsAdminInitDataDb, testDispatcherOptsAdminStartEngine, testDispatcherOptsAdminRPCConn, - testDispatcherOptsAdminSetDispatcherProfile, + //testDispatcherOptsAdminSetDispatcherProfile, - // Start engine without Dispatcher on engine 2012 with profiles in database (*dispatchers:false) + // Start engine without Dispatcher on engine 4012 with profiles in database (*dispatchers:false) testDispatcherOptsDSPInitCfg, testDispatcherOptsDSPStartEngine, testDispatcherOptsDSPRPCConn, - testDispatcherOptsCoreStatus, // self localhost(:2012) CoresV1Status + //testDispatcherOptsCoreStatus, // localhost(:4012) CoresV1Status - testDispatcherOptsAdminSetDispatcherHost4012, - testDispatcherOptsCoreStatusHost4012, + //testDispatcherOptsAdminSetDispatcherHost4012, + //testDispatcherOptsCoreStatusHost4012, testDispatcherOptsAdminSetDispatcherProfileDoubleHost, - //testDispatcherOptsCoreStatusWithRouteID, + testDispatcherOptsCoreStatusWithRouteID, testDispatcherOptsAdminSetDispatcherHostInexistent, - //testDispatcherOptsCoreStatusWithRouteID2, + testDispatcherOptsCoreStatusWithRouteID2, - //testDispatcherOptsCoreStatusWithoutRouteID, + testDispatcherOptsCoreStatusWithoutRouteID, testDispatcherOptsDSPStopEngine, testDispatcherOptsAdminStopEngine, @@ -116,7 +116,7 @@ func testDispatcherOptsAdminSetDispatcherProfile(t *testing.T) { Tenant: "cgrates.org", RemoteHost: &config.RemoteHost{ ID: "SELF_ENGINE", - Address: "127.0.0.1:4012", + Address: "127.0.0.1:2012", Transport: "*json", ConnectAttempts: 1, Reconnects: 3, @@ -269,6 +269,51 @@ func testDispatcherOptsCoreStatusHost4012(t *testing.T) { } func testDispatcherOptsAdminSetDispatcherProfileDoubleHost(t *testing.T) { + var replyStr string + setDispatcherHost := &engine.DispatcherHostWithAPIOpts{ + DispatcherHost: &engine.DispatcherHost{ + Tenant: "cgrates.org", + RemoteHost: &config.RemoteHost{ + ID: "SELF_ENGINE", + Address: "127.0.0.1:2012", + Transport: "*json", + ConnectAttempts: 1, + Reconnects: 3, + ConnectTimeout: time.Minute, + ReplyTimeout: 2 * time.Minute, + }, + }, + APIOpts: map[string]interface{}{ + utils.OptsDispatchers: false, + }, + } + if err := adminsRPC.Call(context.Background(), utils.AdminSv1SetDispatcherHost, setDispatcherHost, &replyStr); err != nil { + t.Error("Unexpected error when calling AdminSv1.SetDispatcherHost: ", err) + } else if replyStr != utils.OK { + t.Error("Unexpected reply returned", replyStr) + } + setDispatcherHost = &engine.DispatcherHostWithAPIOpts{ + DispatcherHost: &engine.DispatcherHost{ + Tenant: "cgrates.org", + RemoteHost: &config.RemoteHost{ + ID: "HOST4012", + Address: "127.0.0.1:4012", + Transport: "*json", + ConnectAttempts: 1, + Reconnects: 3, + ConnectTimeout: time.Minute, + ReplyTimeout: 2 * time.Minute, + }, + }, + APIOpts: map[string]interface{}{ + utils.OptsDispatchers: false, + }, + } + if err := adminsRPC.Call(context.Background(), utils.AdminSv1SetDispatcherHost, setDispatcherHost, &replyStr); err != nil { + t.Error("Unexpected error when calling AdminSv1.SetDispatcherHost: ", err) + } else if replyStr != utils.OK { + t.Error("Unexpected reply returned", replyStr) + } // Set DispatcherProfile with both engines setDispatcherProfile := &engine.DispatcherProfileWithAPIOpts{ DispatcherProfile: &engine.DispatcherProfile{ @@ -281,17 +326,17 @@ func testDispatcherOptsAdminSetDispatcherProfileDoubleHost(t *testing.T) { ID: "SELF_ENGINE", Weight: 5, }, - { + /* { ID: "HOST4012", Weight: 10, - }, + }, */ }, }, APIOpts: map[string]interface{}{ utils.OptsDispatchers: false, }, } - var replyStr string + //var replyStr string if err := adminsRPC.Call(context.Background(), utils.AdminSv1SetDispatcherProfile, setDispatcherProfile, &replyStr); err != nil { t.Error("Unexpected error when calling AdminSv1.SetDispatcherProfile: ", err) } else if replyStr != utils.OK { @@ -393,6 +438,9 @@ func testDispatcherOptsCoreStatusWithoutRouteID(t *testing.T) { var reply map[string]interface{} ev := utils.TenantWithAPIOpts{ Tenant: "cgrates.org", + APIOpts: map[string]interface{}{ + "ATTEMPTS": 2, + }, } if err := dspOptsRPC.Call(context.Background(), utils.CoreSv1Status, &ev, &reply); err != nil { t.Error(err) diff --git a/rates/rates.go b/rates/rates.go index 8393b601a..764400499 100644 --- a/rates/rates.go +++ b/rates/rates.go @@ -329,7 +329,7 @@ func (rS *RateS) V1CostForEvent(ctx *context.Context, args *utils.CGREvent, rpCo return } var ignFilters bool - if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args, rS.fltrS, rS.cfg.RateSCfg().Opts.ProfileIgnoreFilters, + if ignFilters, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), rS.fltrS, rS.cfg.RateSCfg().Opts.ProfileIgnoreFilters, config.RatesProfileIgnoreFiltersDftOpt, utils.MetaProfileIgnoreFilters); err != nil { return } diff --git a/sessions/sessions.go b/sessions/sessions.go index de74a6b33..143555640 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -916,7 +916,7 @@ func (sS *SessionS) newSession(ctx *context.Context, cgrEv *utils.CGREvent, resI DebitInterval: dbtItval, } s.OptsStart[utils.MetaOriginID] = originID - if s.Chargeable, err = engine.GetBoolOpts(ctx, cgrEv.Tenant, cgrEv, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, + if s.Chargeable, err = engine.GetBoolOpts(ctx, cgrEv.Tenant, s.OptsStart, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, config.SessionsChargeableDftOpt, utils.OptsSesChargeable); err != nil { return } @@ -1237,7 +1237,7 @@ func (sS *SessionS) updateSession(ctx *context.Context, s *Session, updtEv, opts Event: updtEv, APIOpts: opts, } - if s.Chargeable, err = engine.GetBoolOpts(ctx, event.Tenant, event, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, + if s.Chargeable, err = engine.GetBoolOpts(ctx, event.Tenant, event.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, config.SessionsChargeableDftOpt, utils.OptsSesChargeable); err != nil { return } @@ -1552,22 +1552,22 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, } // end of RPC caching var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } var routeS bool - if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { return } var maxUsage bool - if maxUsage, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.MaxUsage, + if maxUsage, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.MaxUsage, config.SessionsMaxUsageDftOpt, utils.OptsSesMaxUsage); err != nil { return } var resAuthorize bool - if resAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAuthorize, + if resAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAuthorize, config.SessionsResourcesAuthorizeDftOpt, utils.OptsSesResourceSAuthorize); err != nil { return } @@ -1592,7 +1592,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, runEvents := make(map[string]*utils.CGREvent) var chrgS bool - if chrgS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargers, + if chrgS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargers, config.SessionsChargersDftOpt, utils.OptsChargerS); err != nil { return } @@ -1608,7 +1608,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, runEvents[utils.MetaRaw] = args } var acntS bool - if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts, + if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts, config.SessionsAccountsDftOpt, utils.OptsAccountS); err != nil { return } @@ -1645,7 +1645,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, } } var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -1660,7 +1660,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context, authReply.ThresholdIDs = &tIDs } var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } @@ -1690,7 +1690,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, return } var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } @@ -1698,7 +1698,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, authReply.AttributesDigest = utils.StringPointer(initAuthRply.Attributes.Digest()) } var resourcesAuthorize bool - if resourcesAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAuthorize, + if resourcesAuthorize, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAuthorize, config.SessionsResourcesAuthorizeDftOpt, utils.OptsSesResourceSAuthorize); err != nil { return } @@ -1706,7 +1706,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, authReply.ResourceAllocation = initAuthRply.ResourceAllocation } var acntS bool - if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts, + if acntS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts, config.SessionsAccountsDftOpt, utils.OptsAccountS); err != nil { return } @@ -1715,7 +1715,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, authReply.MaxUsage = maxDur.Seconds() } var routeS bool - if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { return } @@ -1723,7 +1723,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, authReply.RoutesDigest = utils.StringPointer(initAuthRply.RouteProfiles.Digest()) } var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -1732,7 +1732,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(ctx *context.Context, strings.Join(*initAuthRply.ThresholdIDs, utils.FieldsSep)) } var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } @@ -1782,17 +1782,17 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, rply.MaxUsage = utils.DurationPointer(time.Duration(utils.InvalidUsage)) // temp var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } var initS bool - if initS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Initiate, + if initS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Initiate, config.SessionsInitiateDftOpt, utils.OptsSesInitiate); err != nil { return } var resourcesAllocate bool - if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAllocate, + if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAllocate, config.SessionsResourcesAllocateDftOpt, utils.OptsSesResourceSAllocate); err != nil { return } @@ -1832,7 +1832,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, return } var forceDuration bool - if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { return } @@ -1865,7 +1865,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, } } var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -1880,7 +1880,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context, rply.ThresholdIDs = &tIDs } var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } @@ -1967,12 +1967,12 @@ func (sS *SessionS) BiRPCv1UpdateSession(ctx *context.Context, } // end of RPC caching var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } var updS bool - if updS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Update, + if updS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Update, config.SessionsUpdateDftOpt, utils.OptsSesUpdate); err != nil { return } @@ -2003,7 +2003,7 @@ func (sS *SessionS) BiRPCv1UpdateSession(ctx *context.Context, ev.GetStringIgnoreErrors(utils.OriginHost)) if s == nil { var forceDuration bool - if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { return } @@ -2065,12 +2065,12 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, } // end of RPC caching var resourcesRelease bool - if resourcesRelease, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesRelease, + if resourcesRelease, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesRelease, config.SessionsResourcesReleaseDftOpt, utils.OptsSesResourceSRelease); err != nil { return } var termS bool - if termS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Terminate, + if termS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Terminate, config.SessionsTerminateDftOpt, utils.OptsSesTerminate); err != nil { return } @@ -2095,7 +2095,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, fib := utils.FibDuration(time.Millisecond, 0) var isMsg bool // one time charging, do not perform indexing and sTerminator var forceDuration bool - if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { return } @@ -2124,7 +2124,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, s.UpdateSRuns(ev, sS.cfg.SessionSCfg().AlterableFields) } s.Lock() - if s.Chargeable, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, + if s.Chargeable, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargeable, config.SessionsChargeableDftOpt, utils.OptsSesChargeable); err != nil { return } @@ -2153,7 +2153,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, } } var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -2168,7 +2168,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(ctx *context.Context, } } var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } @@ -2270,7 +2270,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, originID := me.GetStringIgnoreErrors(utils.OriginID) var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } @@ -2284,7 +2284,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, } } var resourcesAllocate bool - if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAllocate, + if resourcesAllocate, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAllocate, config.SessionsResourcesAllocateDftOpt, utils.OptsSesResourceSAllocate); err != nil { return } @@ -2305,7 +2305,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, rply.ResourceAllocation = &allocMessage } var routeS bool - if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { return } @@ -2319,13 +2319,13 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, } } var message bool - if message, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Message, + if message, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Message, config.SessionsMessageDftOpt, utils.OptsSesMessage); err != nil { return } if message { var forceDuration bool - if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, + if forceDuration, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ForceDuration, config.SessionsForceDurationDftOpt, utils.OptsSesForceDuration); err != nil { return } @@ -2336,7 +2336,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, rply.MaxUsage = &maxUsage } var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } @@ -2351,7 +2351,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(ctx *context.Context, rply.ThresholdIDs = &tIDs } var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } @@ -2411,7 +2411,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // end of RPC caching var blockError bool - if blockError, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.BlockerError, + if blockError, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.BlockerError, config.SessionsBlockerErrorDftOpt, utils.OptsSesBlockerError); err != nil { return } @@ -2419,7 +2419,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, utils.MetaRaw: args, } var chrgS bool - if chrgS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargers, + if chrgS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Chargers, config.SessionsChargersDftOpt, utils.OptsChargerS); err != nil { return } @@ -2435,14 +2435,14 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // check for *attribute var attrS bool - if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, + if attrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Attributes, config.SessionsAttributesDftOpt, utils.OptsAttributeS); err != nil { return } if attrS { rply.Attributes = make(map[string]*engine.AttrSProcessEventReply) var attrsDerivedReply bool - if attrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.AttributesDerivedReply, + if attrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.AttributesDerivedReply, config.SessionsAttributesDerivedReplyDftOpt, utils.OptsSesAttributeSDerivedReply); err != nil { return } @@ -2462,13 +2462,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // get routes if required var routeS bool - if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, + if routeS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Routes, config.SessionsRoutesDftOpt, utils.OptsRouteS); err != nil { return } if routeS { var routesDerivedReply bool - if routesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.RoutesDerivedReply, + if routesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.RoutesDerivedReply, config.SessionsRoutesDerivedReplyDftOpt, utils.OptsSesRouteSDerivedReply); err != nil { return } @@ -2487,13 +2487,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // process thresholds if required var thdS bool - if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, + if thdS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Thresholds, config.SessionsThresholdsDftOpt, utils.OptsThresholdS); err != nil { return } if thdS { var thdsDerivedReply bool - if thdsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ThresholdsDerivedReply, + if thdsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ThresholdsDerivedReply, config.SessionsThresholdsDerivedReplyDftOpt, utils.OptsSesThresholdSDerivedReply); err != nil { return } @@ -2515,13 +2515,13 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // process stats if required var stS bool - if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, + if stS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.Stats, config.SessionsStatsDftOpt, utils.OptsStatS); err != nil { return } if stS { var stsDerivedReply bool - if stsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.StatsDerivedReply, + if stsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.StatsDerivedReply, config.SessionsStatsDerivedReplyDftOpt, utils.OptsSesStatSDerivedReply); err != nil { return } @@ -2616,7 +2616,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, return fmt.Errorf("unsuported value for %s option: %q ", utils.OptsResourceS, optStr) } var resourcesDerivedReply bool - if resourcesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesDerivedReply, + if resourcesDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesDerivedReply, config.SessionsResourcesDerivedReplyDftOpt, utils.OptsSesResourceSDerivedReply); err != nil { return } @@ -2785,7 +2785,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, // } var cdrS bool - if cdrS, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.CDRs, + if cdrS, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.CDRs, config.SessionsCDRsDftOpt, utils.OptsCDRs); err != nil { return } @@ -2794,7 +2794,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context, return utils.NewErrNotConnected(utils.CDRs) } var cdrsDerivedReply bool - if cdrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args, sS.fltrS, sS.cfg.SessionSCfg().Opts.CDRsDerivedReply, + if cdrsDerivedReply, err = engine.GetBoolOpts(ctx, args.Tenant, args.AsDataProvider(), sS.fltrS, sS.cfg.SessionSCfg().Opts.CDRsDerivedReply, config.SessionsCDRsDerivedReplyDftOpt, utils.OptsSesCDRsDerivedReply); err != nil { return }