diff --git a/config/cfgcdrfield.go b/config/cfgcdrfield.go index 7dbf6baf5..14d8b9eee 100644 --- a/config/cfgcdrfield.go +++ b/config/cfgcdrfield.go @@ -73,12 +73,12 @@ func NewCfgCdrFieldFromCdrFieldJsonCfg(jsnCfgFld *CdrFieldJsonCfg) (*CfgCdrField if jsnCfgFld.Timezone != nil { cfgFld.Timezone = *jsnCfgFld.Timezone } - if jsnCfgFld.Mask_length != nil { - cfgFld.MaskLen = *jsnCfgFld.Mask_length - } if jsnCfgFld.Mask_destinationd_id != nil { cfgFld.MaskDestID = *jsnCfgFld.Mask_destinationd_id } + if jsnCfgFld.Mask_length != nil { + cfgFld.MaskLen = *jsnCfgFld.Mask_length + } return cfgFld, nil } @@ -98,8 +98,8 @@ type CfgCdrField struct { CostShiftDigits int // Used in exports RoundingDecimals int Timezone string - MaskLen int MaskDestID string + MaskLen int } func CfgCdrFieldsFromCdrFieldsJsonCfg(jsnCfgFldss []*CdrFieldJsonCfg) ([]*CfgCdrField, error) { diff --git a/engine/cdr_test.go b/engine/cdr_test.go index 3c32e6918..d78d5eaad 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -505,7 +505,7 @@ func TestCDRParseFieldValue(t *testing.T) { func TestCDRAsExportRecord(t *testing.T) { cdr := &CDR{CGRID: utils.Sha1("dsafdsaf", time.Unix(1383813745, 0).UTC().String()), ToR: utils.VOICE, OriginID: "dsafdsaf", OriginHost: "192.168.1.1", RequestType: utils.META_RATED, Direction: "*out", Tenant: "cgrates.org", - Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Unix(1383813745, 0).UTC(), AnswerTime: time.Unix(1383813746, 0).UTC(), + Category: "call", Account: "1001", Subject: "1001", Destination: "+4986517174963", SetupTime: time.Unix(1383813745, 0).UTC(), AnswerTime: time.Unix(1383813746, 0).UTC(), Usage: time.Duration(10) * time.Second, RunID: utils.DEFAULT_RUNID, Cost: 1.01, ExtraFields: map[string]string{"stop_time": "2014-06-11 19:19:00 +0000 UTC", "fieldextr2": "valextr2"}} @@ -516,6 +516,23 @@ func TestCDRAsExportRecord(t *testing.T) { } else if expRecord[0] != cdr.Destination { t.Errorf("Expecting: %s, received: %s", cdr.Destination, expRecord[0]) } + if err := ratingStorage.SetReverseDestination(&Destination{Id: "MASKED_DESTINATIONS", Prefixes: []string{"+4986517174963"}}, + utils.NonTransactional); err != nil { + t.Error(err) + } + cfgCdrFld = &config.CfgCdrField{Tag: "destination", Type: utils.META_COMPOSED, FieldId: utils.DESTINATION, Value: val, MaskDestID: "MASKED_DESTINATIONS", MaskLen: 3} + eDst := "+4986517174***" + if expRecord, err := cdr.AsExportRecord([]*config.CfgCdrField{cfgCdrFld}, false, nil, 0); err != nil { + t.Error(err) + } else if expRecord[0] != eDst { + t.Errorf("Expecting: %s, received: %s", eDst, expRecord[0]) + } + cfgCdrFld = &config.CfgCdrField{Tag: "MaskedDest", Type: utils.MetaMaskedDestination, Value: val, MaskDestID: "MASKED_DESTINATIONS"} + if expRecord, err := cdr.AsExportRecord([]*config.CfgCdrField{cfgCdrFld}, false, nil, 0); err != nil { + t.Error(err) + } else if expRecord[0] != "1" { + t.Errorf("Expecting: %s, received: %s", "1", expRecord[0]) + } fltr, _ := utils.ParseRSRFields("Tenant(itsyscom.com)", utils.INFIELD_SEP) cfgCdrFld = &config.CfgCdrField{Tag: "destination", Type: utils.META_COMPOSED, FieldId: utils.DESTINATION, Value: val, FieldFilter: fltr, Timezone: "UTC"} if _, err := cdr.AsExportRecord([]*config.CfgCdrField{cfgCdrFld}, false, nil, 0); err == nil { diff --git a/engine/destinations.go b/engine/destinations.go index 26ded3b8b..d477af17f 100644 --- a/engine/destinations.go +++ b/engine/destinations.go @@ -78,7 +78,7 @@ func (d *Destination) GetHistoryRecord(deleted bool) history.Record { // Reverse search in cache to see if prefix belongs to destination id func CachedDestHasPrefix(destId, prefix string) bool { - if cached, err := ratingStorage.GetReverseDestination(prefix, true, utils.NonTransactional); err == nil { + if cached, err := ratingStorage.GetReverseDestination(prefix, false, utils.NonTransactional); err == nil { return utils.IsSliceMember(cached, destId) } return false diff --git a/engine/storage_map.go b/engine/storage_map.go index f3b4cb7a2..0ad03fa04 100644 --- a/engine/storage_map.go +++ b/engine/storage_map.go @@ -470,11 +470,11 @@ func (ms *MapStorage) GetReverseDestination(prefix string, skipCache bool, trans return nil, utils.ErrNotFound } } - if idMap, ok := ms.dict.smembers(prefix, ms.ms); ok { - ids = idMap.Slice() - } else { + if idMap, ok := ms.dict.smembers(prefix, ms.ms); !ok { cache.Set(prefix, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound + } else { + ids = idMap.Slice() } cache.Set(prefix, ids, cacheCommit(transactionID), transactionID) return @@ -483,7 +483,6 @@ func (ms *MapStorage) GetReverseDestination(prefix string, skipCache bool, trans func (ms *MapStorage) SetReverseDestination(dest *Destination, transactionID string) (err error) { for _, p := range dest.Prefixes { key := utils.REVERSE_DESTINATION_PREFIX + p - ms.mu.Lock() ms.dict.sadd(key, dest.Id, ms.ms) ms.mu.Unlock()