mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add timezone in agentRequest
This commit is contained in:
committed by
Dan Christian Bogos
parent
dbf06aa023
commit
9c7aeb78d6
@@ -28,36 +28,39 @@ import (
|
||||
)
|
||||
|
||||
func newAgentRequest(req config.DataProvider, tntTpl config.RSRParsers,
|
||||
dfltTenant string, filterS *engine.FilterS) (ar *AgentRequest) {
|
||||
dfltTenant, timezone string, filterS *engine.FilterS) (ar *AgentRequest) {
|
||||
ar = &AgentRequest{
|
||||
Request: req,
|
||||
Vars: config.NewNavigableMap(nil),
|
||||
CGRRequest: config.NewNavigableMap(nil),
|
||||
CGRReply: config.NewNavigableMap(nil),
|
||||
Reply: config.NewNavigableMap(nil),
|
||||
timezone: timezone,
|
||||
filterS: filterS,
|
||||
}
|
||||
// populate tenant
|
||||
if tntIf, err := ar.ParseField(
|
||||
&config.FCTemplate{Type: utils.META_COMPOSED,
|
||||
Value: tntTpl}); err == nil && tntIf.(string) != "" {
|
||||
ar.Tenant = tntIf.(string)
|
||||
ar.tenant = tntIf.(string)
|
||||
} else {
|
||||
ar.Tenant = dfltTenant
|
||||
ar.tenant = dfltTenant
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// AgentRequest represents data related to one request towards agent
|
||||
// implements engine.DataProvider so we can pass it to filters
|
||||
type AgentRequest struct {
|
||||
Tenant string
|
||||
Request config.DataProvider // request
|
||||
Vars *config.NavigableMap // shared data
|
||||
CGRRequest *config.NavigableMap
|
||||
CGRReply *config.NavigableMap
|
||||
Reply *config.NavigableMap
|
||||
filterS *engine.FilterS
|
||||
tenant,
|
||||
timezone string
|
||||
filterS *engine.FilterS
|
||||
}
|
||||
|
||||
// String implements engine.DataProvider
|
||||
@@ -106,7 +109,7 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) (
|
||||
nM *config.NavigableMap, err error) {
|
||||
nM = config.NewNavigableMap(nil)
|
||||
for _, tplFld := range tplFlds {
|
||||
if pass, err := ar.filterS.Pass(ar.Tenant,
|
||||
if pass, err := ar.filterS.Pass(ar.tenant,
|
||||
tplFld.Filters, ar); err != nil {
|
||||
return nil, err
|
||||
} else if !pass {
|
||||
@@ -163,11 +166,11 @@ func (aReq *AgentRequest) ParseField(
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
tEnd, err := utils.ParseTimeDetectLayout(strVal1, cfgFld.Timezone)
|
||||
tEnd, err := utils.ParseTimeDetectLayout(strVal1, aReq.timezone)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
tStart, err := utils.ParseTimeDetectLayout(strVal2, cfgFld.Timezone)
|
||||
tStart, err := utils.ParseTimeDetectLayout(strVal2, aReq.timezone)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ func TestAgReqAsNavigableMap(t *testing.T) {
|
||||
cfg, _ := config.NewDefaultCGRConfig()
|
||||
filterS := engine.NewFilterS(cfg, nil, dm)
|
||||
agReq := newAgentRequest(nil, nil,
|
||||
"cgrates.org", filterS)
|
||||
"cgrates.org", "", filterS)
|
||||
// populate request, emulating the way will be done in HTTPAgent
|
||||
agReq.CGRRequest.Set([]string{utils.CGRID},
|
||||
utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), false)
|
||||
|
||||
@@ -60,7 +60,9 @@ func (ha *HTTPAgent) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
|
||||
for _, reqProcessor := range ha.reqProcessors {
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ha.dfltTenant, ha.filterS)
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ha.dfltTenant,
|
||||
utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone),
|
||||
ha.filterS)
|
||||
lclProcessed, err := ha.processRequest(reqProcessor, agReq)
|
||||
if err != nil {
|
||||
utils.Logger.Warning(
|
||||
@@ -93,14 +95,14 @@ func (ha *HTTPAgent) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
// processRequest represents one processor processing the request
|
||||
func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
agReq *AgentRequest) (processed bool, err error) {
|
||||
if pass, err := ha.filterS.Pass(agReq.Tenant,
|
||||
if pass, err := ha.filterS.Pass(agReq.tenant,
|
||||
reqProcessor.Filters, agReq); err != nil || !pass {
|
||||
return pass, err
|
||||
}
|
||||
if agReq.CGRRequest, err = agReq.AsNavigableMap(reqProcessor.RequestFields); err != nil {
|
||||
return
|
||||
}
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.Tenant, utils.NestingSep)
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep)
|
||||
var reqType string
|
||||
for _, typ := range []string{
|
||||
utils.MetaDryRun, utils.MetaAuth,
|
||||
|
||||
@@ -97,7 +97,7 @@ func TestRadComposedFieldValue(t *testing.T) {
|
||||
if err := pkt.AddAVPWithName("Cisco-NAS-Port", "CGR1", "Cisco"); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", nil)
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", "", nil)
|
||||
agReq.Vars.Set([]string{MetaRadReqType}, MetaRadAcctStart, false)
|
||||
agReq.Vars.Set([]string{"Cisco"}, "CGR1", false)
|
||||
agReq.Vars.Set([]string{"User-Name"}, "flopsy", false)
|
||||
@@ -117,7 +117,7 @@ func TestRadFieldOutVal(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
eOut := fmt.Sprintf("%s|flopsy|CGR1", MetaRadAcctStart)
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", nil)
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", "", nil)
|
||||
agReq.Vars.Set([]string{MetaRadReqType}, MetaRadAcctStart, false)
|
||||
agReq.Vars.Set([]string{"Cisco"}, "CGR1", false)
|
||||
agReq.Vars.Set([]string{"User-Name"}, "flopsy", false)
|
||||
@@ -139,7 +139,7 @@ func TestRadReplyAppendAttributes(t *testing.T) {
|
||||
&config.FCTemplate{Tag: "Acct-Session-Time", FieldId: "Acct-Session-Time", Type: utils.META_COMPOSED,
|
||||
Value: config.NewRSRParsersMustCompile("~*cgrep.MaxUsage{*duration_seconds}", true)},
|
||||
}
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", nil)
|
||||
agReq := newAgentRequest(nil, nil, "cgrates.org", "", nil)
|
||||
agReq.CGRReply.Set([]string{utils.CapMaxUsage}, time.Duration(time.Hour), false)
|
||||
agReq.CGRReply.Set([]string{utils.CapAttributes, "RadReply"}, "AccessAccept", false)
|
||||
agReq.CGRReply.Set([]string{utils.CapAttributes, utils.Account}, "1001", false)
|
||||
|
||||
@@ -83,7 +83,9 @@ func (ra *RadiusAgent) handleAuth(req *radigo.Packet) (rpl *radigo.Packet, err e
|
||||
rpl.Code = radigo.AccessAccept
|
||||
var processed bool
|
||||
for _, reqProcessor := range ra.cgrCfg.RadiusAgentCfg().RequestProcessors {
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ra.cgrCfg.DefaultTenant, ra.filterS)
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ra.cgrCfg.DefaultTenant,
|
||||
utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone),
|
||||
ra.filterS)
|
||||
agReq.Vars.Set([]string{MetaRadReqType}, utils.StringToInterface(MetaRadAuth), true)
|
||||
var lclProcessed bool
|
||||
if lclProcessed, err = ra.processRequest(reqProcessor, agReq, rpl); lclProcessed {
|
||||
@@ -121,7 +123,9 @@ func (ra *RadiusAgent) handleAcct(req *radigo.Packet) (rpl *radigo.Packet, err e
|
||||
rpl.Code = radigo.AccountingResponse
|
||||
var processed bool
|
||||
for _, reqProcessor := range ra.cgrCfg.RadiusAgentCfg().RequestProcessors {
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ra.cgrCfg.DefaultTenant, ra.filterS)
|
||||
agReq := newAgentRequest(dcdr, reqProcessor.Tenant, ra.cgrCfg.DefaultTenant,
|
||||
utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone),
|
||||
ra.filterS)
|
||||
var lclProcessed bool
|
||||
if lclProcessed, err = ra.processRequest(reqProcessor, agReq, rpl); lclProcessed {
|
||||
processed = lclProcessed
|
||||
@@ -145,14 +149,14 @@ func (ra *RadiusAgent) handleAcct(req *radigo.Packet) (rpl *radigo.Packet, err e
|
||||
// processRequest represents one processor processing the request
|
||||
func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
agReq *AgentRequest, rply *radigo.Packet) (processed bool, err error) {
|
||||
if pass, err := ra.filterS.Pass(agReq.Tenant,
|
||||
if pass, err := ra.filterS.Pass(agReq.tenant,
|
||||
reqProcessor.Filters, agReq); err != nil || !pass {
|
||||
return pass, err
|
||||
}
|
||||
if agReq.CGRRequest, err = agReq.AsNavigableMap(reqProcessor.RequestFields); err != nil {
|
||||
return
|
||||
}
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.Tenant, utils.NestingSep)
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep)
|
||||
var reqType string
|
||||
for _, typ := range []string{
|
||||
utils.MetaDryRun, utils.MetaAuth,
|
||||
|
||||
@@ -80,6 +80,7 @@ type HttpAgntProcCfg struct {
|
||||
Id string
|
||||
Filters []string
|
||||
Tenant RSRParsers
|
||||
Timezone string
|
||||
Flags utils.StringMap
|
||||
ContinueOnSuccess bool
|
||||
RequestFields []*FCTemplate
|
||||
@@ -104,6 +105,9 @@ func (ha *HttpAgntProcCfg) loadFromJsonCfg(jsnCfg *HttpAgentProcessorJsnCfg) (er
|
||||
return err
|
||||
}
|
||||
}
|
||||
if jsnCfg.Timezone != nil {
|
||||
ha.Timezone = *jsnCfg.Timezone
|
||||
}
|
||||
if jsnCfg.Flags != nil {
|
||||
ha.Flags = utils.StringMapFromSlice(*jsnCfg.Flags)
|
||||
}
|
||||
|
||||
@@ -396,6 +396,7 @@ type HttpAgentProcessorJsnCfg struct {
|
||||
Id *string
|
||||
Filters *[]string
|
||||
Tenant *string
|
||||
Timezone *string
|
||||
Flags *[]string
|
||||
Continue_on_success *bool
|
||||
Request_fields *[]*FcTemplateJsonCfg
|
||||
|
||||
Reference in New Issue
Block a user