Add *tmp support field in AgentRequest

This commit is contained in:
TeoV
2020-02-19 15:45:20 +02:00
committed by Dan Christian Bogos
parent 9bc1bc0625
commit c941540d01
3 changed files with 38 additions and 0 deletions

View File

@@ -84,6 +84,7 @@ type AgentRequest struct {
Header config.DataProvider
Trailer config.DataProvider
diamreq *config.NavigableMap // used in case of building requests (ie. DisconnectSession)
tmp *config.NavigableMap // used in case you want to store temporary items and access them later
}
// String implements engine.DataProvider
@@ -117,6 +118,8 @@ func (ar *AgentRequest) FieldAsInterface(fldPath []string) (val interface{}, err
val, err = ar.Header.FieldAsInterface(fldPath[1:])
case utils.MetaTrl:
val, err = ar.Trailer.FieldAsInterface(fldPath[1:])
case utils.MetaTmp:
val, err = ar.tmp.FieldAsInterface(fldPath[1:])
}
return
}
@@ -141,6 +144,7 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) (
//SetFields will populate fields of AgentRequest out of templates
func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) {
ar.tmp = config.NewNavigableMap(nil)
for _, tplFld := range tplFlds {
if pass, err := ar.filterS.Pass(ar.Tenant,
tplFld.Filters, ar); err != nil {
@@ -195,6 +199,8 @@ func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) {
ar.Reply.Set(fldPath[1:], valSet, false, true)
case utils.MetaDiamreq:
ar.diamreq.Set(fldPath[1:], valSet, false, true)
case utils.MetaTmp:
ar.tmp.Set(fldPath[1:], valSet, false, true)
}
}
if tplFld.Blocker { // useful in case of processing errors first

View File

@@ -1572,3 +1572,34 @@ func TestAgReqGroupType(t *testing.T) {
t.Errorf("expecting: %+v, \n received: %+v ", "test", sls[0].Data)
}
}
func TestAgReqSetFieldsInTmp(t *testing.T) {
cfg, _ := config.NewDefaultCGRConfig()
data := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), nil)
filterS := engine.NewFilterS(cfg, nil, dm)
agReq := NewAgentRequest(nil, nil, nil, nil, nil, "cgrates.org", "", filterS, nil, nil)
agReq.CGRRequest.Set([]string{utils.Account}, "1001", false, false)
tplFlds := []*config.FCTemplate{
&config.FCTemplate{Tag: "Tenant",
Path: utils.MetaTmp + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
Value: config.NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP)},
&config.FCTemplate{Tag: "Account",
Path: utils.MetaTmp + utils.NestingSep + utils.Account, Type: utils.MetaVariable,
Value: config.NewRSRParsersMustCompile("~*cgreq.Account", true, utils.INFIELD_SEP)},
}
eMp := config.NewNavigableMap(nil)
eMp.Set([]string{utils.Tenant}, []*config.NMItem{
&config.NMItem{Data: "cgrates.org", Path: []string{utils.Tenant},
Config: tplFlds[0]}}, false, true)
eMp.Set([]string{utils.Account}, []*config.NMItem{
&config.NMItem{Data: "1001", Path: []string{utils.Account},
Config: tplFlds[1]}}, false, true)
if err := agReq.SetFields(tplFlds); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(agReq.tmp, eMp) {
t.Errorf("expecting: %+v,\n received: %+v", eMp, agReq.tmp)
}
}

View File

@@ -552,6 +552,7 @@ const (
MetaExp = "*exp"
MetaHdr = "*hdr"
MetaTrl = "*trl"
MetaTmp = "*tmp"
CGROriginHost = "cgr_originhost"
MetaInitiate = "*initiate"
MetaUpdate = "*update"