better aliases loader

This commit is contained in:
Radu Ioan Fericean
2015-09-17 12:34:51 +03:00
parent 6004432c3e
commit 8de86b3e43
4 changed files with 50 additions and 16 deletions

1
.gitignore vendored
View File

@@ -13,3 +13,4 @@ dean*
data/vagrant/.vagrant
data/vagrant/vagrant_ansible_inventory_default
data/tutorials/fs_evsock/freeswitch/etc/freeswitch/
vendor

View File

@@ -76,6 +76,15 @@ func (avs AliasValues) Sort() {
sort.Sort(avs)
}
func (avs AliasValues) GetValueByDestId(destID string) *AliasValue {
for _, value := range avs {
if value.DestinationId == destID {
return value
}
}
return nil
}
func (al *Alias) GetId() string {
return utils.ConcatenatedKey(al.Direction, al.Tenant, al.Category, al.Account, al.Subject, al.Context)
}

View File

@@ -223,6 +223,8 @@ cgrates.org,dan,another,value
aliases = `
#Direction[0],Tenant[1],Category[2],Account[3],Subject[4],DestinationId[5],Group[6],Alias[7],Weight[8]
*out,cgrates.org,call,dan,dan,EU_LANDLINE,*rating_profile,Subject,dan,dan1,10
*out,cgrates.org,call,dan,dan,EU_LANDLINE,*rating_profile,Subject,rif,rif1,10
*out,cgrates.org,call,dan,dan,EU_LANDLINE,*rating_profile,Cli,0723,0724,10
*out,cgrates.org,call,dan,dan,GLOBAL1,*rating_profile,Subject,dan,dan2,20
*any,*any,*any,*any,*any,*any,*rating_profile,Subject,*any,rif1,20
*any,*any,*any,*any,*any,*any,*account,Account,*any,dan1,10
@@ -1143,9 +1145,18 @@ func TestLoadAliases(t *testing.T) {
Values: AliasValues{
&AliasValue{
DestinationId: "EU_LANDLINE",
Pairs: AliasPairs{"Subject": map[string]string{"dan": "dan1"}},
Weight: 10,
Pairs: AliasPairs{
"Subject": map[string]string{
"dan": "dan1",
"rif": "rif1",
},
"Cli": map[string]string{
"0723": "0724",
},
},
Weight: 10,
},
&AliasValue{
DestinationId: "GLOBAL1",
Pairs: AliasPairs{"Subject": map[string]string{"dan": "dan2"}},
@@ -1155,6 +1166,9 @@ func TestLoadAliases(t *testing.T) {
}
if !reflect.DeepEqual(csvr.aliases[alias1.GetId()], alias1) {
t.Errorf("Unexpected alias %+v", csvr.aliases[alias1.GetId()].Values[1])
for _, value := range csvr.aliases[alias1.GetId()].Values {
t.Logf("Value: %+v", value)
}
t.Errorf("Unexpected alias %+v", csvr.aliases[alias1.GetId()])
}
}

View File

@@ -1093,14 +1093,20 @@ func (tpr *TpReader) LoadAliasesFiltered(filter *TpAlias) (bool, error) {
Values: make(AliasValues, 0),
}
for _, tpAlias := range tpAliases {
av := &AliasValue{
DestinationId: tpAlias.DestinationId,
Pairs: make(AliasPairs),
Weight: tpAlias.Weight,
av := alias.Values.GetValueByDestId(tpAlias.DestinationId)
if av == nil {
av = &AliasValue{
DestinationId: tpAlias.DestinationId,
Pairs: make(AliasPairs),
Weight: tpAlias.Weight,
}
alias.Values = append(alias.Values, av)
}
if av.Pairs[tpAlias.Target] == nil {
av.Pairs[tpAlias.Target] = make(map[string]string)
}
av.Pairs[tpAlias.Target] = make(map[string]string)
av.Pairs[tpAlias.Target][tpAlias.Original] = tpAlias.Alias
alias.Values = append(alias.Values)
}
tpr.accountingStorage.SetAlias(alias)
return len(tpAliases) > 0, err
@@ -1130,16 +1136,20 @@ func (tpr *TpReader) LoadAliases() error {
tpr.aliases[key] = al
}
for _, v := range tal.Values {
av := &AliasValue{
DestinationId: v.DestinationId,
Pairs: make(AliasPairs),
Weight: v.Weight,
av := al.Values.GetValueByDestId(v.DestinationId)
if av == nil {
av = &AliasValue{
DestinationId: v.DestinationId,
Pairs: make(AliasPairs),
Weight: v.Weight,
}
al.Values = append(al.Values, av)
}
if av.Pairs[v.Target] == nil {
av.Pairs[v.Target] = make(map[string]string)
}
av.Pairs[v.Target] = make(map[string]string)
av.Pairs[v.Target][v.Original] = v.Alias
al.Values = append(al.Values, av)
}
}
return err
}