diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index 7c87b31c1..896b658f8 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -154,14 +154,16 @@ func testV1STSGetStats(t *testing.T) { } var metrics map[string]string expectedMetrics := map[string]string{ - utils.MetaASR: utils.NOT_AVAILABLE, - utils.MetaACD: utils.NOT_AVAILABLE, - utils.MetaTCC: utils.NOT_AVAILABLE, - utils.MetaTCD: utils.NOT_AVAILABLE, - utils.MetaACC: utils.NOT_AVAILABLE, - utils.MetaPDD: utils.NOT_AVAILABLE, + utils.MetaASR: utils.NOT_AVAILABLE, + utils.MetaACD: utils.NOT_AVAILABLE, + utils.MetaTCC: utils.NOT_AVAILABLE, + utils.MetaTCD: utils.NOT_AVAILABLE, + utils.MetaACC: utils.NOT_AVAILABLE, + utils.MetaPDD: utils.NOT_AVAILABLE, + utils.MetaSum: utils.NOT_AVAILABLE, + utils.MetaAverage: utils.NOT_AVAILABLE, } - if err := stsV1Rpc.Call(utils.StatSv1GetGetQueueStringMetrics, + if err := stsV1Rpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { @@ -187,19 +189,22 @@ func testV1STSProcessEvent(t *testing.T) { } //process with one event (should be N/A becaus MinItems is 2) expectedMetrics := map[string]string{ - utils.MetaASR: utils.NOT_AVAILABLE, - utils.MetaACD: utils.NOT_AVAILABLE, - utils.MetaTCC: utils.NOT_AVAILABLE, - utils.MetaTCD: utils.NOT_AVAILABLE, - utils.MetaACC: utils.NOT_AVAILABLE, - utils.MetaPDD: utils.NOT_AVAILABLE, + utils.MetaASR: utils.NOT_AVAILABLE, + utils.MetaACD: utils.NOT_AVAILABLE, + utils.MetaTCC: utils.NOT_AVAILABLE, + utils.MetaTCD: utils.NOT_AVAILABLE, + utils.MetaACC: utils.NOT_AVAILABLE, + utils.MetaPDD: utils.NOT_AVAILABLE, + utils.MetaSum: utils.NOT_AVAILABLE, + utils.MetaAverage: utils.NOT_AVAILABLE, } var metrics map[string]string - if err := stsV1Rpc.Call(utils.StatSv1GetGetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics); err != nil { + if err := stsV1Rpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics) } + ev2 := utils.CGREvent{ Tenant: "cgrates.org", ID: "event2", @@ -225,23 +230,26 @@ func testV1STSProcessEvent(t *testing.T) { t.Errorf("received reply: %s", reply) } expectedMetrics2 := map[string]string{ - utils.MetaASR: "66.66667%", - utils.MetaACD: "1m30s", - utils.MetaACC: "61.5", - utils.MetaTCD: "3m0s", - utils.MetaTCC: "123", - utils.MetaPDD: "4s", + utils.MetaASR: "66.66667%", + utils.MetaACD: "1m30s", + utils.MetaACC: "61.5", + utils.MetaTCD: "3m0s", + utils.MetaTCC: "123", + utils.MetaPDD: "4s", + utils.MetaSum: "0", + utils.MetaAverage: utils.NOT_AVAILABLE, } var metrics2 map[string]string - if err := stsV1Rpc.Call(utils.StatSv1GetGetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics2); err != nil { + if err := stsV1Rpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics2); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics2, metrics2) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics2, metrics2) } + } func testV1STSGetStatsAfterRestart(t *testing.T) { - time.Sleep(time.Second) + time.Sleep(1 * time.Second) if _, err := engine.StopStartEngine(stsV1CfgPath, statsDelay); err != nil { t.Fatal(err) } @@ -250,17 +258,21 @@ func testV1STSGetStatsAfterRestart(t *testing.T) { if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } + time.Sleep(2 * time.Second) + //get stats metrics after restart expectedMetrics2 := map[string]string{ - utils.MetaASR: "66.66667%", - utils.MetaACD: "1m30s", - utils.MetaACC: "61.5", - utils.MetaTCD: "3m0s", - utils.MetaTCC: "123", - utils.MetaPDD: "4s", + utils.MetaASR: "66.66667%", + utils.MetaACD: "1m30s", + utils.MetaACC: "61.5", + utils.MetaTCD: "3m0s", + utils.MetaTCC: "123", + utils.MetaPDD: "4s", + utils.MetaSum: "0", + utils.MetaAverage: utils.NOT_AVAILABLE, } var metrics2 map[string]string - if err := stsV1Rpc.Call(utils.StatSv1GetGetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics2); err != nil { + if err := stsV1Rpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics2); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics2, metrics2) { t.Errorf("After restat expecting: %+v, received reply: %s", expectedMetrics2, metrics2) @@ -422,7 +434,7 @@ func BenchmarkSTSV1SetEvent(b *testing.B) { func BenchmarkSTSV1GetQueueStringMetrics(b *testing.B) { for i := 0; i < b.N; i++ { var metrics map[string]string - if err := stsV1Rpc.Call(utils.StatSv1GetGetQueueStringMetrics, + if err := stsV1Rpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantID{Tenant: "cgrates.org", ID: "STATS_1"}, &metrics); err != nil { b.Error(err) diff --git a/data/tariffplans/tutorial/Filters.csv b/data/tariffplans/tutorial/Filters.csv index 7e5170b32..d60db17b3 100644 --- a/data/tariffplans/tutorial/Filters.csv +++ b/data/tariffplans/tutorial/Filters.csv @@ -11,6 +11,7 @@ cgrates.org,FLTR_ACNT_BALANCE_1,*string,EventType,BalanceUpdate, cgrates.org,FLTR_ACNT_BALANCE_1,*gte,Units,10.0, cgrates.org,FLTR_ACNT_EXPIRED,*string,Account,1001;1002,2014-07-29T15:00:00Z cgrates.org,FLTR_ACNT_EXPIRED,*gte,ExpiryTime,*now, +cgrates.org,FLTR_STATS_1,*string,Account,1001, cgrates.org,FLTR_STATS_1,*string,EventType,StatUpdate,2014-07-29T15:00:00Z cgrates.org,FLTR_STATS_1,*lt,ASR,40.0, cgrates.org,FLTR_STATS_1,*lt,ACD,3m, diff --git a/data/tariffplans/tutorial/Stats.csv b/data/tariffplans/tutorial/Stats.csv index 27cf7557a..67356e3b6 100644 --- a/data/tariffplans/tutorial/Stats.csv +++ b/data/tariffplans/tutorial/Stats.csv @@ -1,2 +1,3 @@ #Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],QueueLength[4],TTL[5],Metrics[6],MetricParams[7],Blocker[8],Stored[9],Weight[10],MinItems[11],Thresholds[12] cgrates.org,Stats1,FLTR_STS1,2014-07-29T15:00:00Z,100,1s,*asr;*acc;*tcc;*acd;*tcd;*pdd,,true,true,20,2,THRESH1;THRESH2 +cgrates.org,Stats1,FLTR_STS1,2014-07-29T15:00:00Z,100,1s,*sum;*average,Value,true,true,20,2,THRESH1;THRESH2 diff --git a/engine/filterhelpers.go b/engine/filterhelpers.go index 765cddcb9..3bcdfb12c 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -70,6 +70,7 @@ func matchingItemIDsForEvent(ev map[string]interface{}, stringFldIDs, prefixFldI dbItemIDs, err = dm.MatchFilterIndex(dbIdxKey, filterIndexTypes[i], fldName, val) if err != nil { if err == utils.ErrNotFound { + err = nil continue } return nil, err @@ -83,5 +84,8 @@ func matchingItemIDsForEvent(ev map[string]interface{}, stringFldIDs, prefixFldI } } } + if len(itemIDs) == 0 { + return nil, utils.ErrNotFound + } return } diff --git a/utils/consts.go b/utils/consts.go index 8e4acfe00..0bf50fe3b 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -580,9 +580,9 @@ const ( //StatS APIs const ( - StatSv1ProcessEvent = "StatSv1.ProcessEvent" - StatSv1GetQueueIDs = "StatSv1.GetQueueIDs" - StatSv1GetGetQueueStringMetrics = "StatSv1.GetQueueStringMetrics" + StatSv1ProcessEvent = "StatSv1.ProcessEvent" + StatSv1GetQueueIDs = "StatSv1.GetQueueIDs" + StatSv1GetQueueStringMetrics = "StatSv1.GetQueueStringMetrics" ) //ResourceS APIs @@ -712,8 +712,8 @@ const ( StatFilterRevIndexes = "sfr_" ThresholdFilterIndexes = "tfi_" ThresholdFilterRevIndexes = "tfr_" - SupplierFilterIndexes = "sfi_" - SupplierFilterRevIndexes = "sfr_" + SupplierFilterIndexes = "spi_" + SupplierFilterRevIndexes = "spr_" AttributeFilterIndexes = "afi_" AttributeFilterRevIndexes = "afr_" )