diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index d2cd04336..7701ed179 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -77,6 +77,7 @@ var sTestsStatSV1 = []func(t *testing.T){ testV1STSRpcConn, testV1STSFromFolder, testV1STSGetStats, + testV1STSGetStatsAfterRestart, testV1STSProcessEvent, testV1STSSetStatQueueProfile, testV1STSUpdateStatQueueProfile, @@ -157,6 +158,7 @@ func testV1STSGetStats(t *testing.T) { utils.MetaTCC: utils.NOT_AVAILABLE, utils.MetaTCD: utils.NOT_AVAILABLE, utils.MetaACC: utils.NOT_AVAILABLE, + utils.MetaPDD: utils.NOT_AVAILABLE, } if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil { @@ -166,6 +168,34 @@ func testV1STSGetStats(t *testing.T) { } } +func testV1STSGetStatsAfterRestart(t *testing.T) { + var reply []string + expectedIDs := []string{"STATS_1"} + //get stats before restart + if err := stsV1Rpc.Call("StatSV1.GetQueueIDs", "cgrates.org", &reply); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expectedIDs, reply) { + t.Errorf("expecting: %+v, received reply: %s", expectedIDs, reply) + } + if _, err := engine.StopStartEngine(stsV1CfgPath, statsDelay); err != nil { + t.Fatal(err) + } + var err error + stsV1Rpc, err = jsonrpc.Dial("tcp", stsV1Cfg.RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + if err != nil { + t.Fatal("Could not connect to rater: ", err.Error()) + } + //get stats after restart + var reply2 []string + expectedIDs2 := []string{"STATS_1"} + if err := stsV1Rpc.Call("StatSV1.GetQueueIDs", "cgrates.org", &reply2); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expectedIDs2, reply2) { + t.Errorf("expecting: %+v, received reply: %s", expectedIDs2, reply2) + } + time.Sleep(time.Duration(1 * time.Second)) +} + func testV1STSProcessEvent(t *testing.T) { var reply string ev1 := engine.StatEvent{ @@ -175,7 +205,8 @@ func testV1STSProcessEvent(t *testing.T) { utils.ACCOUNT: "1001", utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), utils.USAGE: time.Duration(135 * time.Second), - utils.COST: 123.0}} + utils.COST: 123.0, + utils.PDD: time.Duration(12 * time.Second)}} if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev1, &reply); err != nil { t.Error(err) } else if reply != utils.OK { @@ -211,6 +242,7 @@ func testV1STSProcessEvent(t *testing.T) { utils.MetaACC: "61.5", utils.MetaTCD: "3m0s", utils.MetaTCC: "123", + utils.MetaPDD: "4s", } var metrics map[string]string if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{Tenant: "cgrates.org", ID: "STATS_1"}, &metrics); err != nil { diff --git a/data/tariffplans/testtp/Stats.csv b/data/tariffplans/testtp/Stats.csv index 8cc037dab..20fd89d20 100755 --- a/data/tariffplans/testtp/Stats.csv +++ b/data/tariffplans/testtp/Stats.csv @@ -1,2 +1,2 @@ #Tenant[0],Id[1],FilterType[2],FilterFieldName[3],FilterFieldValues[4],ActivationInterval[5],QueueLength[6],TTL[7],Metrics[8],Blocker[9],Stored[10],Weight[11],Thresholds[12] -cgrates.org,Stats1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd;*acc;*tcd;*tcc,true,true,20,THRESH1;THRESH2 +cgrates.org,Stats1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd;*acc;*tcd;*tcc;*pdd,true,true,20,THRESH1;THRESH2 diff --git a/data/tariffplans/tutorial/Stats.csv b/data/tariffplans/tutorial/Stats.csv index db4cccbad..43ba6ff3c 100755 --- a/data/tariffplans/tutorial/Stats.csv +++ b/data/tariffplans/tutorial/Stats.csv @@ -1,2 +1,2 @@ #Tenant[0],Id[1],FilterType[2],FilterFieldName[3],FilterFieldValues[4],ActivationInterval[5],QueueLength[6],TTL[7],Metrics[8],Blocker[9],Stored[10],Weight[11],Thresholds[12] -cgrates.org,STATS_1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acc;*tcc;*acd;*tcd,true,true,20,THRESH1;THRESH2 +cgrates.org,STATS_1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acc;*tcc;*acd;*tcd;*pdd,true,true,20,THRESH1;THRESH2