From 6b390c0d8576079b512bf958dfa19b08ca9cfd9f Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 26 Sep 2017 13:33:34 +0300 Subject: [PATCH 1/3] Add test for ACC and TCC metrics (statmetrics_test.go) --- engine/libstats.go | 4 +- engine/statmetrics.go | 7 +- engine/statmetrics_test.go | 202 +++++++++++++++++++++++++++++++++++++ 3 files changed, 208 insertions(+), 5 deletions(-) diff --git a/engine/libstats.go b/engine/libstats.go index 10d114191..96c08ecc8 100755 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -96,8 +96,8 @@ func (se StatEvent) Cost(timezone string) (cs float64, err error) { if !has { return cs, utils.ErrNotFound } - if cs, canCast := csIf.(float64); canCast { - return cs, nil + if val, canCast := csIf.(float64); canCast { + return val, nil } csStr, canCast := csIf.(string) if !canCast { diff --git a/engine/statmetrics.go b/engine/statmetrics.go index ff750788a..365e7363d 100644 --- a/engine/statmetrics.go +++ b/engine/statmetrics.go @@ -323,7 +323,7 @@ func (acc *StatACC) getValue() float64 { if acc.Count == 0 { acc.val = utils.Float64Pointer(float64(STATS_NA)) } else { - acc.val = utils.Float64Pointer(utils.Round((acc.Sum / acc.Count * 100), + acc.val = utils.Float64Pointer(utils.Round((acc.Sum / acc.Count), config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) } } @@ -334,7 +334,8 @@ func (acc *StatACC) GetStringValue(fmtOpts string) (val string) { if acc.Count == 0 { return utils.NOT_AVAILABLE } - return fmt.Sprintf("%s", strconv.FormatFloat(acc.getValue(), 'E', -1, 64)) + return strconv.FormatFloat(acc.getValue(), 'f', -1, 64) + } func (acc *StatACC) GetValue() (v interface{}) { @@ -416,7 +417,7 @@ func (tcc *StatTCC) GetStringValue(fmtOpts string) (val string) { if tcc.Count == 0 { return utils.NOT_AVAILABLE } - return fmt.Sprintf("%s", strconv.FormatFloat(tcc.getValue(), 'E', -1, 64)) + return strconv.FormatFloat(tcc.getValue(), 'f', -1, 64) } func (tcc *StatTCC) GetValue() (v interface{}) { diff --git a/engine/statmetrics_test.go b/engine/statmetrics_test.go index 3e9e33162..d0332d25d 100644 --- a/engine/statmetrics_test.go +++ b/engine/statmetrics_test.go @@ -454,3 +454,205 @@ func TestTCDGetValue(t *testing.T) { t.Errorf("wrong tcd value: %+v", v) } } + +func TestACCGetStringValue(t *testing.T) { + acc, _ := NewACC() + ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 12.3}} + if strVal := acc.GetStringValue(""); strVal != utils.NOT_AVAILABLE { + t.Errorf("wrong acc value: %s", strVal) + } + acc.AddEvent(ev) + if strVal := acc.GetStringValue(""); strVal != "12.3" { + t.Errorf("wrong acc value: %s", strVal) + } + ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"} + ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} + acc.AddEvent(ev2) + acc.AddEvent(ev3) + if strVal := acc.GetStringValue(""); strVal != "4.1" { + t.Errorf("wrong acc value: %s", strVal) + } + acc.RemEvent(ev3.TenantID()) + if strVal := acc.GetStringValue(""); strVal != "6.15" { + t.Errorf("wrong acc value: %s", strVal) + } + ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 5.6}} + ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 1.2}} + acc.AddEvent(ev4) + acc.AddEvent(ev5) + acc.RemEvent(ev.TenantID()) + if strVal := acc.GetStringValue(""); strVal != "2.26667" { + t.Errorf("wrong acc value: %s", strVal) + } + acc.RemEvent(ev2.TenantID()) + if strVal := acc.GetStringValue(""); strVal != "3.4" { + t.Errorf("wrong acc value: %s", strVal) + } + acc.RemEvent(ev4.TenantID()) + acc.RemEvent(ev5.TenantID()) + if strVal := acc.GetStringValue(""); strVal != utils.NOT_AVAILABLE { + t.Errorf("wrong acc value: %s", strVal) + } +} + +func TestACCGetValue(t *testing.T) { + acc, _ := NewACC() + ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "12.3"}} + if strVal := acc.GetValue(); strVal != -1.0 { + t.Errorf("wrong acc value: %v", strVal) + } + acc.AddEvent(ev) + if strVal := acc.GetValue(); strVal != 12.3 { + t.Errorf("wrong acc value: %v", strVal) + } + ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"} + ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} + acc.AddEvent(ev2) + acc.AddEvent(ev3) + if strVal := acc.GetValue(); strVal != 4.1 { + t.Errorf("wrong acc value: %v", strVal) + } + acc.RemEvent(ev3.TenantID()) + if strVal := acc.GetValue(); strVal != 6.15 { + t.Errorf("wrong acc value: %v", strVal) + } + ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "5.6"}} + ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "1.2"}} + acc.AddEvent(ev4) + acc.AddEvent(ev5) + acc.RemEvent(ev.TenantID()) + if strVal := acc.GetValue(); strVal != 2.26667 { + t.Errorf("wrong acc value: %v", strVal) + } + acc.RemEvent(ev2.TenantID()) + if strVal := acc.GetValue(); strVal != 3.4 { + t.Errorf("wrong acc value: %v", strVal) + } + acc.RemEvent(ev4.TenantID()) + acc.RemEvent(ev5.TenantID()) + if strVal := acc.GetValue(); strVal != -1.0 { + t.Errorf("wrong acc value: %v", strVal) + } +} + +func TestTCCGetStringValue(t *testing.T) { + tcc, _ := NewTCC() + ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 12.3}} + if strVal := tcc.GetStringValue(""); strVal != utils.NOT_AVAILABLE { + t.Errorf("wrong tcc value: %s", strVal) + } + tcc.AddEvent(ev) + if strVal := tcc.GetStringValue(""); strVal != "12.3" { + t.Errorf("wrong tcc value: %s", strVal) + } + ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"} + ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 5.7}} + tcc.AddEvent(ev2) + tcc.AddEvent(ev3) + if strVal := tcc.GetStringValue(""); strVal != "18" { + t.Errorf("wrong tcc value: %s", strVal) + } + tcc.RemEvent(ev3.TenantID()) + if strVal := tcc.GetStringValue(""); strVal != "12.3" { + t.Errorf("wrong tcc value: %s", strVal) + } + ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 5.6}} + ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 1.2}} + tcc.AddEvent(ev4) + tcc.AddEvent(ev5) + tcc.RemEvent(ev.TenantID()) + if strVal := tcc.GetStringValue(""); strVal != "6.8" { + t.Errorf("wrong tcc value: %s", strVal) + } + tcc.RemEvent(ev2.TenantID()) + if strVal := tcc.GetStringValue(""); strVal != "6.8" { + t.Errorf("wrong tcc value: %s", strVal) + } + tcc.RemEvent(ev4.TenantID()) + tcc.RemEvent(ev5.TenantID()) + if strVal := tcc.GetStringValue(""); strVal != utils.NOT_AVAILABLE { + t.Errorf("wrong tcc value: %s", strVal) + } +} + +func TestTCCGetValue(t *testing.T) { + tcc, _ := NewTCC() + ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "12.3"}} + if strVal := tcc.GetValue(); strVal != -1.0 { + t.Errorf("wrong tcc value: %v", strVal) + } + tcc.AddEvent(ev) + if strVal := tcc.GetValue(); strVal != 12.3 { + t.Errorf("wrong tcc value: %v", strVal) + } + ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"} + ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": 1.2}} + tcc.AddEvent(ev2) + tcc.AddEvent(ev3) + if strVal := tcc.GetValue(); strVal != 13.5 { + t.Errorf("wrong tcc value: %v", strVal) + } + tcc.RemEvent(ev3.TenantID()) + if strVal := tcc.GetValue(); strVal != 12.3 { + t.Errorf("wrong tcc value: %v", strVal) + } + ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "5.6"}} + ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5", + Fields: map[string]interface{}{ + "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "Cost": "1.2"}} + tcc.AddEvent(ev4) + tcc.AddEvent(ev5) + tcc.RemEvent(ev.TenantID()) + if strVal := tcc.GetValue(); strVal != 6.8 { + t.Errorf("wrong tcc value: %v", strVal) + } + tcc.RemEvent(ev2.TenantID()) + if strVal := tcc.GetValue(); strVal != 6.8 { + t.Errorf("wrong tcc value: %v", strVal) + } + tcc.RemEvent(ev4.TenantID()) + tcc.RemEvent(ev5.TenantID()) + if strVal := tcc.GetValue(); strVal != -1.0 { + t.Errorf("wrong tcc value: %v", strVal) + } +} From d71942404fcca63be72084feb66de252c255353a Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 26 Sep 2017 17:11:40 +0300 Subject: [PATCH 2/3] Fix stats_it_test.go and modify Metrics --- apier/v1/stats_it_test.go | 77 +++++++++++++++-------------- data/tariffplans/testtp/Stats.csv | 2 +- data/tariffplans/tutorial/Stats.csv | 2 +- engine/libstats.go | 3 ++ engine/statmetrics.go | 12 ++--- engine/statmetrics_test.go | 2 +- 6 files changed, 51 insertions(+), 47 deletions(-) diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index 1d6948b16..f851cad86 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -20,6 +20,9 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" "math/rand" "net/rpc" "net/rpc/jsonrpc" @@ -27,10 +30,6 @@ import ( "reflect" "testing" "time" - - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" ) var ( @@ -47,12 +46,14 @@ var evs = []*engine.StatEvent{ Tenant: "cgrates.org", ID: "event1", Fields: map[string]interface{}{ - utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local()}}, + utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(), + }}, &engine.StatEvent{ Tenant: "cgrates.org", ID: "event2", Fields: map[string]interface{}{ - utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local()}}, + utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(), + }}, &engine.StatEvent{ Tenant: "cgrates.org", ID: "event3", @@ -151,9 +152,12 @@ func testV1STSGetStats(t *testing.T) { 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, } if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", - &utils.TenantID{"cgrates.org", expectedIDs[0]}, &metrics); err != nil { + &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics) @@ -162,51 +166,52 @@ func testV1STSGetStats(t *testing.T) { func testV1STSProcessEvent(t *testing.T) { var reply string - if err := stsV1Rpc.Call("StatSV1.ProcessEvent", - engine.StatEvent{ - Tenant: "cgrates.org", - ID: "event1", - Fields: map[string]interface{}{ - utils.ACCOUNT: "1001", - utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - utils.USAGE: time.Duration(125 * time.Second)}}, - &reply); err != nil { + ev1 := engine.StatEvent{ + Tenant: "cgrates.org", + ID: "event1", + Fields: map[string]interface{}{ + 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}} + if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev1, &reply); err != nil { t.Error(err) } else if reply != utils.OK { t.Errorf("received reply: %s", reply) } - if err := stsV1Rpc.Call("StatSV1.ProcessEvent", - engine.StatEvent{ - Tenant: "cgrates.org", - ID: "event2", - Fields: map[string]interface{}{ - utils.ACCOUNT: "1002", - utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - utils.USAGE: time.Duration(45 * time.Second)}}, - &reply); err != nil { + ev2 := engine.StatEvent{ + Tenant: "cgrates.org", + ID: "event2", + Fields: map[string]interface{}{ + utils.ACCOUNT: "1002", + utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + utils.USAGE: time.Duration(45 * time.Second)}} + if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev2, &reply); err != nil { t.Error(err) } else if reply != utils.OK { t.Errorf("received reply: %s", reply) } - if err := stsV1Rpc.Call("StatSV1.ProcessEvent", - engine.StatEvent{ - Tenant: "cgrates.org", - ID: "event3", - Fields: map[string]interface{}{ - utils.ACCOUNT: "1002", - utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - utils.USAGE: 0}}, - &reply); err != nil { + ev3 := engine.StatEvent{ + Tenant: "cgrates.org", + ID: "event3", + Fields: map[string]interface{}{ + utils.ACCOUNT: "1002", + utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + utils.USAGE: 0}} + if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev3, &reply); err != nil { t.Error(err) } else if reply != utils.OK { t.Errorf("received reply: %s", reply) } expectedMetrics := map[string]string{ utils.MetaASR: "66.66667%", - utils.MetaACD: "0s", + utils.MetaACD: "1m30s", + utils.MetaACC: "61.5", + utils.MetaTCD: "3m0s", + utils.MetaTCC: "123", } var metrics map[string]string - if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{"cgrates.org", "STATS_1"}, &metrics); err != nil { + if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{Tenant: "cgrates.org", ID: "STATS_1"}, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics) diff --git a/data/tariffplans/testtp/Stats.csv b/data/tariffplans/testtp/Stats.csv index 28fb633ff..8cc037dab 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,true,true,20,THRESH1;THRESH2 +cgrates.org,Stats1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd;*acc;*tcd;*tcc,true,true,20,THRESH1;THRESH2 diff --git a/data/tariffplans/tutorial/Stats.csv b/data/tariffplans/tutorial/Stats.csv index b3122b4db..db4cccbad 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;*acd,true,true,20,THRESH1;THRESH2 \ No newline at end of file +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 diff --git a/engine/libstats.go b/engine/libstats.go index 96c08ecc8..2ff21724a 100755 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -80,6 +80,9 @@ func (se StatEvent) Usage(timezone string) (at time.Duration, err error) { if !has { return at, utils.ErrNotFound } + if us, canCast := usIf.(float64); canCast { + return time.Duration(int64(us)), nil + } if us, canCast := usIf.(time.Duration); canCast { return us, nil } diff --git a/engine/statmetrics.go b/engine/statmetrics.go index 365e7363d..d4392aacc 100644 --- a/engine/statmetrics.go +++ b/engine/statmetrics.go @@ -181,8 +181,7 @@ func (acd *StatACD) GetFloat64Value() (v float64) { func (acd *StatACD) AddEvent(ev *StatEvent) (err error) { var value time.Duration - if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil && - err != utils.ErrNotFound { + if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if duration, err := ev.Usage(config.CgrConfig().DefaultTimezone); err != nil && @@ -264,8 +263,7 @@ func (tcd *StatTCD) GetFloat64Value() (v float64) { func (tcd *StatTCD) AddEvent(ev *StatEvent) (err error) { var value time.Duration - if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil && - err != utils.ErrNotFound { + if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if duration, err := ev.Usage(config.CgrConfig().DefaultTimezone); err != nil && @@ -348,8 +346,7 @@ func (acc *StatACC) GetFloat64Value() (v float64) { func (acc *StatACC) AddEvent(ev *StatEvent) (err error) { var value float64 - if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil && - err != utils.ErrNotFound { + if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if cost, err := ev.Cost(config.CgrConfig().DefaultTimezone); err != nil && @@ -430,8 +427,7 @@ func (tcc *StatTCC) GetFloat64Value() (v float64) { func (tcc *StatTCC) AddEvent(ev *StatEvent) (err error) { var value float64 - if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil && - err != utils.ErrNotFound { + if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if cost, err := ev.Cost(config.CgrConfig().DefaultTimezone); err != nil && diff --git a/engine/statmetrics_test.go b/engine/statmetrics_test.go index d0332d25d..7b3ac0a7f 100644 --- a/engine/statmetrics_test.go +++ b/engine/statmetrics_test.go @@ -119,7 +119,7 @@ func TestACDGetStringValue(t *testing.T) { acd, _ := NewACD() ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1", Fields: map[string]interface{}{ - "Usage": time.Duration(10 * time.Second), + utils.USAGE: time.Duration(10 * time.Second), "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }} if strVal := acd.GetStringValue(""); strVal != utils.NOT_AVAILABLE { From 6cc1cc3e6440bf4bfa789271a4ce1d036136e00d Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 26 Sep 2017 17:33:41 +0300 Subject: [PATCH 3/3] Updated statmetrics_test.go --- engine/libstats.go | 6 ++-- engine/statmetrics_test.go | 64 +++++++++++++++++++------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/engine/libstats.go b/engine/libstats.go index 2ff21724a..50280cef6 100755 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -80,12 +80,12 @@ func (se StatEvent) Usage(timezone string) (at time.Duration, err error) { if !has { return at, utils.ErrNotFound } - if us, canCast := usIf.(float64); canCast { - return time.Duration(int64(us)), nil - } if us, canCast := usIf.(time.Duration); canCast { return us, nil } + if us, canCast := usIf.(float64); canCast { + return time.Duration(int64(us)), nil + } usStr, canCast := usIf.(string) if !canCast { return at, errors.New("cannot cast to string") diff --git a/engine/statmetrics_test.go b/engine/statmetrics_test.go index 7b3ac0a7f..4e9d2f250 100644 --- a/engine/statmetrics_test.go +++ b/engine/statmetrics_test.go @@ -133,15 +133,15 @@ func TestACDGetStringValue(t *testing.T) { ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} acd.AddEvent(ev2) acd.AddEvent(ev3) - if strVal := acd.GetStringValue(""); strVal != "3.333333333s" { + if strVal := acd.GetStringValue(""); strVal != "10s" { t.Errorf("wrong acd value: %s", strVal) } acd.RemEvent(ev3.TenantID()) - if strVal := acd.GetStringValue(""); strVal != "5s" { + if strVal := acd.GetStringValue(""); strVal != "10s" { t.Errorf("wrong acd value: %s", strVal) } acd.RemEvent(ev.TenantID()) - if strVal := acd.GetStringValue(""); strVal != "0s" { + if strVal := acd.GetStringValue(""); strVal != utils.NOT_AVAILABLE { t.Errorf("wrong acd value: %s", strVal) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -157,11 +157,11 @@ func TestACDGetStringValue(t *testing.T) { }, } acd.AddEvent(ev4) - if strVal := acd.GetStringValue(""); strVal != "30s" { + if strVal := acd.GetStringValue(""); strVal != "1m0s" { t.Errorf("wrong acd value: %s", strVal) } acd.AddEvent(ev5) - if strVal := acd.GetStringValue(""); strVal != "50s" { + if strVal := acd.GetStringValue(""); strVal != "1m15s" { t.Errorf("wrong acd value: %s", strVal) } acd.RemEvent(ev2.TenantID()) @@ -184,48 +184,48 @@ func TestACDGetFloat64Value(t *testing.T) { "Usage": time.Duration(10 * time.Second)}} acd.AddEvent(ev) if v := acd.GetFloat64Value(); v != 10.0 { - t.Errorf("wrong acd value: %f", v) + t.Errorf("wrong acd value: %v", v) } ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"} acd.AddEvent(ev2) - if v := acd.GetFloat64Value(); v != 5.0 { - t.Errorf("wrong acd value: %f", v) + if v := acd.GetFloat64Value(); v != 10.0 { + t.Errorf("wrong acd value: %v", v) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", Fields: map[string]interface{}{ "Usage": time.Duration(1 * time.Minute), - "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "AnswerTime": time.Date(2015, 7, 14, 14, 25, 0, 0, time.UTC), }, } ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5", Fields: map[string]interface{}{ "Usage": time.Duration(1*time.Minute + 30*time.Second), - "AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + "AnswerTime": time.Date(2015, 7, 14, 14, 25, 0, 0, time.UTC), }, } acd.AddEvent(ev4) - if strVal := acd.GetFloat64Value(); strVal != 23.333333333 { - t.Errorf("wrong acd value: %f", strVal) + if strVal := acd.GetFloat64Value(); strVal != 35.0 { + t.Errorf("wrong acd value: %v", strVal) } acd.AddEvent(ev5) - if strVal := acd.GetFloat64Value(); strVal != 40.0 { - t.Errorf("wrong acd value: %f", strVal) + if strVal := acd.GetFloat64Value(); strVal != 53.333333333 { + t.Errorf("wrong acd value: %v", strVal) } acd.RemEvent(ev2.TenantID()) if strVal := acd.GetFloat64Value(); strVal != 53.333333333 { - t.Errorf("wrong acd value: %f", strVal) + t.Errorf("wrong acd value: %v", strVal) } acd.RemEvent(ev4.TenantID()) if strVal := acd.GetFloat64Value(); strVal != 50.0 { - t.Errorf("wrong acd value: %f", strVal) + t.Errorf("wrong acd value: %v", strVal) } acd.RemEvent(ev.TenantID()) if strVal := acd.GetFloat64Value(); strVal != 90.0 { - t.Errorf("wrong acd value: %f", strVal) + t.Errorf("wrong acd value: %v", strVal) } acd.RemEvent(ev5.TenantID()) if strVal := acd.GetFloat64Value(); strVal != -1.0 { - t.Errorf("wrong acd value: %f", strVal) + t.Errorf("wrong acd value: %v", strVal) } } @@ -246,15 +246,15 @@ func TestACDGetValue(t *testing.T) { ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} acd.AddEvent(ev2) acd.AddEvent(ev3) - if v := acd.GetValue(); v != time.Duration(6*time.Second) { + if v := acd.GetValue(); v != time.Duration(9*time.Second) { t.Errorf("wrong acd value: %+v", v) } acd.RemEvent(ev.TenantID()) - if v := acd.GetValue(); v != time.Duration(4*time.Second) { + if v := acd.GetValue(); v != time.Duration(8*time.Second) { t.Errorf("wrong acd value: %+v", v) } acd.RemEvent(ev2.TenantID()) - if v := acd.GetValue(); v != time.Duration(0*time.Second) { + if v := acd.GetValue(); v != time.Duration((-1)*time.Nanosecond) { t.Errorf("wrong acd value: %+v", v) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -271,12 +271,12 @@ func TestACDGetValue(t *testing.T) { } acd.AddEvent(ev4) acd.AddEvent(ev5) - if v := acd.GetValue(); v != time.Duration(1*time.Minute+50*time.Second) { + if v := acd.GetValue(); v != time.Duration(2*time.Minute+45*time.Second) { t.Errorf("wrong acd value: %+v", v) } acd.RemEvent(ev5.TenantID()) acd.RemEvent(ev4.TenantID()) - if v := acd.GetValue(); v != time.Duration(0*time.Second) { + if v := acd.GetValue(); v != time.Duration((-1)*time.Nanosecond) { t.Errorf("wrong acd value: %+v", v) } acd.RemEvent(ev3.TenantID()) @@ -315,7 +315,7 @@ func TestTCDGetStringValue(t *testing.T) { t.Errorf("wrong tcd value: %s", strVal) } tcd.RemEvent(ev.TenantID()) - if strVal := tcd.GetStringValue(""); strVal != "0s" { + if strVal := tcd.GetStringValue(""); strVal != utils.NOT_AVAILABLE { t.Errorf("wrong tcd value: %s", strVal) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -424,7 +424,7 @@ func TestTCDGetValue(t *testing.T) { t.Errorf("wrong tcd value: %+v", v) } tcd.RemEvent(ev2.TenantID()) - if v := tcd.GetValue(); v != time.Duration(0*time.Second) { + if v := tcd.GetValue(); v != time.Duration((-1)*time.Nanosecond) { t.Errorf("wrong tcd value: %+v", v) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -446,7 +446,7 @@ func TestTCDGetValue(t *testing.T) { } tcd.RemEvent(ev5.TenantID()) tcd.RemEvent(ev4.TenantID()) - if v := tcd.GetValue(); v != time.Duration(0*time.Second) { + if v := tcd.GetValue(); v != time.Duration((-1)*time.Nanosecond) { t.Errorf("wrong tcd value: %+v", v) } tcd.RemEvent(ev3.TenantID()) @@ -472,11 +472,11 @@ func TestACCGetStringValue(t *testing.T) { ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} acc.AddEvent(ev2) acc.AddEvent(ev3) - if strVal := acc.GetStringValue(""); strVal != "4.1" { + if strVal := acc.GetStringValue(""); strVal != "12.3" { t.Errorf("wrong acc value: %s", strVal) } acc.RemEvent(ev3.TenantID()) - if strVal := acc.GetStringValue(""); strVal != "6.15" { + if strVal := acc.GetStringValue(""); strVal != "12.3" { t.Errorf("wrong acc value: %s", strVal) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -490,7 +490,7 @@ func TestACCGetStringValue(t *testing.T) { acc.AddEvent(ev4) acc.AddEvent(ev5) acc.RemEvent(ev.TenantID()) - if strVal := acc.GetStringValue(""); strVal != "2.26667" { + if strVal := acc.GetStringValue(""); strVal != "3.4" { t.Errorf("wrong acc value: %s", strVal) } acc.RemEvent(ev2.TenantID()) @@ -521,11 +521,11 @@ func TestACCGetValue(t *testing.T) { ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"} acc.AddEvent(ev2) acc.AddEvent(ev3) - if strVal := acc.GetValue(); strVal != 4.1 { + if strVal := acc.GetValue(); strVal != 12.3 { t.Errorf("wrong acc value: %v", strVal) } acc.RemEvent(ev3.TenantID()) - if strVal := acc.GetValue(); strVal != 6.15 { + if strVal := acc.GetValue(); strVal != 12.3 { t.Errorf("wrong acc value: %v", strVal) } ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4", @@ -539,7 +539,7 @@ func TestACCGetValue(t *testing.T) { acc.AddEvent(ev4) acc.AddEvent(ev5) acc.RemEvent(ev.TenantID()) - if strVal := acc.GetValue(); strVal != 2.26667 { + if strVal := acc.GetValue(); strVal != 3.4 { t.Errorf("wrong acc value: %v", strVal) } acc.RemEvent(ev2.TenantID())