mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-23 16:18:44 +05:00
Improved stats + tests
This commit is contained in:
committed by
Dan Christian Bogos
parent
d8289fa9d6
commit
bb41017266
@@ -84,13 +84,13 @@ func TestStatRemEventWithID(t *testing.T) {
|
||||
t.Errorf("unexpected Events in asrMetric: %+v", asrMetric.Events)
|
||||
}
|
||||
sq.remEventWithID("cgrates.org:TestRemEventWithID_2")
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimal(-1, 0)) != 0 {
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.DecimalNaN) != 0 {
|
||||
t.Errorf("received asrMetric: %v", asrMetric)
|
||||
} else if len(asrMetric.Events) != 0 {
|
||||
t.Errorf("unexpected Events in asrMetric: %+v", asrMetric.Events)
|
||||
}
|
||||
sq.remEventWithID("cgrates.org:TestRemEventWithID_2")
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimal(-1, 0)) != 0 {
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.DecimalNaN) != 0 {
|
||||
t.Errorf("received asrMetric: %v", asrMetric)
|
||||
} else if len(asrMetric.Events) != 0 {
|
||||
t.Errorf("unexpected Events in asrMetric: %+v", asrMetric.Events)
|
||||
@@ -131,13 +131,13 @@ func TestStatRemEventWithID2(t *testing.T) {
|
||||
}
|
||||
sq.remEventWithID("cgrates.org:TestRemEventWithID_2")
|
||||
sq.remEventWithID("cgrates.org:TestRemEventWithID_1")
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimal(-1, 0)) != 0 {
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.DecimalNaN) != 0 {
|
||||
t.Errorf("received asrMetric: %v", asrMetric)
|
||||
} else if len(asrMetric.Events) != 0 {
|
||||
t.Errorf("unexpected Events in asrMetric: %+v", asrMetric.Events)
|
||||
}
|
||||
sq.remEventWithID("cgrates.org:TestRemEventWithID_2")
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimal(-1, 0)) != 0 {
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.DecimalNaN) != 0 {
|
||||
t.Errorf("received asrMetric: %v", asrMetric)
|
||||
} else if len(asrMetric.Events) != 0 {
|
||||
t.Errorf("unexpected Events in asrMetric: %+v", asrMetric.Events)
|
||||
@@ -234,15 +234,19 @@ func TestStatAddStatEvent(t *testing.T) {
|
||||
t.Errorf("received ASR: %v", asr)
|
||||
}
|
||||
ev1 := &utils.CGREvent{Tenant: "cgrates.org", ID: "TestStatAddStatEvent_1"}
|
||||
sq.addStatEvent(context.Background(), ev1.Tenant, ev1.ID, nil, utils.MapStorage{utils.MetaReq: ev1.Event})
|
||||
sq.addStatEvent(context.Background(), ev1.Tenant, ev1.ID, nil, utils.MapStorage{utils.MetaOpts: ev1.Event})
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimalFromFloat64(50)) != 0 {
|
||||
t.Errorf("received ASR: %v", asr)
|
||||
} else if asrMetric.Value.Compare(utils.NewDecimal(1, 0)) != 0 || asrMetric.Count != 2 {
|
||||
t.Errorf("ASR: %v", asrMetric)
|
||||
}
|
||||
ev1.Event = map[string]interface{}{
|
||||
utils.AnswerTime: time.Now()}
|
||||
sq.addStatEvent(context.Background(), ev1.Tenant, ev1.ID, nil, utils.MapStorage{utils.MetaReq: ev1.Event})
|
||||
/*
|
||||
ev1.Event = map[string]interface{}{
|
||||
utils.AnswerTime: time.Now()}
|
||||
*/
|
||||
ev1.APIOpts = map[string]interface{}{
|
||||
utils.MetaStartTime: time.Now()}
|
||||
sq.addStatEvent(context.Background(), ev1.Tenant, ev1.ID, nil, utils.MapStorage{utils.MetaOpts: ev1.APIOpts})
|
||||
if asr := asrMetric.GetValue(); asr.Compare(utils.NewDecimalFromFloat64(66.66666666666667)) != 0 {
|
||||
t.Errorf("received ASR: %v", asr)
|
||||
} else if asrMetric.Value.Compare(utils.NewDecimal(2, 0)) != 0 || asrMetric.Count != 3 {
|
||||
|
||||
@@ -99,22 +99,15 @@ func (asr *StatASR) GetValue() (val *utils.Decimal) {
|
||||
func (asr *StatASR) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var answered int
|
||||
var val interface{}
|
||||
if val, err = ev.FieldAsInterface([]string{utils.MetaReq, utils.AnswerTime}); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
if val, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaStartTime}); err != nil {
|
||||
if err != utils.ErrNotFound {
|
||||
return utils.ErrPrefix(err, utils.MetaStartTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if val != nil {
|
||||
if at, err := utils.IfaceAsTime(val,
|
||||
config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil {
|
||||
if val, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaStartTime}); err != nil {
|
||||
if err != utils.ErrNotFound {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
answered = 1
|
||||
}
|
||||
} else if at, err := utils.IfaceAsTime(val,
|
||||
config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
answered = 1
|
||||
}
|
||||
return asr.addEvent(evID, answered)
|
||||
}
|
||||
@@ -171,18 +164,12 @@ func (acd *StatACD) GetValue() *utils.Decimal {
|
||||
}
|
||||
|
||||
func (acd *StatACD) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var ival interface{}
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaReq, utils.Usage}); err != nil {
|
||||
ival, err := ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaUsage})
|
||||
if err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaUsage}); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
err = utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return acd.addEvent(evID, ival)
|
||||
}
|
||||
@@ -211,18 +198,12 @@ func (sum *StatTCD) GetStringValue(rounding int) string {
|
||||
}
|
||||
|
||||
func (sum *StatTCD) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var ival interface{}
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaReq, utils.Usage}); err != nil {
|
||||
ival, err := ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaUsage})
|
||||
if err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaUsage}); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
err = utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return sum.addEvent(evID, ival)
|
||||
}
|
||||
@@ -250,26 +231,20 @@ func (acc *StatACC) GetValue() *utils.Decimal {
|
||||
return acc.getAvgValue()
|
||||
}
|
||||
|
||||
func (acc *StatACC) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var ival interface{}
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaReq, utils.Cost}); err != nil {
|
||||
func (acc *StatACC) AddEvent(evID string, ev utils.DataProvider) error {
|
||||
ival, err := ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaCost})
|
||||
if err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaCost}); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
err = utils.ErrPrefix(err, utils.MetaCost)
|
||||
}
|
||||
return err
|
||||
}
|
||||
val, err := utils.IfaceAsBig(ival)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if val.Cmp(decimal.New(0, 0)) < 0 {
|
||||
return utils.ErrPrefix(utils.ErrNegative, utils.Cost)
|
||||
return utils.ErrPrefix(utils.ErrNegative, utils.MetaCost)
|
||||
}
|
||||
return acc.addEvent(evID, val)
|
||||
}
|
||||
@@ -289,26 +264,20 @@ type StatTCC struct {
|
||||
*Metric
|
||||
}
|
||||
|
||||
func (tcc *StatTCC) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var ival interface{}
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaReq, utils.Cost}); err != nil {
|
||||
func (tcc *StatTCC) AddEvent(evID string, ev utils.DataProvider) error {
|
||||
ival, err := ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaCost})
|
||||
if err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
if ival, err = ev.FieldAsInterface([]string{utils.MetaOpts, utils.MetaCost}); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return utils.ErrPrefix(err, utils.MetaUsage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
err = utils.ErrPrefix(err, utils.MetaCost)
|
||||
}
|
||||
return err
|
||||
}
|
||||
val, err := utils.IfaceAsBig(ival)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if val.Cmp(decimal.New(0, 0)) < 0 {
|
||||
return utils.ErrPrefix(utils.ErrNegative, utils.Cost)
|
||||
return utils.ErrPrefix(utils.ErrNegative, utils.MetaCost)
|
||||
}
|
||||
return tcc.addEvent(evID, val)
|
||||
}
|
||||
@@ -767,8 +736,8 @@ func (dst *StatDistinct) GetValue() *utils.Decimal {
|
||||
|
||||
func (dst *StatDistinct) AddEvent(evID string, ev utils.DataProvider) (err error) {
|
||||
var fieldValue string
|
||||
// simply remove the ~*req. prefix and do normal process
|
||||
if !strings.HasPrefix(dst.FieldName, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep) {
|
||||
// simply remove the ~*req./~*opts. prefix and do normal process
|
||||
if !strings.HasPrefix(dst.FieldName, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep) && !strings.HasPrefix(dst.FieldName, utils.DynamicDataPrefix+utils.MetaOpts+utils.NestingSep) {
|
||||
return fmt.Errorf("Invalid format for field <%s>", dst.FieldName)
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -483,7 +483,7 @@ func TestStatQueuesUpdateStatQueue(t *testing.T) {
|
||||
Metrics: []*MetricWithFilters{{MetricID: utils.MetaTCC}},
|
||||
}
|
||||
sqm := NewTCC(0, utils.EmptyString, nil)
|
||||
if err = sqm.AddEvent("ev1", utils.MapStorage{utils.MetaReq: utils.MapStorage{utils.Cost: 10}}); err != nil {
|
||||
if err = sqm.AddEvent("ev1", utils.MapStorage{utils.MetaOpts: utils.MapStorage{utils.MetaCost: 10}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sq := &StatQueue{
|
||||
|
||||
Reference in New Issue
Block a user