From b16b44732e38ca68ac484c35d4030b078e13deed Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Thu, 21 Apr 2022 11:10:28 +0300 Subject: [PATCH] Modified blocker into Blockers for attributes --- accounts/accounts_test.go | 12 +- apis/attributes_it_test.go | 6 +- apis/attributes_test.go | 8 +- apis/loaders_it_test.go | 12 +- .../scripts/create_tariffplan_tables.sql | 2 +- .../mysql/create_tariffplan_tables.sql | 2 +- .../postgres/create_tariffplan_tables.sql | 2 +- data/tariffplans/cluelrn/Attributes.csv | 16 +- data/tariffplans/dispatchers/Attributes.csv | 56 +++--- .../dispatchers_gob/Attributes.csv | 56 +++--- data/tariffplans/dnsagent/Attributes.csv | 6 +- data/tariffplans/loadRateTest/Attributes.csv | 20 +- data/tariffplans/oldtutorial/Attributes.csv | 6 +- data/tariffplans/precache/Attributes.csv | 4 +- .../routes1/Attributes.csv | 6 +- data/tariffplans/testit/Attributes.csv | 20 +- data/tariffplans/testtp/Attributes.csv | 4 +- .../tut_sip_redirect/Attributes.csv | 4 +- data/tariffplans/tutorial/Attributes.csv | 20 +- engine/attributes.go | 6 +- engine/filterhelpers.go | 14 ++ engine/libattributes.go | 32 ++-- engine/libattributes_test.go | 30 ++- engine/libtest.go | 6 +- engine/loader_csv_test.go | 8 +- engine/model_helpers.go | 22 ++- engine/model_helpers_test.go | 8 +- engine/models.go | 2 +- engine/z_attributes_test.go | 179 +++++++++++++++--- engine/z_filterindexer_test.go | 24 ++- general_tests/attributes_it_test.go | 54 +++++- general_tests/doubleremove_it_test.go | 6 +- general_tests/export_it_test.go | 6 +- loaders/loader_it_test.go | 6 +- migrator/attributes.go | 3 +- utils/apitpdata.go | 2 +- utils/blockers.go | 5 +- utils/consts.go | 1 + 38 files changed, 469 insertions(+), 207 deletions(-) diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go index 265fd08f7..bab96fa64 100644 --- a/accounts/accounts_test.go +++ b/accounts/accounts_test.go @@ -1510,7 +1510,11 @@ func TestV1DebitAbstractsEventCharges(t *testing.T) { Value: config.NewRSRParsersMustCompile("RP_2", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, } if err := dm.SetAttributeProfile(context.Background(), atrPrfl, true); err != nil { t.Error(err) @@ -2022,7 +2026,11 @@ func TestV1DebitAbstractsEventChargesWithRefundCharges(t *testing.T) { Value: config.NewRSRParsersMustCompile("RP_2", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, } if err := dm.SetAttributeProfile(context.Background(), atrPrfl, true); err != nil { t.Error(err) diff --git a/apis/attributes_it_test.go b/apis/attributes_it_test.go index 43444b66e..0771d1000 100644 --- a/apis/attributes_it_test.go +++ b/apis/attributes_it_test.go @@ -912,7 +912,11 @@ func testAttributeProcessEventWithSearchAndReplace(t *testing.T) { Value: "~*req.Category:s/(.*)/${1}_suffix/", }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, diff --git a/apis/attributes_test.go b/apis/attributes_test.go index 3616ecd26..d6d9c5fac 100644 --- a/apis/attributes_test.go +++ b/apis/attributes_test.go @@ -43,8 +43,12 @@ func TestAttributesSetGetAttributeProfile(t *testing.T) { attrPrf := &engine.APIAttributeProfileWithAPIOpts{ APIAttributeProfile: &engine.APIAttributeProfile{ - ID: "TestGetAttributeProfile", - Blocker: true, + ID: "TestGetAttributeProfile", + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Attributes: []*engine.ExternalAttribute{ { Path: "*req.RequestType", diff --git a/apis/loaders_it_test.go b/apis/loaders_it_test.go index d1d39b10d..157f0e738 100644 --- a/apis/loaders_it_test.go +++ b/apis/loaders_it_test.go @@ -606,7 +606,11 @@ func testLoadersGetAttributeProfiles(t *testing.T) { Value: "Sub2", }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -630,7 +634,11 @@ func testLoadersGetAttributeProfiles(t *testing.T) { Value: "Sub1", }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, diff --git a/data/storage/docker_mysql/scripts/create_tariffplan_tables.sql b/data/storage/docker_mysql/scripts/create_tariffplan_tables.sql index 0d73dd370..4a98a0e2a 100644 --- a/data/storage/docker_mysql/scripts/create_tariffplan_tables.sql +++ b/data/storage/docker_mysql/scripts/create_tariffplan_tables.sql @@ -145,7 +145,7 @@ CREATE TABLE tp_attributes ( `path` varchar(64) NOT NULL, `type` varchar(64) NOT NULL, `value` varchar(64) NOT NULL, - `blocker` BOOLEAN NOT NULL, + `blocker` varchar(64) NOT NULL, `weights` varchar(64) NOT NULL, `created_at` TIMESTAMP, PRIMARY KEY (`pk`), diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql index 1a8b4c9d4..cdb1627b0 100644 --- a/data/storage/mysql/create_tariffplan_tables.sql +++ b/data/storage/mysql/create_tariffplan_tables.sql @@ -146,7 +146,7 @@ CREATE TABLE tp_attributes ( `path` varchar(64) NOT NULL, `type` varchar(64) NOT NULL, `value` varchar(64) NOT NULL, - `blocker` BOOLEAN NOT NULL, + `blockers` varchar(64) NOT NULL, `weights` varchar(64) NOT NULL, `created_at` TIMESTAMP, PRIMARY KEY (`pk`), diff --git a/data/storage/postgres/create_tariffplan_tables.sql b/data/storage/postgres/create_tariffplan_tables.sql index 129139a3e..3f42c5892 100644 --- a/data/storage/postgres/create_tariffplan_tables.sql +++ b/data/storage/postgres/create_tariffplan_tables.sql @@ -140,7 +140,7 @@ CREATE INDEX tp_routes_unique ON tp_routes ("tpid", "tenant", "id", "path" varchar(64) NOT NULL, "type" varchar(64) NOT NULL, "value" varchar(64) NOT NULL, - "blocker" BOOLEAN NOT NULL, + "blockers" varchar(64) NOT NULL, "weights" varchar(64) NOT NULL, "created_at" TIMESTAMP WITH TIME ZONE ); diff --git a/data/tariffplans/cluelrn/Attributes.csv b/data/tariffplans/cluelrn/Attributes.csv index 38bf0d55f..34df6e08a 100644 --- a/data/tariffplans/cluelrn/Attributes.csv +++ b/data/tariffplans/cluelrn/Attributes.csv @@ -1,8 +1,8 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,LRN_Dst3125650565,*string:~*opts.*context:lrn;*string:~*req.Destination:3125650565,;10,,*req.Destination,*constant,13128543000,false -cgrates.org,LRN_Dst3125650565,,;10,,*req.OriginalDestination,*constant,3125650565,false -cgrates.org,LRN_LATA_Dst13128543000,*string:~*opts.*context:lrn;*string:~*req.Destination:13128543000;*notempty:~*req.OriginalDestination:,;20,,*req.DestinationLATA,*constant,358,false -cgrates.org,LRN_LATA_Cli9174269000,*string:~*opts.*context:lrn;*string:~*req.Account:9174269000;*notempty:~*req.DestinationLATA:,;30,,*req.CallerLATA,*constant,132,false -cgrates.org,LRN_JURISDICTION_NY,*string:~*opts.*context:lrn;FLTR_INTRALATA_NEWYORK,;50,,*req.LRNJurisdiction,*constant,INTRA,false -cgrates.org,LRN_JURISDICTION_IL,*string:~*opts.*context:lrn;FLTR_INTRALATA_ILLINOIS,;50,,*req.LRNJurisdiction,*constant,INTRA,false -cgrates.org,LRN_JURISDICTION_INTER,*string:~*opts.*context:lrn;*string:~*req.Destination:13128543000;*notempty:~*req.CallerLATA:,;40,,*req.LRNJurisdiction,*constant,INTER,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,LRN_Dst3125650565,*string:~*opts.*context:lrn;*string:~*req.Destination:3125650565,;10,,*req.Destination,*constant,13128543000,;false +cgrates.org,LRN_Dst3125650565,,;10,,*req.OriginalDestination,*constant,3125650565,;false +cgrates.org,LRN_LATA_Dst13128543000,*string:~*opts.*context:lrn;*string:~*req.Destination:13128543000;*notempty:~*req.OriginalDestination:,;20,,*req.DestinationLATA,*constant,358,;false +cgrates.org,LRN_LATA_Cli9174269000,*string:~*opts.*context:lrn;*string:~*req.Account:9174269000;*notempty:~*req.DestinationLATA:,;30,,*req.CallerLATA,*constant,132,;false +cgrates.org,LRN_JURISDICTION_NY,*string:~*opts.*context:lrn;FLTR_INTRALATA_NEWYORK,;50,,*req.LRNJurisdiction,*constant,INTRA,;false +cgrates.org,LRN_JURISDICTION_IL,*string:~*opts.*context:lrn;FLTR_INTRALATA_ILLINOIS,;50,,*req.LRNJurisdiction,*constant,INTRA,;false +cgrates.org,LRN_JURISDICTION_INTER,*string:~*opts.*context:lrn;*string:~*req.Destination:13128543000;*notempty:~*req.CallerLATA:,;40,,*req.LRNJurisdiction,*constant,INTER,;false diff --git a/data/tariffplans/dispatchers/Attributes.csv b/data/tariffplans/dispatchers/Attributes.csv index 9a33a630e..ae7dacb94 100644 --- a/data/tariffplans/dispatchers/Attributes.csv +++ b/data/tariffplans/dispatchers/Attributes.csv @@ -1,28 +1,28 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,false -cgrates.org,ATTR_1001_SIMPLEAUTH,,;20,,*req.EventName,*constant,*remove,false -cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.com,false -cgrates.org,ATTR_API_ATTR_FAKE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:12345,;20,,*req.APIMethods,*constant,,false -cgrates.org,ATTR_API_ATTR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:attr12345,;20,,*req.APIMethods,*constant,AttributeSv1.Ping&AttributeSv1.GetAttributeForEvent&AttributeSv1.ProcessEvent,false -cgrates.org,ATTR_API_CHRG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chrg12345,;20,,*req.APIMethods,*constant,ChargerSv1.Ping&ChargerSv1.GetChargersForEvent&ChargerSv1.ProcessEvent,false -cgrates.org,ATTR_API_THR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:thr12345,;20,,*req.APIMethods,*constant,ThresholdSv1.Ping&ThresholdSv1.GetThresholdsForEvent&ThresholdSv1.ProcessEvent&ThresholdSv1.GetThreshold&ThresholdSv1.GetThresholdIDs,false -cgrates.org,ATTR_API_SUP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sup12345,;20,,*req.APIMethods,*constant,RouteSv1.Ping&RouteSv1.GetRoutes&RouteSv1.GetRouteProfilesForEvent,false -cgrates.org,ATTR_API_STAT_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:stat12345,;20,,*req.APIMethods,*constant,StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent&StatSv1.GetQueueIDs&StatSv1.GetQueueFloatMetrics,false -cgrates.org,ATTR_API_RES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:res12345,;20,,*req.APIMethods,*constant,ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent&ResourceSv1.AuthorizeResources&ResourceSv1.AllocateResources&ResourceSv1.ReleaseResources&ResourceSv1.GetResource,false -cgrates.org,ATTR_API_SES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:ses12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&SessionSv1.ProcessEvent&SessionSv1.GetCost&SessionSv1.STIRAuthenticate&SessionSv1.STIRIdentity,false -cgrates.org,ATTR_API_RSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rsp12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&Responder.Shutdown&Responder.Ping,false -cgrates.org,ATTR_API_CHC_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chc12345,;20,,*req.APIMethods,*constant,CacheSv1.Ping&CacheSv1.GetCacheStats&CacheSv1.LoadCache&CacheSv1.PrecacheStatus&CacheSv1.GetItemIDs&CacheSv1.HasItem&CacheSv1.GetItemExpiryTime&CacheSv1.ReloadCache&CacheSv1.RemoveItem&CacheSv1.RemoveItems&CacheSv1.Clear,false -cgrates.org,ATTR_API_GRD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:grd12345,;20,,*req.APIMethods,*constant,GuardianSv1.Ping&GuardianSv1.RemoteLock&GuardianSv1.RemoteUnlock,false -cgrates.org,ATTR_API_SCHD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sched12345,;20,,*req.APIMethods,*constant,SchedulerSv1.Ping,false -cgrates.org,ATTR_API_CDRS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrs12345,;20,,*req.APIMethods,*constant,CDRsV1.Ping&CDRsV1.ProcessEvent&CDRsV1.GetCDRs&CDRsV1.GetCDRsCount&CDRsV1.ProcessCDR&CDRsV1.ProcessExternalCDR,false -cgrates.org,ATTR_API_DSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:dsp12345,;20,,*req.APIMethods,*constant,DispatcherSv1.Ping&DispatcherSv1.GetProfilesForEvent,false -cgrates.org,ATTR_API_PSE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:pse12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&AttributeSv1.ProcessEvent&Responder.Debit&ResourceSv1.AllocateResources&ChargerSv1.ProcessEvent&Responder.MaxDebit&SessionSv1.ProcessEvent&ResourceSv1.ReleaseResources,false -cgrates.org,ATTR_API_CFG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cfg12345,;20,,*req.APIMethods,*constant,ConfigSv1.GetConfig&ConfigSv1.ReloadConfig,false -cgrates.org,ATTR_API_APIER_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:apier12345,;20,,*req.APIMethods,*constant,APIerSv1.GetAttributeProfile&APIerSv1.SetAttributeProfile,false -cgrates.org,ATTR_API_RALS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rals12345,;20,,*req.APIMethods,*constant,RALsV1.Ping&RALsV1.GetRatingPlansCost,false -cgrates.org,ATTR_API_REPLICATOR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:repl12345,;20,,*req.APIMethods,*constant,ReplicatorSv1.Ping&ReplicatorSv1.GetAccount&ReplicatorSv1.SetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.GetRouteProfile&ReplicatorSv1.SetRouteProfile&ReplicatorSv1.RemoveRouteProfile&ReplicatorSv1.GetAttributeProfile&ReplicatorSv1.SetAttributeProfile&ReplicatorSv1.RemoveAttributeProfile&ReplicatorSv1.SetChargerProfile&ReplicatorSv1.GetChargerProfile&ReplicatorSv1.RemoveChargerProfile&ReplicatorSv1.GetDispatcherProfile&ReplicatorSv1.SetDispatcherProfile&ReplicatorSv1.RemoveDispatcherProfile&ReplicatorSv1.GetDispatcherHost&ReplicatorSv1.SetDispatcherHost&ReplicatorSv1.RemoveDispatcherHost&ReplicatorSv1.GetFilter&ReplicatorSv1.SetFilter&ReplicatorSv1.RemoveFilter&ReplicatorSv1.GetThreshold&ReplicatorSv1.SetThreshold&ReplicatorSv1.RemoveThreshold&ReplicatorSv1.GetStatQueue&ReplicatorSv1.SetStatQueue&ReplicatorSv1.RemoveStatQueue&ReplicatorSv1.GetResource&ReplicatorSv1.SetResource&ReplicatorSv1.RemoveResource&ReplicatorSv1.GetResourceProfile&ReplicatorSv1.SetResourceProfile&ReplicatorSv1.RemoveResourceProfile&ReplicatorSv1.GetStatQueueProfile&ReplicatorSv1.SetStatQueueProfile&ReplicatorSv1.RemoveStatQueueProfile&ReplicatorSv1.GetThresholdProfile&ReplicatorSv1.SetThresholdProfile&ReplicatorSv1.RemoveThresholdProfile&ReplicatorSv1.GetTiming&ReplicatorSv1.SetTiming&ReplicatorSv1.RemoveTiming&ReplicatorSv1.GetActionTriggers&ReplicatorSv1.SetActionTriggers&ReplicatorSv1.RemoveActionTriggers&ReplicatorSv1.SetSharedGroup&ReplicatorSv1.GetSharedGroup&ReplicatorSv1.RemoveSharedGroup&ReplicatorSv1.SetActions&ReplicatorSv1.GetActions&ReplicatorSv1.RemoveActions&ReplicatorSv1.SetActionPlan&ReplicatorSv1.GetActionPlan&ReplicatorSv1.RemoveActionPlan&ReplicatorSv1.SetAccountActionPlans&ReplicatorSv1.GetAccountActionPlans&ReplicatorSv1.RemAccountActionPlans&ReplicatorSv1.SetRatingPlan&ReplicatorSv1.GetRatingPlan&ReplicatorSv1.RemoveRatingPlan&ReplicatorSv1.SetRatingProfile&ReplicatorSv1.GetRatingProfile&ReplicatorSv1.RemoveRatingProfile&ReplicatorSv1.SetDestination&ReplicatorSv1.GetDestination&ReplicatorSv1.RemoveDestination&ReplicatorSv1.SetLoadIDs&ReplicatorSv1.GetItemLoadIDs&ReplicatorSv1.SetRateProfile&ReplicatorSv1.GetRateProfile&ReplicatorSv1.RemoveRateProfile&ReplicatorSv1.SetAccount&ReplicatorSv1.GetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.SetActionProfile&ReplicatorSv1.GetActionProfile&ReplicatorSv1.RemoveActionProfile,false -cgrates.org,ATTR_API_CDRSV2,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrsv212345,;20,,*req.APIMethods,*constant,CDRsV2.ProcessEvent&CDRsV2.StoreSessionCost,false -cgrates.org,ATTR_API_RATES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rPrf12345,;20,,*req.APIMethods,*constant,RateSv1.Ping&RateSv1.CostForEvent,false -cgrates.org,ATTR_API_CORE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:core12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&CoreSv1.Sleep,false -cgrates.org,ATTR_API_ACTIONS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:actPrf12345,;20,,*req.APIMethods,*constant,ActionSv1.Ping,false -cgrates.org,ATTR_API_ACCOUNTS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:accPrf12345,;20,,*req.APIMethods,*constant,AccountSv1.Ping,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,;false +cgrates.org,ATTR_1001_SIMPLEAUTH,,;20,,*req.EventName,*constant,*remove,;false +cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.com,;false +cgrates.org,ATTR_API_ATTR_FAKE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:12345,;20,,*req.APIMethods,*constant,,;false +cgrates.org,ATTR_API_ATTR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:attr12345,;20,,*req.APIMethods,*constant,AttributeSv1.Ping&AttributeSv1.GetAttributeForEvent&AttributeSv1.ProcessEvent,;false +cgrates.org,ATTR_API_CHRG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chrg12345,;20,,*req.APIMethods,*constant,ChargerSv1.Ping&ChargerSv1.GetChargersForEvent&ChargerSv1.ProcessEvent,;false +cgrates.org,ATTR_API_THR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:thr12345,;20,,*req.APIMethods,*constant,ThresholdSv1.Ping&ThresholdSv1.GetThresholdsForEvent&ThresholdSv1.ProcessEvent&ThresholdSv1.GetThreshold&ThresholdSv1.GetThresholdIDs,;false +cgrates.org,ATTR_API_SUP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sup12345,;20,,*req.APIMethods,*constant,RouteSv1.Ping&RouteSv1.GetRoutes&RouteSv1.GetRouteProfilesForEvent,;false +cgrates.org,ATTR_API_STAT_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:stat12345,;20,,*req.APIMethods,*constant,StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent&StatSv1.GetQueueIDs&StatSv1.GetQueueFloatMetrics,;false +cgrates.org,ATTR_API_RES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:res12345,;20,,*req.APIMethods,*constant,ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent&ResourceSv1.AuthorizeResources&ResourceSv1.AllocateResources&ResourceSv1.ReleaseResources&ResourceSv1.GetResource,;false +cgrates.org,ATTR_API_SES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:ses12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&SessionSv1.ProcessEvent&SessionSv1.GetCost&SessionSv1.STIRAuthenticate&SessionSv1.STIRIdentity,;false +cgrates.org,ATTR_API_RSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rsp12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&Responder.Shutdown&Responder.Ping,;false +cgrates.org,ATTR_API_CHC_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chc12345,;20,,*req.APIMethods,*constant,CacheSv1.Ping&CacheSv1.GetCacheStats&CacheSv1.LoadCache&CacheSv1.PrecacheStatus&CacheSv1.GetItemIDs&CacheSv1.HasItem&CacheSv1.GetItemExpiryTime&CacheSv1.ReloadCache&CacheSv1.RemoveItem&CacheSv1.RemoveItems&CacheSv1.Clear,;false +cgrates.org,ATTR_API_GRD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:grd12345,;20,,*req.APIMethods,*constant,GuardianSv1.Ping&GuardianSv1.RemoteLock&GuardianSv1.RemoteUnlock,;false +cgrates.org,ATTR_API_SCHD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sched12345,;20,,*req.APIMethods,*constant,SchedulerSv1.Ping,;false +cgrates.org,ATTR_API_CDRS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrs12345,;20,,*req.APIMethods,*constant,CDRsV1.Ping&CDRsV1.ProcessEvent&CDRsV1.GetCDRs&CDRsV1.GetCDRsCount&CDRsV1.ProcessCDR&CDRsV1.ProcessExternalCDR,;false +cgrates.org,ATTR_API_DSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:dsp12345,;20,,*req.APIMethods,*constant,DispatcherSv1.Ping&DispatcherSv1.GetProfilesForEvent,;false +cgrates.org,ATTR_API_PSE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:pse12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&AttributeSv1.ProcessEvent&Responder.Debit&ResourceSv1.AllocateResources&ChargerSv1.ProcessEvent&Responder.MaxDebit&SessionSv1.ProcessEvent&ResourceSv1.ReleaseResources,;false +cgrates.org,ATTR_API_CFG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cfg12345,;20,,*req.APIMethods,*constant,ConfigSv1.GetConfig&ConfigSv1.ReloadConfig,;false +cgrates.org,ATTR_API_APIER_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:apier12345,;20,,*req.APIMethods,*constant,APIerSv1.GetAttributeProfile&APIerSv1.SetAttributeProfile,;false +cgrates.org,ATTR_API_RALS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rals12345,;20,,*req.APIMethods,*constant,RALsV1.Ping&RALsV1.GetRatingPlansCost,;false +cgrates.org,ATTR_API_REPLICATOR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:repl12345,;20,,*req.APIMethods,*constant,ReplicatorSv1.Ping&ReplicatorSv1.GetAccount&ReplicatorSv1.SetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.GetRouteProfile&ReplicatorSv1.SetRouteProfile&ReplicatorSv1.RemoveRouteProfile&ReplicatorSv1.GetAttributeProfile&ReplicatorSv1.SetAttributeProfile&ReplicatorSv1.RemoveAttributeProfile&ReplicatorSv1.SetChargerProfile&ReplicatorSv1.GetChargerProfile&ReplicatorSv1.RemoveChargerProfile&ReplicatorSv1.GetDispatcherProfile&ReplicatorSv1.SetDispatcherProfile&ReplicatorSv1.RemoveDispatcherProfile&ReplicatorSv1.GetDispatcherHost&ReplicatorSv1.SetDispatcherHost&ReplicatorSv1.RemoveDispatcherHost&ReplicatorSv1.GetFilter&ReplicatorSv1.SetFilter&ReplicatorSv1.RemoveFilter&ReplicatorSv1.GetThreshold&ReplicatorSv1.SetThreshold&ReplicatorSv1.RemoveThreshold&ReplicatorSv1.GetStatQueue&ReplicatorSv1.SetStatQueue&ReplicatorSv1.RemoveStatQueue&ReplicatorSv1.GetResource&ReplicatorSv1.SetResource&ReplicatorSv1.RemoveResource&ReplicatorSv1.GetResourceProfile&ReplicatorSv1.SetResourceProfile&ReplicatorSv1.RemoveResourceProfile&ReplicatorSv1.GetStatQueueProfile&ReplicatorSv1.SetStatQueueProfile&ReplicatorSv1.RemoveStatQueueProfile&ReplicatorSv1.GetThresholdProfile&ReplicatorSv1.SetThresholdProfile&ReplicatorSv1.RemoveThresholdProfile&ReplicatorSv1.GetTiming&ReplicatorSv1.SetTiming&ReplicatorSv1.RemoveTiming&ReplicatorSv1.GetActionTriggers&ReplicatorSv1.SetActionTriggers&ReplicatorSv1.RemoveActionTriggers&ReplicatorSv1.SetSharedGroup&ReplicatorSv1.GetSharedGroup&ReplicatorSv1.RemoveSharedGroup&ReplicatorSv1.SetActions&ReplicatorSv1.GetActions&ReplicatorSv1.RemoveActions&ReplicatorSv1.SetActionPlan&ReplicatorSv1.GetActionPlan&ReplicatorSv1.RemoveActionPlan&ReplicatorSv1.SetAccountActionPlans&ReplicatorSv1.GetAccountActionPlans&ReplicatorSv1.RemAccountActionPlans&ReplicatorSv1.SetRatingPlan&ReplicatorSv1.GetRatingPlan&ReplicatorSv1.RemoveRatingPlan&ReplicatorSv1.SetRatingProfile&ReplicatorSv1.GetRatingProfile&ReplicatorSv1.RemoveRatingProfile&ReplicatorSv1.SetDestination&ReplicatorSv1.GetDestination&ReplicatorSv1.RemoveDestination&ReplicatorSv1.SetLoadIDs&ReplicatorSv1.GetItemLoadIDs&ReplicatorSv1.SetRateProfile&ReplicatorSv1.GetRateProfile&ReplicatorSv1.RemoveRateProfile&ReplicatorSv1.SetAccount&ReplicatorSv1.GetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.SetActionProfile&ReplicatorSv1.GetActionProfile&ReplicatorSv1.RemoveActionProfile,;false +cgrates.org,ATTR_API_CDRSV2,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrsv212345,;20,,*req.APIMethods,*constant,CDRsV2.ProcessEvent&CDRsV2.StoreSessionCost,;false +cgrates.org,ATTR_API_RATES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rPrf12345,;20,,*req.APIMethods,*constant,RateSv1.Ping&RateSv1.CostForEvent,;false +cgrates.org,ATTR_API_CORE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:core12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&CoreSv1.Sleep,;false +cgrates.org,ATTR_API_ACTIONS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:actPrf12345,;20,,*req.APIMethods,*constant,ActionSv1.Ping,;false +cgrates.org,ATTR_API_ACCOUNTS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:accPrf12345,;20,,*req.APIMethods,*constant,AccountSv1.Ping,;false diff --git a/data/tariffplans/dispatchers_gob/Attributes.csv b/data/tariffplans/dispatchers_gob/Attributes.csv index 59d423636..6077f1237 100644 --- a/data/tariffplans/dispatchers_gob/Attributes.csv +++ b/data/tariffplans/dispatchers_gob/Attributes.csv @@ -1,28 +1,28 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,false -cgrates.org,ATTR_1001_SIMPLEAUTH,,;20,,*req.EventName,*constant,*remove,false -cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.com,false -cgrates.org,ATTR_API_ATTR_FAKE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:12345,;20,,*req.APIMethods,*constant,,false -cgrates.org,ATTR_API_ATTR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:attr12345,;20,,*req.APIMethods,*constant,AttributeSv1.Ping&AttributeSv1.GetAttributeForEvent&AttributeSv1.ProcessEvent,false -cgrates.org,ATTR_API_CHRG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chrg12345,;20,,*req.APIMethods,*constant,ChargerSv1.Ping&ChargerSv1.GetChargersForEvent&ChargerSv1.ProcessEvent,false -cgrates.org,ATTR_API_THR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:thr12345,;20,,*req.APIMethods,*constant,ThresholdSv1.Ping&ThresholdSv1.GetThresholdsForEvent&ThresholdSv1.ProcessEvent&ThresholdSv1.GetThreshold&ThresholdSv1.GetThresholdIDs,false -cgrates.org,ATTR_API_SUP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sup12345,;20,,*req.APIMethods,*constant,RouteSv1.Ping&RouteSv1.GetRoutes&RouteSv1.GetRouteProfilesForEvent,false -cgrates.org,ATTR_API_STAT_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:stat12345,;20,,*req.APIMethods,*constant,StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent&StatSv1.GetQueueIDs&StatSv1.GetQueueFloatMetrics,false -cgrates.org,ATTR_API_RES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:res12345,;20,,*req.APIMethods,*constant,ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent&ResourceSv1.AuthorizeResources&ResourceSv1.AllocateResources&ResourceSv1.ReleaseResources&ResourceSv1.GetResource,false -cgrates.org,ATTR_API_SES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:ses12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&SessionSv1.ProcessEvent&SessionSv1.GetCost&SessionSv1.STIRAuthenticate&SessionSv1.STIRIdentity,false -cgrates.org,ATTR_API_RSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rsp12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&Responder.Shutdown&Responder.Ping,false -cgrates.org,ATTR_API_CHC_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chc12345,;20,,*req.APIMethods,*constant,CacheSv1.Ping&CacheSv1.GetCacheStats&CacheSv1.LoadCache&CacheSv1.PrecacheStatus&CacheSv1.GetItemIDs&CacheSv1.HasItem&CacheSv1.GetItemExpiryTime&CacheSv1.ReloadCache&CacheSv1.RemoveItem&CacheSv1.RemoveItems&CacheSv1.Clear,false -cgrates.org,ATTR_API_GRD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:grd12345,;20,,*req.APIMethods,*constant,GuardianSv1.Ping&GuardianSv1.RemoteLock&GuardianSv1.RemoteUnlock,false -cgrates.org,ATTR_API_SCHD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sched12345,;20,,*req.APIMethods,*constant,SchedulerSv1.Ping,false -cgrates.org,ATTR_API_CDRS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrs12345,;20,,*req.APIMethods,*constant,CDRsV1.Ping&CDRsV1.ProcessEvent&CDRsV1.GetCDRs&CDRsV1.GetCDRsCount&CDRsV1.ProcessCDR&CDRsV1.ProcessExternalCDR,false -cgrates.org,ATTR_API_DSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:dsp12345,;20,,*req.APIMethods,*constant,DispatcherSv1.Ping&DispatcherSv1.GetProfilesForEvent,false -cgrates.org,ATTR_API_PSE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:pse12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&AttributeSv1.ProcessEvent&Responder.Debit&ResourceSv1.AllocateResources&ChargerSv1.ProcessEvent&Responder.MaxDebit&SessionSv1.ProcessEvent&ResourceSv1.ReleaseResources,false -cgrates.org,ATTR_API_CFG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cfg12345,;20,,*req.APIMethods,*constant,ConfigSv1.GetConfig&ConfigSv1.ReloadConfig,false -cgrates.org,ATTR_API_APIER_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:apier12345,;20,,*req.APIMethods,*constant,APIerSv1.GetAttributeProfile&APIerSv1.SetAttributeProfile,false -cgrates.org,ATTR_API_RALS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rals12345,;20,,*req.APIMethods,*constant,RALsV1.Ping&RALsV1.GetRatingPlansCost,false -cgrates.org,ATTR_API_REPLICATOR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:repl12345,;20,,*req.APIMethods,*constant,ReplicatorSv1.Ping&ReplicatorSv1.GetAccount&ReplicatorSv1.SetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.GetRouteProfile&ReplicatorSv1.SetRouteProfile&ReplicatorSv1.RemoveRouteProfile&ReplicatorSv1.GetAttributeProfile&ReplicatorSv1.SetAttributeProfile&ReplicatorSv1.RemoveAttributeProfile&ReplicatorSv1.SetChargerProfile&ReplicatorSv1.GetChargerProfile&ReplicatorSv1.RemoveChargerProfile&ReplicatorSv1.GetDispatcherProfile&ReplicatorSv1.SetDispatcherProfile&ReplicatorSv1.RemoveDispatcherProfile&ReplicatorSv1.GetDispatcherHost&ReplicatorSv1.SetDispatcherHost&ReplicatorSv1.RemoveDispatcherHost&ReplicatorSv1.GetFilter&ReplicatorSv1.SetFilter&ReplicatorSv1.RemoveFilter&ReplicatorSv1.GetThreshold&ReplicatorSv1.SetThreshold&ReplicatorSv1.RemoveThreshold&ReplicatorSv1.GetStatQueue&ReplicatorSv1.SetStatQueue&ReplicatorSv1.RemoveStatQueue&ReplicatorSv1.GetResource&ReplicatorSv1.SetResource&ReplicatorSv1.RemoveResource&ReplicatorSv1.GetResourceProfile&ReplicatorSv1.SetResourceProfile&ReplicatorSv1.RemoveResourceProfile&ReplicatorSv1.GetStatQueueProfile&ReplicatorSv1.SetStatQueueProfile&ReplicatorSv1.RemoveStatQueueProfile&ReplicatorSv1.GetThresholdProfile&ReplicatorSv1.SetThresholdProfile&ReplicatorSv1.RemoveThresholdProfile&ReplicatorSv1.GetTiming&ReplicatorSv1.SetTiming&ReplicatorSv1.RemoveTiming&ReplicatorSv1.GetActionTriggers&ReplicatorSv1.SetActionTriggers&ReplicatorSv1.RemoveActionTriggers&ReplicatorSv1.SetSharedGroup&ReplicatorSv1.GetSharedGroup&ReplicatorSv1.RemoveSharedGroup&ReplicatorSv1.SetActions&ReplicatorSv1.GetActions&ReplicatorSv1.RemoveActions&ReplicatorSv1.SetActionPlan&ReplicatorSv1.GetActionPlan&ReplicatorSv1.RemoveActionPlan&ReplicatorSv1.SetAccountActionPlans&ReplicatorSv1.GetAccountActionPlans&ReplicatorSv1.RemAccountActionPlans&ReplicatorSv1.SetRatingPlan&ReplicatorSv1.GetRatingPlan&ReplicatorSv1.RemoveRatingPlan&ReplicatorSv1.SetRatingProfile&ReplicatorSv1.GetRatingProfile&ReplicatorSv1.RemoveRatingProfile&ReplicatorSv1.SetLoadIDs&ReplicatorSv1.GetItemLoadIDs&ReplicatorSv1.SetRateProfile&ReplicatorSv1.GetRateProfile&ReplicatorSv1.RemoveRateProfile,false -cgrates.org,ATTR_API_CDRSV2,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrsv212345,;20,,*req.APIMethods,*constant,CDRsV2.ProcessEvent&CDRsV2.StoreSessionCost,false -cgrates.org,ATTR_API_RATES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rPrf12345,;20,,*req.APIMethods,*constant,RateSv1.Ping,false -cgrates.org,ATTR_API_CORE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:core12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&CoreSv1.Sleep,false -cgrates.org,ATTR_API_ACTIONS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:actPrf12345,;20,,*req.APIMethods,*constant,ActionSv1.Ping,false -cgrates.org,ATTR_API_ACCOUNTS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:accPrf12345,;20,,*req.APIMethods,*constant,AccountSv1.Ping,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,;false +cgrates.org,ATTR_1001_SIMPLEAUTH,,;20,,*req.EventName,*constant,*remove,;false +cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.com,;false +cgrates.org,ATTR_API_ATTR_FAKE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:12345,;20,,*req.APIMethods,*constant,,;false +cgrates.org,ATTR_API_ATTR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:attr12345,;20,,*req.APIMethods,*constant,AttributeSv1.Ping&AttributeSv1.GetAttributeForEvent&AttributeSv1.ProcessEvent,;false +cgrates.org,ATTR_API_CHRG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chrg12345,;20,,*req.APIMethods,*constant,ChargerSv1.Ping&ChargerSv1.GetChargersForEvent&ChargerSv1.ProcessEvent,;false +cgrates.org,ATTR_API_THR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:thr12345,;20,,*req.APIMethods,*constant,ThresholdSv1.Ping&ThresholdSv1.GetThresholdsForEvent&ThresholdSv1.ProcessEvent&ThresholdSv1.GetThreshold&ThresholdSv1.GetThresholdIDs,;false +cgrates.org,ATTR_API_SUP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sup12345,;20,,*req.APIMethods,*constant,RouteSv1.Ping&RouteSv1.GetRoutes&RouteSv1.GetRouteProfilesForEvent,;false +cgrates.org,ATTR_API_STAT_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:stat12345,;20,,*req.APIMethods,*constant,StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent&StatSv1.GetQueueIDs&StatSv1.GetQueueFloatMetrics,;false +cgrates.org,ATTR_API_RES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:res12345,;20,,*req.APIMethods,*constant,ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent&ResourceSv1.AuthorizeResources&ResourceSv1.AllocateResources&ResourceSv1.ReleaseResources&ResourceSv1.GetResource,;false +cgrates.org,ATTR_API_SES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:ses12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&SessionSv1.ProcessEvent&SessionSv1.GetCost&SessionSv1.STIRAuthenticate&SessionSv1.STIRIdentity,;false +cgrates.org,ATTR_API_RSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rsp12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&Responder.Shutdown&Responder.Ping,;false +cgrates.org,ATTR_API_CHC_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:chc12345,;20,,*req.APIMethods,*constant,CacheSv1.Ping&CacheSv1.GetCacheStats&CacheSv1.LoadCache&CacheSv1.PrecacheStatus&CacheSv1.GetItemIDs&CacheSv1.HasItem&CacheSv1.GetItemExpiryTime&CacheSv1.ReloadCache&CacheSv1.RemoveItem&CacheSv1.RemoveItems&CacheSv1.Clear,;false +cgrates.org,ATTR_API_GRD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:grd12345,;20,,*req.APIMethods,*constant,GuardianSv1.Ping&GuardianSv1.RemoteLock&GuardianSv1.RemoteUnlock,;false +cgrates.org,ATTR_API_SCHD_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:sched12345,;20,,*req.APIMethods,*constant,SchedulerSv1.Ping,;false +cgrates.org,ATTR_API_CDRS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrs12345,;20,,*req.APIMethods,*constant,CDRsV1.Ping&CDRsV1.ProcessEvent&CDRsV1.GetCDRs&CDRsV1.GetCDRsCount&CDRsV1.ProcessCDR&CDRsV1.ProcessExternalCDR,;false +cgrates.org,ATTR_API_DSP_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:dsp12345,;20,,*req.APIMethods,*constant,DispatcherSv1.Ping&DispatcherSv1.GetProfilesForEvent,;false +cgrates.org,ATTR_API_PSE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:pse12345,;20,,*req.APIMethods,*constant,SessionSv1.Ping&SessionSv1.AuthorizeEvent&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSession&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.SyncSessions&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessMessage&SessionSv1.GetActiveSessions&SessionSv1.GetActiveSessionsCount&SessionSv1.ForceDisconnect&SessionSv1.GetPassiveSessions&SessionSv1.GetPassiveSessionsCount&SessionSv1.ReplicateSessions&SessionSv1.SetPassiveSession&AttributeSv1.ProcessEvent&Responder.Debit&ResourceSv1.AllocateResources&ChargerSv1.ProcessEvent&Responder.MaxDebit&SessionSv1.ProcessEvent&ResourceSv1.ReleaseResources,;false +cgrates.org,ATTR_API_CFG_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cfg12345,;20,,*req.APIMethods,*constant,ConfigSv1.GetConfig&ConfigSv1.ReloadConfig,;false +cgrates.org,ATTR_API_APIER_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:apier12345,;20,,*req.APIMethods,*constant,APIerSv1.GetAttributeProfile&APIerSv1.SetAttributeProfile,;false +cgrates.org,ATTR_API_RALS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rals12345,;20,,*req.APIMethods,*constant,RALsV1.Ping&RALsV1.GetRatingPlansCost,;false +cgrates.org,ATTR_API_REPLICATOR_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:repl12345,;20,,*req.APIMethods,*constant,ReplicatorSv1.Ping&ReplicatorSv1.GetAccount&ReplicatorSv1.SetAccount&ReplicatorSv1.RemoveAccount&ReplicatorSv1.GetRouteProfile&ReplicatorSv1.SetRouteProfile&ReplicatorSv1.RemoveRouteProfile&ReplicatorSv1.GetAttributeProfile&ReplicatorSv1.SetAttributeProfile&ReplicatorSv1.RemoveAttributeProfile&ReplicatorSv1.SetChargerProfile&ReplicatorSv1.GetChargerProfile&ReplicatorSv1.RemoveChargerProfile&ReplicatorSv1.GetDispatcherProfile&ReplicatorSv1.SetDispatcherProfile&ReplicatorSv1.RemoveDispatcherProfile&ReplicatorSv1.GetDispatcherHost&ReplicatorSv1.SetDispatcherHost&ReplicatorSv1.RemoveDispatcherHost&ReplicatorSv1.GetFilter&ReplicatorSv1.SetFilter&ReplicatorSv1.RemoveFilter&ReplicatorSv1.GetThreshold&ReplicatorSv1.SetThreshold&ReplicatorSv1.RemoveThreshold&ReplicatorSv1.GetStatQueue&ReplicatorSv1.SetStatQueue&ReplicatorSv1.RemoveStatQueue&ReplicatorSv1.GetResource&ReplicatorSv1.SetResource&ReplicatorSv1.RemoveResource&ReplicatorSv1.GetResourceProfile&ReplicatorSv1.SetResourceProfile&ReplicatorSv1.RemoveResourceProfile&ReplicatorSv1.GetStatQueueProfile&ReplicatorSv1.SetStatQueueProfile&ReplicatorSv1.RemoveStatQueueProfile&ReplicatorSv1.GetThresholdProfile&ReplicatorSv1.SetThresholdProfile&ReplicatorSv1.RemoveThresholdProfile&ReplicatorSv1.GetTiming&ReplicatorSv1.SetTiming&ReplicatorSv1.RemoveTiming&ReplicatorSv1.GetActionTriggers&ReplicatorSv1.SetActionTriggers&ReplicatorSv1.RemoveActionTriggers&ReplicatorSv1.SetSharedGroup&ReplicatorSv1.GetSharedGroup&ReplicatorSv1.RemoveSharedGroup&ReplicatorSv1.SetActions&ReplicatorSv1.GetActions&ReplicatorSv1.RemoveActions&ReplicatorSv1.SetActionPlan&ReplicatorSv1.GetActionPlan&ReplicatorSv1.RemoveActionPlan&ReplicatorSv1.SetAccountActionPlans&ReplicatorSv1.GetAccountActionPlans&ReplicatorSv1.RemAccountActionPlans&ReplicatorSv1.SetRatingPlan&ReplicatorSv1.GetRatingPlan&ReplicatorSv1.RemoveRatingPlan&ReplicatorSv1.SetRatingProfile&ReplicatorSv1.GetRatingProfile&ReplicatorSv1.RemoveRatingProfile&ReplicatorSv1.SetLoadIDs&ReplicatorSv1.GetItemLoadIDs&ReplicatorSv1.SetRateProfile&ReplicatorSv1.GetRateProfile&ReplicatorSv1.RemoveRateProfile,;false +cgrates.org,ATTR_API_CDRSV2,*string:~*opts.*context:*auth;*string:~*req.ApiKey:cdrsv212345,;20,,*req.APIMethods,*constant,CDRsV2.ProcessEvent&CDRsV2.StoreSessionCost,;false +cgrates.org,ATTR_API_RATES_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:rPrf12345,;20,,*req.APIMethods,*constant,RateSv1.Ping,;false +cgrates.org,ATTR_API_CORE_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:core12345,;20,,*req.APIMethods,*constant,CoreSv1.Status&CoreSv1.Ping&CoreSv1.Sleep,;false +cgrates.org,ATTR_API_ACTIONS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:actPrf12345,;20,,*req.APIMethods,*constant,ActionSv1.Ping,;false +cgrates.org,ATTR_API_ACCOUNTS_AUTH,*string:~*opts.*context:*auth;*string:~*req.ApiKey:accPrf12345,;20,,*req.APIMethods,*constant,AccountSv1.Ping,;false diff --git a/data/tariffplans/dnsagent/Attributes.csv b/data/tariffplans/dnsagent/Attributes.csv index 1dc0ff01a..59963e222 100644 --- a/data/tariffplans/dnsagent/Attributes.csv +++ b/data/tariffplans/dnsagent/Attributes.csv @@ -1,4 +1,4 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_NAPTR_ADDR,*string:~*req.E164Address:4986517174964,;20,,*req.NAPTRAddress,*constant,sip:\1@172.16.1.1.,false -cgrates.org,ATTR_NAPTR_SIP_URI,*string:~*req.Origin:cgrates,;20,,*req.SipURI,*variable,sip:cgrates@;~*req.Domanin,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_NAPTR_ADDR,*string:~*req.E164Address:4986517174964,;20,,*req.NAPTRAddress,*constant,sip:\1@172.16.1.1.,;false +cgrates.org,ATTR_NAPTR_SIP_URI,*string:~*req.Origin:cgrates,;20,,*req.SipURI,*variable,sip:cgrates@;~*req.Domanin,;false diff --git a/data/tariffplans/loadRateTest/Attributes.csv b/data/tariffplans/loadRateTest/Attributes.csv index 8d94b03a7..f61e2857a 100644 --- a/data/tariffplans/loadRateTest/Attributes.csv +++ b/data/tariffplans/loadRateTest/Attributes.csv @@ -1,10 +1,10 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_ACNT_1001,*string:~*opts.*context:*sessions;FLTR_ACCOUNT_1001,;10,,*req.OfficeGroup,*constant,Marketing,false -cgrates.org,ATTR_SUPPLIER1,*string:~*opts.*context:*chargers,;10,,*req.Subject,*constant,SUPPLIER1,false -cgrates.org,ATTR_PAYPAL,*string:~*opts.*context:*cdrs;*string:~*req.Subject:ANY2CNT,;10,,*req.PayPalAccount,*constant,paypal@cgrates.org,false -cgrates.org,ATTR_SUBJECT_CASE1,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost,;10,,*req.Subject,*constant,ANY2CNT,false -cgrates.org,ATTR_SUBJECT_CASE2,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost2,;10,,*req.Subject,*constant,SPECIAL_1002,false -cgrates.org,ATTR_SUBJECT_CASE3,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost3,;10,,*req.Subject,*constant,RP_RETAIL,false -cgrates.org,ATTR_SUBJECT_CASE4,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost4,;10,,*req.Subject,*constant,InvalidSubject,false -cgrates.org,ATTR_SUBJECT_CASE4,,;10,,*req.Category,*constant,Standard,false -cgrates.org,ATTR_VARIABLE,*string:~*req.EventName:VariableTest,;20,,*req.Category,*variable,~*req.ToR,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_ACNT_1001,*string:~*opts.*context:*sessions;FLTR_ACCOUNT_1001,;10,,*req.OfficeGroup,*constant,Marketing,;false +cgrates.org,ATTR_SUPPLIER1,*string:~*opts.*context:*chargers,;10,,*req.Subject,*constant,SUPPLIER1,;false +cgrates.org,ATTR_PAYPAL,*string:~*opts.*context:*cdrs;*string:~*req.Subject:ANY2CNT,;10,,*req.PayPalAccount,*constant,paypal@cgrates.org,;false +cgrates.org,ATTR_SUBJECT_CASE1,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost,;10,,*req.Subject,*constant,ANY2CNT,;false +cgrates.org,ATTR_SUBJECT_CASE2,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost2,;10,,*req.Subject,*constant,SPECIAL_1002,;false +cgrates.org,ATTR_SUBJECT_CASE3,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost3,;10,,*req.Subject,*constant,RP_RETAIL,;false +cgrates.org,ATTR_SUBJECT_CASE4,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost4,;10,,*req.Subject,*constant,InvalidSubject,;false +cgrates.org,ATTR_SUBJECT_CASE4,,;10,,*req.Category,*constant,Standard,;false +cgrates.org,ATTR_VARIABLE,*string:~*req.EventName:VariableTest,;20,,*req.Category,*variable,~*req.ToR,;false diff --git a/data/tariffplans/oldtutorial/Attributes.csv b/data/tariffplans/oldtutorial/Attributes.csv index 141789c29..aae8e9802 100644 --- a/data/tariffplans/oldtutorial/Attributes.csv +++ b/data/tariffplans/oldtutorial/Attributes.csv @@ -1,4 +1,4 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_1,*string:~*opts.*context:*sessions|*cdrs;*string:~*req.Account:1007,;10,,*req.Account,*constant,1001,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_1,*string:~*opts.*context:*sessions|*cdrs;*string:~*req.Account:1007,;10,,*req.Account,*constant,1001,;false cgrates.org,ATTR_1,,,,*req.Subject,*constant,1001, -cgrates.org,ATTR_PASS,*string:~*opts.*context:*sessions;*string:~*req.Account:1001,;10,,*req.PasswordFromAttributes,*constant,CGRateSPassword1,false \ No newline at end of file +cgrates.org,ATTR_PASS,*string:~*opts.*context:*sessions;*string:~*req.Account:1001,;10,,*req.PasswordFromAttributes,*constant,CGRateSPassword1,;false \ No newline at end of file diff --git a/data/tariffplans/precache/Attributes.csv b/data/tariffplans/precache/Attributes.csv index ef2c8103b..fd84076bd 100644 --- a/data/tariffplans/precache/Attributes.csv +++ b/data/tariffplans/precache/Attributes.csv @@ -1,3 +1,3 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_1,*string:~*opts.*context:*sessions|*cdrs;*string:~*req.Account:1007,;10,,*req.Account,*constant,1001,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_1,*string:~*opts.*context:*sessions|*cdrs;*string:~*req.Account:1007,;10,,*req.Account,*constant,1001,;false cgrates.org,ATTR_1,,,,*req.Subject,*constant,1001, diff --git a/data/tariffplans/sessions_discount_volume/routes1/Attributes.csv b/data/tariffplans/sessions_discount_volume/routes1/Attributes.csv index 92a7d7ea5..a00a29de1 100644 --- a/data/tariffplans/sessions_discount_volume/routes1/Attributes.csv +++ b/data/tariffplans/sessions_discount_volume/routes1/Attributes.csv @@ -1,5 +1,5 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers -cgrates.org,ATTR_ACCOUNTS,*string:~*req.Account:ACCOUNT1,,,*opts.*accountS,*constant,true,false +cgrates.org,ATTR_ACCOUNTS,*string:~*req.Account:ACCOUNT1,,,*opts.*accountS,*constant,true,;false -cgrates.org,ATTR_RATES,,;10,,*opts.*rateS,*constant,true,false \ No newline at end of file +cgrates.org,ATTR_RATES,,;10,,*opts.*rateS,*constant,true,;false \ No newline at end of file diff --git a/data/tariffplans/testit/Attributes.csv b/data/tariffplans/testit/Attributes.csv index 8d94b03a7..f61e2857a 100644 --- a/data/tariffplans/testit/Attributes.csv +++ b/data/tariffplans/testit/Attributes.csv @@ -1,10 +1,10 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_ACNT_1001,*string:~*opts.*context:*sessions;FLTR_ACCOUNT_1001,;10,,*req.OfficeGroup,*constant,Marketing,false -cgrates.org,ATTR_SUPPLIER1,*string:~*opts.*context:*chargers,;10,,*req.Subject,*constant,SUPPLIER1,false -cgrates.org,ATTR_PAYPAL,*string:~*opts.*context:*cdrs;*string:~*req.Subject:ANY2CNT,;10,,*req.PayPalAccount,*constant,paypal@cgrates.org,false -cgrates.org,ATTR_SUBJECT_CASE1,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost,;10,,*req.Subject,*constant,ANY2CNT,false -cgrates.org,ATTR_SUBJECT_CASE2,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost2,;10,,*req.Subject,*constant,SPECIAL_1002,false -cgrates.org,ATTR_SUBJECT_CASE3,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost3,;10,,*req.Subject,*constant,RP_RETAIL,false -cgrates.org,ATTR_SUBJECT_CASE4,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost4,;10,,*req.Subject,*constant,InvalidSubject,false -cgrates.org,ATTR_SUBJECT_CASE4,,;10,,*req.Category,*constant,Standard,false -cgrates.org,ATTR_VARIABLE,*string:~*req.EventName:VariableTest,;20,,*req.Category,*variable,~*req.ToR,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_ACNT_1001,*string:~*opts.*context:*sessions;FLTR_ACCOUNT_1001,;10,,*req.OfficeGroup,*constant,Marketing,;false +cgrates.org,ATTR_SUPPLIER1,*string:~*opts.*context:*chargers,;10,,*req.Subject,*constant,SUPPLIER1,;false +cgrates.org,ATTR_PAYPAL,*string:~*opts.*context:*cdrs;*string:~*req.Subject:ANY2CNT,;10,,*req.PayPalAccount,*constant,paypal@cgrates.org,;false +cgrates.org,ATTR_SUBJECT_CASE1,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost,;10,,*req.Subject,*constant,ANY2CNT,;false +cgrates.org,ATTR_SUBJECT_CASE2,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost2,;10,,*req.Subject,*constant,SPECIAL_1002,;false +cgrates.org,ATTR_SUBJECT_CASE3,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost3,;10,,*req.Subject,*constant,RP_RETAIL,;false +cgrates.org,ATTR_SUBJECT_CASE4,*string:~*opts.*context:*sessions;*string:~*req.OriginID:testSSv1ItProcessEventWithGetCost4,;10,,*req.Subject,*constant,InvalidSubject,;false +cgrates.org,ATTR_SUBJECT_CASE4,,;10,,*req.Category,*constant,Standard,;false +cgrates.org,ATTR_VARIABLE,*string:~*req.EventName:VariableTest,;20,,*req.Category,*variable,~*req.ToR,;false diff --git a/data/tariffplans/testtp/Attributes.csv b/data/tariffplans/testtp/Attributes.csv index 95e32dc91..7428c98ae 100644 --- a/data/tariffplans/testtp/Attributes.csv +++ b/data/tariffplans/testtp/Attributes.csv @@ -1,3 +1,3 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ALS1,*string:~*opts.*context:con1;FLTR_1,;20,*string:~*req.Field1:Initial1,*req.Field1,*constant,Sub1,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ALS1,*string:~*opts.*context:con1;FLTR_1,;20,*string:~*req.Field1:Initial1,*req.Field1,*constant,Sub1,;false cgrates.org,ALS1,,,*string:~*req.Field1:Initial2,*req.Field2,*constant,Sub2, diff --git a/data/tariffplans/tut_sip_redirect/Attributes.csv b/data/tariffplans/tut_sip_redirect/Attributes.csv index 55e7b7c79..3617f410c 100644 --- a/data/tariffplans/tut_sip_redirect/Attributes.csv +++ b/data/tariffplans/tut_sip_redirect/Attributes.csv @@ -1,2 +1,2 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_ROUTE1,*string:~*req.RunID:route1,;10,,*req.P-Charge-Info,*constant,<;sip:1002@route1.com;>,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_ROUTE1,*string:~*req.RunID:route1,;10,,*req.P-Charge-Info,*constant,<;sip:1002@route1.com;>,;false diff --git a/data/tariffplans/tutorial/Attributes.csv b/data/tariffplans/tutorial/Attributes.csv index b33ee0f3c..5cc717d56 100644 --- a/data/tariffplans/tutorial/Attributes.csv +++ b/data/tariffplans/tutorial/Attributes.csv @@ -1,26 +1,26 @@ -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,false -cgrates.org,ATTR_1002_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1002,;20,,*req.Password,*constant,CGRateS.org,false -cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.org,false -cgrates.org,ATTR_1001_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1001,;10,,*req.Password,*constant,CGRateS.org,false +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ATTR_1001_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1001,;20,,*req.Password,*constant,CGRateS.org,;false +cgrates.org,ATTR_1002_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1002,;20,,*req.Password,*constant,CGRateS.org,;false +cgrates.org,ATTR_1003_SIMPLEAUTH,*string:~*opts.*context:simpleauth;*string:~*req.Account:1003,;20,,*req.Password,*constant,CGRateS.org,;false +cgrates.org,ATTR_1001_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1001,;10,,*req.Password,*constant,CGRateS.org,;false cgrates.org,ATTR_1001_SESSIONAUTH,,,,*req.RequestType,*constant,*prepaid, cgrates.org,ATTR_1001_SESSIONAUTH,,,,*req.PaypalAccount,*constant,cgrates@paypal.com, cgrates.org,ATTR_1001_SESSIONAUTH,,,,*req.LCRProfile,*constant,premium_cli, -cgrates.org,ATTR_1002_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1002,;10,,*req.Password,*constant,CGRateS.org,false +cgrates.org,ATTR_1002_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1002,;10,,*req.Password,*constant,CGRateS.org,;false cgrates.org,ATTR_1002_SESSIONAUTH,,,,*req.RequestType,*constant,*postpaid, cgrates.org,ATTR_1002_SESSIONAUTH,,,,*req.PaypalAccount,*constant,cgrates@paypal.com, cgrates.org,ATTR_1002_SESSIONAUTH,,,,*req.LCRProfile,*constant,premium_cli, cgrates.org,ATTR_1002_SESSIONAUTH,,,,ResourceAllocation,*constant,"ResGroup1", -cgrates.org,ATTR_1003_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1003,;10,,*req.Password,*constant,CGRateS.org,false +cgrates.org,ATTR_1003_SESSIONAUTH,*string:~*opts.*context:*sessions;*string:~*req.Account:1003,;10,,*req.Password,*constant,CGRateS.org,;false cgrates.org,ATTR_1003_SESSIONAUTH,,,,*req.RequestType,*constant,*prepaid, cgrates.org,ATTR_1003_SESSIONAUTH,,,,*req.PaypalAccount,*constant,cgrates@paypal.com, cgrates.org,ATTR_1003_SESSIONAUTH,,,,*req.LCRProfile,*constant,premium_cli, -cgrates.org,ATTR_ACC_ALIAS,*string:~*req.SubscriberId:1006,;10,,*req.Account,*constant,1001,false +cgrates.org,ATTR_ACC_ALIAS,*string:~*req.SubscriberId:1006,;10,,*req.Account,*constant,1001,;false cgrates.org,ATTR_ACC_ALIAS,,,,*req.RequestType,*constant,*prepaid, -cgrates.com,ATTR_TNT_ALIAS,*string:~*req.SubscriberId:1006,;10,,*req.Account,*constant,1001,false +cgrates.com,ATTR_TNT_ALIAS,*string:~*req.SubscriberId:1006,;10,,*req.Account,*constant,1001,;false cgrates.com,ATTR_TNT_ALIAS,,,,*req.RequestType,*constant,*prepaid, cgrates.com,ATTR_TNT_ALIAS,,,,*tenant,*constant,cgrates.org, cgrates.com,ATTR_TNT_1001,*string:~*req.Account:1001,,,*tenant,*constant,cgrates.org, cgrates.com,ATTR_TNT_DISC,*string:~*req.Account:testDiamInitWithSessionDisconnect,,,*tenant,*constant,cgrates.org, -cgrates.com,ATTR_ACC_EMULATE_TERMINATE,*string:~*req.SubscriberId:testDiamItEmulateTerminate,;10,,*req.Account,*constant,testDiamItEmulateTerminate,false +cgrates.com,ATTR_ACC_EMULATE_TERMINATE,*string:~*req.SubscriberId:testDiamItEmulateTerminate,;10,,*req.Account,*constant,testDiamItEmulateTerminate,;false cgrates.com,ATTR_ACC_EMULATE_TERMINATE,,,,*req.RequestType,*constant,*prepaid, diff --git a/engine/attributes.go b/engine/attributes.go index 46286bb89..e2bba10d9 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -170,13 +170,17 @@ func (alS *AttributeS) processEvent(ctx *context.Context, tnt string, args *util if attrPrf, err = alS.attributeProfileForEvent(ctx, tnt, attrIDs, evNm, lastID, processedPrfNo, profileRuns, ignFilters); err != nil { return } + var blocker bool + if blocker, err = BlockerFromDynamics(ctx, attrPrf.Blockers, alS.fltrS, tnt, evNm); err != nil { + return + } rply = &AttrSProcessEventReply{ AlteredFields: []*FieldsAltered{{ MatchedProfileID: attrPrf.TenantIDInline(), Fields: []string{}, }}, CGREvent: args, - blocker: attrPrf.Blocker, + blocker: blocker, } rply.Tenant = tnt for _, attribute := range attrPrf.Attributes { diff --git a/engine/filterhelpers.go b/engine/filterhelpers.go index cd490cf98..64a4c4bab 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -123,3 +123,17 @@ func WeightFromDynamics(ctx *context.Context, dWs []*utils.DynamicWeight, } return 0.0, nil } + +// BlockerFromDynamics returns the value of the blocker specified by the first matching DynamicBlocker +func BlockerFromDynamics(ctx *context.Context, dBs []*utils.DynamicBlocker, + fltrS *FilterS, tnt string, ev utils.DataProvider) (blckr bool, err error) { + for _, dB := range dBs { + var pass bool + if pass, err = fltrS.Pass(ctx, tnt, dB.FilterIDs, ev); err != nil { + return + } else if pass { + return dB.Blocker, nil + } + } + return false, nil +} diff --git a/engine/libattributes.go b/engine/libattributes.go index f32d6d0a3..06b3ba18f 100644 --- a/engine/libattributes.go +++ b/engine/libattributes.go @@ -45,8 +45,9 @@ type AttributeProfile struct { ID string FilterIDs []string Attributes []*Attribute - Blocker bool // blocker flag to stop processing on multiple runs - Weights utils.DynamicWeights + Blockers utils.Blockers // Blockers flag to stop processing on multiple runs + //Blocker bool + Weights utils.DynamicWeights } // AttributeProfileWithAPIOpts is used in replicatorV1 for dispatcher @@ -99,8 +100,9 @@ type APIAttributeProfile struct { ID string FilterIDs []string Attributes []*ExternalAttribute - Blocker bool // blocker flag to stop processing on multiple runs - Weights utils.DynamicWeights + Blockers utils.Blockers + //Blocker bool // blocker flag to stop processing on multiple runs + Weights utils.DynamicWeights } type APIAttributeProfileWithAPIOpts struct { @@ -114,8 +116,8 @@ func NewAPIAttributeProfile(attr *AttributeProfile) (ext *APIAttributeProfile) { ID: attr.ID, FilterIDs: attr.FilterIDs, Attributes: make([]*ExternalAttribute, len(attr.Attributes)), - Blocker: attr.Blocker, Weights: attr.Weights, + Blockers: attr.Blockers, } for i, at := range attr.Attributes { ext.Attributes[i] = &ExternalAttribute{ @@ -153,7 +155,7 @@ func (ext *APIAttributeProfile) AsAttributeProfile() (attr *AttributeProfile, er attr.Tenant = ext.Tenant attr.ID = ext.ID attr.FilterIDs = ext.FilterIDs - attr.Blocker = ext.Blocker + attr.Blockers = ext.Blockers attr.Weights = ext.Weights return } @@ -198,8 +200,10 @@ func (ap *AttributeProfile) Set(path []string, val interface{}, newBranch bool, var valA []string valA, err = utils.IfaceAsStringSlice(val) ap.FilterIDs = append(ap.FilterIDs, valA...) - case utils.Blocker: - ap.Blocker, err = utils.IfaceAsBool(val) + case utils.BlockersField: + if val != utils.EmptyString { + ap.Blockers, err = utils.NewBlockersFromString(utils.IfaceAsString(val), utils.InfieldSep, utils.ANDSep) + } case utils.Weights: if val != utils.EmptyString { ap.Weights, err = utils.NewDynamicWeightsFromString(utils.IfaceAsString(val), utils.InfieldSep, utils.ANDSep) @@ -248,10 +252,12 @@ func (ap *AttributeProfile) Merge(v2 interface{}) { ap.Attributes = append(ap.Attributes, attr) } } - if vi.Blocker { - ap.Blocker = true + if vi.Blockers != nil { + ap.Blockers = append(ap.Blockers, vi.Blockers...) + } + if vi.Weights != nil { + ap.Weights = append(ap.Weights, vi.Weights...) } - ap.Weights = append(ap.Weights, vi.Weights...) } func (ap *AttributeProfile) String() string { return utils.ToJSON(ap) } @@ -286,8 +292,8 @@ func (ap *AttributeProfile) FieldAsInterface(fldPath []string) (_ interface{}, e return ap.ID, nil case utils.FilterIDs: return ap.FilterIDs, nil - case utils.Blocker: - return ap.Blocker, nil + case utils.BlockersField: + return ap.Blockers, nil case utils.Weights: return ap.Weights, nil case utils.Attributes: diff --git a/engine/libattributes_test.go b/engine/libattributes_test.go index d528af2fc..9f5c3fc14 100644 --- a/engine/libattributes_test.go +++ b/engine/libattributes_test.go @@ -245,7 +245,11 @@ func TestAttributeProfileSet(t *testing.T) { Tenant: "cgrates.org", ID: "ID", FilterIDs: []string{"fltr1", "*string:~*req.Account:1001"}, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Attributes: []*Attribute{{ Path: "*req.Account", Type: utils.MetaConstant, @@ -279,7 +283,7 @@ func TestAttributeProfileSet(t *testing.T) { if err := dp.Set([]string{utils.Weights}, ";10", false, utils.EmptyString); err != nil { t.Error(err) } - if err := dp.Set([]string{utils.Blocker}, true, false, utils.EmptyString); err != nil { + if err := dp.Set([]string{utils.BlockersField}, ";true", false, utils.EmptyString); err != nil { t.Error(err) } if err := dp.Set([]string{utils.Attributes, utils.Path}, "*req.Account", false, utils.EmptyString); err != nil { @@ -310,7 +314,11 @@ func TestAttributeProfileAsInterface(t *testing.T) { ID: "ID", FilterIDs: []string{"fltr1", "*string:~*req.Account:1001"}, Weights: make(utils.DynamicWeights, 1), - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Attributes: []*Attribute{{ Path: "*req.Account", Type: utils.MetaConstant, @@ -355,9 +363,9 @@ func TestAttributeProfileAsInterface(t *testing.T) { } else if exp := ap.Weights; !reflect.DeepEqual(exp, val) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp), utils.ToJSON(val)) } - if val, err := ap.FieldAsInterface([]string{utils.Blocker}); err != nil { + if val, err := ap.FieldAsInterface([]string{utils.BlockersField}); err != nil { t.Fatal(err) - } else if exp := ap.Blocker; !reflect.DeepEqual(exp, val) { + } else if exp := ap.Blockers; !reflect.DeepEqual(exp, val) { t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp), utils.ToJSON(val)) } if val, err := ap.FieldAsInterface([]string{utils.Attributes}); err != nil { @@ -442,7 +450,11 @@ func TestAttributeProfileMerge(t *testing.T) { ID: "ID", FilterIDs: []string{"fltr1", "*string:~*req.Account:1001"}, Weights: make(utils.DynamicWeights, 1), - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Attributes: []*Attribute{{ Path: "*req.Account", Type: utils.MetaConstant, @@ -458,7 +470,11 @@ func TestAttributeProfileMerge(t *testing.T) { ID: "ID", FilterIDs: []string{"fltr1", "*string:~*req.Account:1001"}, Weights: make(utils.DynamicWeights, 1), - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Attributes: []*Attribute{{ Path: "*req.Account", Type: utils.MetaConstant, diff --git a/engine/libtest.go b/engine/libtest.go index 69b45a8de..66ef5ff25 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -120,9 +120,9 @@ cgrates.org,RoutePrf1,,,,,route1,FLTR_DST_DE,Account2,RPL_3,ResGroup3,Stat2,;10, cgrates.org,RoutePrf1,,,,,route1,,,,ResGroup4,Stat3,;10,, ` AttributesCSVContent = ` -#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blocker -cgrates.org,ALS1,*string:~*req.Account:1001;*string:~*opts.*context:con1,;20,*string:~*req.Field1:Initial,*req.Field1,*variable,Sub1,true -cgrates.org,ALS1,*string:~*opts.*context:con2|con3,,,*req.Field2,*variable,Sub2,true +#Tenant,ID,FilterIDs,Weights,AttributeFilterIDs,Path,Type,Value,Blockers +cgrates.org,ALS1,*string:~*req.Account:1001;*string:~*opts.*context:con1,;20,*string:~*req.Field1:Initial,*req.Field1,*variable,Sub1,;true +cgrates.org,ALS1,*string:~*opts.*context:con2|con3,,,*req.Field2,*variable,Sub2,;true ` ChargersCSVContent = ` #Tenant,ID,FilterIDs,Weights,RunID,AttributeIDs diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 0120110d1..3c622b3f6 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -410,8 +410,8 @@ func TestLoadAttributeProfiles(t *testing.T) { Value: "Sub2", }, }, - Blocker: true, - Weights: ";20", + Blockers: ";true", + Weights: ";20", }, } @@ -427,8 +427,8 @@ func TestLoadAttributeProfiles(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].FilterIDs, csvr.attributeProfiles[resKey].FilterIDs) } else if !reflect.DeepEqual(eAttrProfiles[resKey].Attributes, csvr.attributeProfiles[resKey].Attributes) { t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].Attributes, csvr.attributeProfiles[resKey].Attributes) - } else if !reflect.DeepEqual(eAttrProfiles[resKey].Blocker, csvr.attributeProfiles[resKey].Blocker) { - t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].Blocker, csvr.attributeProfiles[resKey].Blocker) + } else if !reflect.DeepEqual(eAttrProfiles[resKey].Blockers, csvr.attributeProfiles[resKey].Blockers) { + t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].Blockers, csvr.attributeProfiles[resKey].Blockers) } } diff --git a/engine/model_helpers.go b/engine/model_helpers.go index bc22045c3..ddb70db54 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1072,12 +1072,14 @@ func (tps AttributeMdls) AsTPAttributes() (result []*utils.TPAttributeProfile) { th, found := mst[tenID] if !found { th = &utils.TPAttributeProfile{ - TPid: tp.Tpid, - Tenant: tp.Tenant, - ID: tp.ID, - Blocker: tp.Blocker, + TPid: tp.Tpid, + Tenant: tp.Tenant, + ID: tp.ID, } } + if tp.Blockers != utils.EmptyString { + th.Blockers = tp.Blockers + } if tp.Weights != utils.EmptyString { th.Weights = tp.Weights } @@ -1122,13 +1124,15 @@ func APItoModelTPAttribute(ap *utils.TPAttributeProfile) (mdls AttributeMdls) { ID: ap.ID, } if i == 0 { - mdl.Blocker = ap.Blocker for i, val := range ap.FilterIDs { if i != 0 { mdl.FilterIDs += utils.InfieldSep } mdl.FilterIDs += val } + if ap.Blockers != utils.EmptyString { + mdl.Blockers = ap.Blockers + } if ap.Weights != utils.EmptyString { mdl.Weights = ap.Weights } @@ -1147,10 +1151,14 @@ func APItoAttributeProfile(tpAttr *utils.TPAttributeProfile, timezone string) (a attrPrf = &AttributeProfile{ Tenant: tpAttr.Tenant, ID: tpAttr.ID, - Blocker: tpAttr.Blocker, FilterIDs: make([]string, len(tpAttr.FilterIDs)), Attributes: make([]*Attribute, len(tpAttr.Attributes)), } + if tpAttr.Blockers != utils.EmptyString { + if attrPrf.Blockers, err = utils.NewBlockersFromString(tpAttr.Blockers, utils.InfieldSep, utils.ANDSep); err != nil { + return + } + } if tpAttr.Weights != utils.EmptyString { if attrPrf.Weights, err = utils.NewDynamicWeightsFromString(tpAttr.Weights, utils.InfieldSep, utils.ANDSep); err != nil { return @@ -1184,7 +1192,7 @@ func AttributeProfileToAPI(attrPrf *AttributeProfile) (tpAttr *utils.TPAttribute ID: attrPrf.ID, FilterIDs: make([]string, len(attrPrf.FilterIDs)), Attributes: make([]*utils.TPAttribute, len(attrPrf.Attributes)), - Blocker: attrPrf.Blocker, + Blockers: attrPrf.Blockers.String(utils.InfieldSep, utils.ANDSep), Weights: attrPrf.Weights.String(utils.InfieldSep, utils.ANDSep), } for i, fli := range attrPrf.FilterIDs { diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index d74f577ae..17407ccdb 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -1215,7 +1215,8 @@ func TestCsvDumpForAttributeModels(t *testing.T) { Value: "Al2", }, }, - Weights: ";20", + Blockers: ";true", + Weights: ";20", } expected := AttributeMdls{ &AttributeMdl{ @@ -1225,6 +1226,7 @@ func TestCsvDumpForAttributeModels(t *testing.T) { FilterIDs: "FLTR_ACNT_dan;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;*string:~*opts.*context:con1", Path: utils.MetaReq + utils.NestingSep + "FL1", Value: "Al1", + Blockers: ";true", Weights: ";20", }, &AttributeMdl{ @@ -1239,10 +1241,10 @@ func TestCsvDumpForAttributeModels(t *testing.T) { if !reflect.DeepEqual(expected, rcv) { t.Errorf("Expecting : %+v,\n received: %+v", utils.ToJSON(expected), utils.ToJSON(rcv)) } - expRecord := []string{"cgrates.org", "ALS1", "FLTR_ACNT_dan;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;*string:~*opts.*context:con1", ";20", "", "*req.FL1", "", "Al1", "false"} + expRecord := []string{"cgrates.org", "ALS1", "FLTR_ACNT_dan;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;*string:~*opts.*context:con1", ";20", "", "*req.FL1", "", "Al1", ";true"} for i, model := range rcv { if i == 1 { - expRecord = []string{"cgrates.org", "ALS1", "", "", "", "*req.FL2", "", "Al2", "false"} + expRecord = []string{"cgrates.org", "ALS1", "", "", "", "*req.FL2", "", "Al2", ""} } if csvRecordRcv, _ := CsvDump(model); !reflect.DeepEqual(expRecord, csvRecordRcv) { t.Errorf("Expecting : %+v, received: %+v", utils.ToJSON(expRecord), utils.ToJSON(csvRecordRcv)) diff --git a/engine/models.go b/engine/models.go index 42f420182..ed0e68572 100644 --- a/engine/models.go +++ b/engine/models.go @@ -226,7 +226,7 @@ type AttributeMdl struct { Path string `index:"5" re:""` Type string `index:"6" re:""` Value string `index:"7" re:""` - Blocker bool `index:"8" re:""` + Blockers string `index:"8" re:""` CreatedAt time.Time } diff --git a/engine/z_attributes_test.go b/engine/z_attributes_test.go index 560ad10e0..9f7bf3078 100644 --- a/engine/z_attributes_test.go +++ b/engine/z_attributes_test.go @@ -270,7 +270,11 @@ func TestAttributesV1GetAttributeForEventErr(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -293,7 +297,11 @@ func TestAttributesV1GetAttributeForEventErr(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -1193,7 +1201,11 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { Value: config.NewRSRParsersMustCompile("Value2", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -1291,7 +1303,11 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { Value: config.NewRSRParsersMustCompile("Value1", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1400,7 +1416,11 @@ func TestAttributeProcessValue(t *testing.T) { Value: config.NewRSRParsersMustCompile("~*req.Field1", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1551,7 +1571,11 @@ func TestAttributeProcessEventConstant(t *testing.T) { Value: config.NewRSRParsersMustCompile("ConstVal", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1627,7 +1651,11 @@ func TestAttributeProcessEventVariable(t *testing.T) { Value: config.NewRSRParsersMustCompile("~*req.TheField", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1710,7 +1738,11 @@ func TestAttributeProcessEventComposed(t *testing.T) { Value: config.NewRSRParsersMustCompile("~*req.TheField", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1783,7 +1815,11 @@ func TestAttributeProcessEventSum(t *testing.T) { Value: config.NewRSRParsersMustCompile("10;~*req.NumField;20", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1858,7 +1894,11 @@ func TestAttributeProcessEventUsageDifference(t *testing.T) { Value: config.NewRSRParsersMustCompile("~*req.UnixTimeStamp;~*req.UnixTimeStamp2", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -1935,7 +1975,11 @@ func TestAttributeProcessEventValueExponent(t *testing.T) { Value: config.NewRSRParsersMustCompile("~*req.Multiplier;~*req.Pow", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -2016,7 +2060,11 @@ func BenchmarkAttributeProcessEventConstant(b *testing.B) { Value: config.NewRSRParsersMustCompile("ConstVal", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -2073,7 +2121,11 @@ func BenchmarkAttributeProcessEventVariable(b *testing.B) { Value: config.NewRSRParsersMustCompile("~*req.Field1", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -3636,7 +3688,11 @@ func TestAttributesV1ProcessEvent(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3659,7 +3715,11 @@ func TestAttributesV1ProcessEvent(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3750,7 +3810,11 @@ func TestAttributesV1ProcessEventErrorMetaSum(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3773,7 +3837,11 @@ func TestAttributesV1ProcessEventErrorMetaSum(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3837,7 +3905,11 @@ func TestAttributesV1ProcessEventErrorMetaDifference(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3860,7 +3932,11 @@ func TestAttributesV1ProcessEventErrorMetaDifference(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3925,7 +4001,11 @@ func TestAttributesV1ProcessEventErrorMetaValueExponent(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -3948,7 +4028,11 @@ func TestAttributesV1ProcessEventErrorMetaValueExponent(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4553,7 +4637,11 @@ func TestAttributesV1GetAttributeForEvent(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4576,7 +4664,11 @@ func TestAttributesV1GetAttributeForEvent(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4622,6 +4714,11 @@ func TestAttributesV1GetAttributeForEvent(t *testing.T) { Value: ".co.uk", }, }, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4669,7 +4766,11 @@ func TestAttributesV1GetAttributeForEventErrorBoolOpts(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4692,7 +4793,11 @@ func TestAttributesV1GetAttributeForEventErrorBoolOpts(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4757,7 +4862,11 @@ func TestAttributesV1GetAttributeForEventErrorNil(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4780,7 +4889,11 @@ func TestAttributesV1GetAttributeForEventErrorNil(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4834,7 +4947,11 @@ func TestAttributesV1GetAttributeForEventErrOptsI(t *testing.T) { Value: config.NewRSRParsersMustCompile(".co.uk", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -4857,7 +4974,11 @@ func TestAttributesV1GetAttributeForEventErrOptsI(t *testing.T) { Value: config.NewRSRParsersMustCompile("CGRATES.ORG", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, diff --git a/engine/z_filterindexer_test.go b/engine/z_filterindexer_test.go index 69b21d9cb..2d2cbde86 100644 --- a/engine/z_filterindexer_test.go +++ b/engine/z_filterindexer_test.go @@ -45,7 +45,11 @@ func TestFilterIndexesCheckingDynamicPathToNotIndex(t *testing.T) { Value: config.NewRSRParsersMustCompile("Sub1", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -64,7 +68,11 @@ func TestFilterIndexesCheckingDynamicPathToNotIndex(t *testing.T) { Value: config.NewRSRParsersMustCompile("admin", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -83,7 +91,11 @@ func TestFilterIndexesCheckingDynamicPathToNotIndex(t *testing.T) { Value: config.NewRSRParsersMustCompile("*rated", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, @@ -102,7 +114,11 @@ func TestFilterIndexesCheckingDynamicPathToNotIndex(t *testing.T) { Value: config.NewRSRParsersMustCompile("203", utils.InfieldSep), }, }, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, diff --git a/general_tests/attributes_it_test.go b/general_tests/attributes_it_test.go index 4a4f6bf6d..bfea1abc2 100644 --- a/general_tests/attributes_it_test.go +++ b/general_tests/attributes_it_test.go @@ -189,7 +189,11 @@ func testAttributeSProcessEventWithAccount(t *testing.T) { Value: "10", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -262,7 +266,11 @@ func testAttributeSProcessEventWithAccountFull(t *testing.T) { Value: "~*accounts.1001", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -377,7 +385,11 @@ func testAttributeSProcessEventWithStat(t *testing.T) { Value: "~*stats.Stat_1.*acd", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -451,7 +463,11 @@ func testAttributeSProcessEventWithStatFull(t *testing.T) { Value: "~*stats.Stat_1", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -592,7 +608,11 @@ func testAttributeSProcessEventWithResource(t *testing.T) { Value: "~*resources.ResTest.TotalUsage", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -670,7 +690,11 @@ func testAttributeSProcessEventWithResourceFull(t *testing.T) { Value: "~*resources.ResTest", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -754,7 +778,11 @@ func testAttributeSProcessEventWithLibPhoneNumber(t *testing.T) { Value: "~*libphonenumber.<~*req.Destination>.Carrier", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -839,7 +867,11 @@ func testAttributeSProcessEventWithLibPhoneNumberComposed(t *testing.T) { Value: "~*libphonenumber.<~*req.Destination>.CountryCode", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, @@ -919,7 +951,11 @@ func testAttributeSProcessEventWithLibPhoneNumberFull(t *testing.T) { Value: "~*libphonenumber.<~*req.Destination>", }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10, diff --git a/general_tests/doubleremove_it_test.go b/general_tests/doubleremove_it_test.go index bb23af513..baea777d6 100644 --- a/general_tests/doubleremove_it_test.go +++ b/general_tests/doubleremove_it_test.go @@ -329,7 +329,11 @@ func testdoubleRemoveAttributeProfile(t *testing.T) { Tenant: doubleRemoveTenant, ID: "ATTR_PROFILE", FilterIDs: []string{"*string:~*req.Account:1001"}, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Attributes: []*engine.ExternalAttribute{ { Path: "*req.Destination", diff --git a/general_tests/export_it_test.go b/general_tests/export_it_test.go index df2e7ea30..9466c3fe3 100644 --- a/general_tests/export_it_test.go +++ b/general_tests/export_it_test.go @@ -170,7 +170,11 @@ func testExpVerifyAttributes(t *testing.T) { Value: config.NewRSRParsersMustCompile("Marketing", utils.InfieldSep), }, }, - Blocker: false, + Blockers: utils.Blockers{ + { + Blocker: false, + }, + }, Weights: utils.DynamicWeights{ { Weight: 10.0, diff --git a/loaders/loader_it_test.go b/loaders/loader_it_test.go index ad79507c2..465e89c1d 100644 --- a/loaders/loader_it_test.go +++ b/loaders/loader_it_test.go @@ -241,7 +241,11 @@ func testLoaderCheckAttributes(t *testing.T) { Type: utils.MetaVariable, Value: "Sub2", }}, - Blocker: true, + Blockers: utils.Blockers{ + { + Blocker: true, + }, + }, Weights: utils.DynamicWeights{ { Weight: 20, diff --git a/migrator/attributes.go b/migrator/attributes.go index f16fca9e8..d009404d3 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -535,9 +535,10 @@ func (v6AttrPrf v6AttributeProfile) AsAttributeProfile() (attrPrf *engine.Attrib Tenant: v6AttrPrf.Tenant, ID: v6AttrPrf.ID, FilterIDs: v6AttrPrf.FilterIDs, - Blocker: v6AttrPrf.Blocker, Attributes: make([]*engine.Attribute, len(v6AttrPrf.Attributes)), } + attrPrf.Blockers = make(utils.Blockers, 1) + attrPrf.Blockers[0].Blocker = v6AttrPrf.Blocker attrPrf.Weights = make(utils.DynamicWeights, 1) attrPrf.Weights[0].Weight = v6AttrPrf.Weight if strings.HasSuffix(fltr, utils.PipeSep) { diff --git a/utils/apitpdata.go b/utils/apitpdata.go index a179ae4c8..266a40cd6 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -319,7 +319,7 @@ type TPAttributeProfile struct { ID string FilterIDs []string Attributes []*TPAttribute - Blocker bool + Blockers string Weights string } diff --git a/utils/blockers.go b/utils/blockers.go index 4c68e65b5..9643fad58 100644 --- a/utils/blockers.go +++ b/utils/blockers.go @@ -52,7 +52,7 @@ func NewBlockersFromString(value, blkSep, fltrSep string) (blkrs Blockers, err e return } -// String +// String will set the Blockers as a string pattern func (blkrs Blockers) String(blkSep, fltrSep string) (value string) { if len(blkrs) == 0 { return @@ -69,9 +69,10 @@ type DynamicBlocker struct { Blocker bool } +// String will set the DynamicBlocker as a string pattern func (blckr DynamicBlocker) String(blkSep, fltrSep string) (out string) { blocker := "false" - if blckr.Blocker == true { + if blckr.Blocker { blocker = "true" } return strings.Join(blckr.FilterIDs, fltrSep) + blkSep + blocker diff --git a/utils/consts.go b/utils/consts.go index 69fad7c9f..f944155e4 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -483,6 +483,7 @@ const ( RatingSubject = "RatingSubject" Categories = "Categories" Blocker = "Blocker" + BlockersField = "Blockers" Params = "Params" StartTime = "StartTime" AccountSummary = "AccountSummary"