From 2690802100b29a6bb3ad3888d4f60791ff8ac6fd Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Fri, 19 Feb 2016 12:58:14 +0200 Subject: [PATCH] triggers loading improvement --- engine/account.go | 2 +- engine/balance_filter.go | 61 +++++++++++++++++++++++++++++++++++++++ engine/loader_csv_test.go | 4 +-- utils/map.go | 14 ++++----- 4 files changed, 70 insertions(+), 11 deletions(-) diff --git a/engine/account.go b/engine/account.go index 4888b536d..912e4de08 100644 --- a/engine/account.go +++ b/engine/account.go @@ -700,7 +700,7 @@ func (acc *Account) InitCounters() { uc.Counters = make(CounterFilters, 0) acc.UnitCounters[at.Balance.GetType()] = append(acc.UnitCounters[at.Balance.GetType()], uc) } - c := &CounterFilter{Filter: at.Balance} + c := &CounterFilter{Filter: at.Balance.Clone()} if (c.Filter.ID == nil || *c.Filter.ID == "") && at.UniqueID != "" { c.Filter.ID = utils.StringPointer(at.UniqueID) } diff --git a/engine/balance_filter.go b/engine/balance_filter.go index e9f95e68c..28d9c912f 100644 --- a/engine/balance_filter.go +++ b/engine/balance_filter.go @@ -47,6 +47,67 @@ func (bp *BalanceFilter) CreateBalance() *Balance { return b.Clone() } +func (bf *BalanceFilter) Clone() *BalanceFilter { + result := &BalanceFilter{} + if bf.Uuid != nil { + result.Uuid = new(string) + *result.Uuid = *bf.Uuid + } + if bf.ID != nil { + result.ID = new(string) + *result.ID = *bf.ID + } + if bf.Value != nil { + result.Value = new(float64) + *result.Value = *bf.Value + } + if bf.RatingSubject != nil { + result.RatingSubject = new(string) + *result.RatingSubject = *bf.RatingSubject + } + if bf.Type != nil { + result.Type = new(string) + *result.Type = *bf.Type + } + if bf.ExpirationDate != nil { + result.ExpirationDate = new(time.Time) + *result.ExpirationDate = *bf.ExpirationDate + } + if bf.Weight != nil { + result.Weight = new(float64) + *result.Weight = *bf.Weight + } + if bf.Disabled != nil { + result.Disabled = new(bool) + *result.Disabled = *bf.Disabled + } + if bf.Blocker != nil { + result.Blocker = new(bool) + *result.Blocker = *bf.Blocker + } + if bf.Factor != nil { + result.Factor = new(ValueFactor) + *result.Factor = *bf.Factor + } + if bf.Directions != nil { + result.Directions = utils.StringMapPointer(bf.Directions.Clone()) + } + if bf.DestinationIDs != nil { + result.DestinationIDs = utils.StringMapPointer(bf.DestinationIDs.Clone()) + } + if bf.Categories != nil { + result.Categories = utils.StringMapPointer(bf.Categories.Clone()) + } + if bf.SharedGroups != nil { + result.SharedGroups = utils.StringMapPointer(bf.SharedGroups.Clone()) + } + if bf.TimingIDs != nil { + result.TimingIDs = utils.StringMapPointer(bf.TimingIDs.Clone()) + } + + return result +} + func (bp *BalanceFilter) LoadFromBalance(b *Balance) *BalanceFilter { if b.Uuid != "" { bp.Uuid = &b.Uuid diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 69f090c8d..3f4fbf87c 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -1055,7 +1055,7 @@ func TestLoadActionTriggers(t *testing.T) { ThresholdType: utils.TRIGGER_MIN_EVENT_COUNTER, ThresholdValue: 10, Balance: &BalanceFilter{ - ID: utils.StringPointer("st0"), + ID: nil, Type: utils.StringPointer(utils.VOICE), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), DestinationIDs: utils.StringMapPointer(utils.NewStringMap("GERMANY_O2")), @@ -1133,7 +1133,7 @@ func TestLoadAccountActions(t *testing.T) { expected.UnitCounters[utils.VOICE][0].Counters[i].Filter.ID = b.Filter.ID } if !reflect.DeepEqual(aa.UnitCounters[utils.VOICE][0].Counters[0], expected.UnitCounters[utils.VOICE][0].Counters[0]) { - t.Errorf("Error loading account action: %+v", utils.ToIJSON(aa.UnitCounters[utils.VOICE][0].Counters[0].Filter)) + t.Errorf("Error loading account action: %+v %+v", utils.ToIJSON(aa.UnitCounters[utils.VOICE][0].Counters[0].Filter), utils.ToIJSON(expected.UnitCounters[utils.VOICE][0].Counters[0].Filter)) } // test that it does not overwrite balances existing, err := accountingStorage.GetAccount(aa.Id) diff --git a/utils/map.go b/utils/map.go index e45488935..07f2d280b 100644 --- a/utils/map.go +++ b/utils/map.go @@ -107,14 +107,6 @@ func (sm StringMap) Includes(om StringMap) bool { return true } -func (sm StringMap) Clone() StringMap { - result := make(StringMap, len(sm)) - for k := range sm { - result[k] = true - } - return result -} - func (sm StringMap) Slice() []string { result := make([]string, len(sm)) i := 0 @@ -142,6 +134,12 @@ func (sm StringMap) Copy(o StringMap) { } } +func (sm StringMap) Clone() StringMap { + result := make(StringMap, len(sm)) + result.Copy(sm) + return result +} + func (sm StringMap) String() string { return strings.Join(sm.Slice(), INFIELD_SEP) }