triggers loading improvement

This commit is contained in:
Radu Ioan Fericean
2016-02-19 12:58:14 +02:00
parent d6d5045073
commit 2690802100
4 changed files with 70 additions and 11 deletions

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
}