From 1e69216613e71f532ad37d14f051f54c180f56fd Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 2 Jul 2019 17:58:13 +0300 Subject: [PATCH] Update agents with new type for Flags(MapSubsystemIDs) --- agents/diamagent.go | 22 ++++++-- agents/dnsagent.go | 22 ++++++-- agents/httpagent.go | 22 ++++++-- agents/radagent.go | 22 ++++++-- config/dnsagentcfg_test.go | 2 +- config/dnsagntcfg.go | 6 ++- config/httpagntcfg_test.go | 16 +++--- sessions/sessions.go | 100 +++++++++++++++++++++++++++++++++++-- sessions/sessions_test.go | 28 +++++------ utils/map.go | 8 +++ utils/map_test.go | 29 +++++++++++ 11 files changed, 227 insertions(+), 50 deletions(-) diff --git a/agents/diamagent.go b/agents/diamagent.go index fc862cd09..de127ce2d 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -291,7 +291,10 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1AuthorizeReply) err = da.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, rply) @@ -305,7 +308,10 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1InitSessionReply) err = da.sS.Call(utils.SessionSv1InitiateSession, initArgs, rply) @@ -316,7 +322,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes)) rply := new(sessions.V1UpdateSessionReply) err = da.sS.Call(utils.SessionSv1UpdateSession, updateArgs, rply) @@ -329,7 +336,9 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := utils.StringPointer("") err = da.sS.Call(utils.SessionSv1TerminateSession, terminateArgs, rply) @@ -346,7 +355,10 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1ProcessEventReply) err = da.sS.Call(utils.SessionSv1ProcessEvent, evArgs, rply) diff --git a/agents/dnsagent.go b/agents/dnsagent.go index 6a7f263b6..e5b475e68 100644 --- a/agents/dnsagent.go +++ b/agents/dnsagent.go @@ -192,7 +192,10 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1AuthorizeReply) err = da.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, rply) @@ -206,7 +209,10 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1InitSessionReply) err = da.sS.Call(utils.SessionSv1InitiateSession, initArgs, rply) @@ -217,7 +223,8 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes)) rply := new(sessions.V1UpdateSessionReply) err = da.sS.Call(utils.SessionSv1UpdateSession, updateArgs, rply) @@ -230,7 +237,9 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := utils.StringPointer("") err = da.sS.Call(utils.SessionSv1TerminateSession, terminateArgs, rply) @@ -247,7 +256,10 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1ProcessEventReply) // need it so rpcclient can clone err = da.sS.Call(utils.SessionSv1ProcessEvent, evArgs, rply) diff --git a/agents/httpagent.go b/agents/httpagent.go index 65c187b1b..4023a4855 100644 --- a/agents/httpagent.go +++ b/agents/httpagent.go @@ -140,7 +140,10 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1AuthorizeReply) err = ha.sessionS.Call(utils.SessionSv1AuthorizeEvent, authArgs, rply) @@ -154,7 +157,10 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1InitSessionReply) err = ha.sessionS.Call(utils.SessionSv1InitiateSession, initArgs, rply) @@ -165,7 +171,8 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes)) rply := new(sessions.V1UpdateSessionReply) err = ha.sessionS.Call(utils.SessionSv1UpdateSession, updateArgs, rply) @@ -178,7 +185,9 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := utils.StringPointer("") err = ha.sessionS.Call(utils.SessionSv1TerminateSession, terminateArgs, rply) @@ -195,7 +204,10 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1ProcessEventReply) err = ha.sessionS.Call(utils.SessionSv1ProcessEvent, evArgs, rply) diff --git a/agents/radagent.go b/agents/radagent.go index da25df321..2ebce8d80 100644 --- a/agents/radagent.go +++ b/agents/radagent.go @@ -186,7 +186,10 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1AuthorizeReply) err = ra.sessionS.Call(utils.SessionSv1AuthorizeEvent, authArgs, rply) @@ -200,7 +203,10 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1InitSessionReply) err = ra.sessionS.Call(utils.SessionSv1InitiateSession, initArgs, rply) @@ -211,7 +217,8 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaAttributes)) rply := new(sessions.V1UpdateSessionReply) err = ra.sessionS.Call(utils.SessionSv1UpdateSession, updateArgs, rply) @@ -224,7 +231,9 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - cgrEv, cgrArgs.ArgDispatcher) + cgrEv, cgrArgs.ArgDispatcher, + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := utils.StringPointer("") err = ra.sessionS.Call(utils.SessionSv1TerminateSession, terminateArgs, rply) @@ -241,7 +250,10 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, + reqProcessor.Flags.GetIDs(utils.MetaAttributes), + reqProcessor.Flags.GetIDs(utils.MetaThresholds), + reqProcessor.Flags.GetIDs(utils.MetaStats)) rply := new(sessions.V1ProcessEventReply) err = ra.sessionS.Call(utils.SessionSv1ProcessEvent, evArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { diff --git a/config/dnsagentcfg_test.go b/config/dnsagentcfg_test.go index ca0b374f2..7fb3742a3 100644 --- a/config/dnsagentcfg_test.go +++ b/config/dnsagentcfg_test.go @@ -90,7 +90,7 @@ func TestRequestProcessorloadFromJsonCfg(t *testing.T) { ID: "cgrates", Tenant: NewRSRParsersMustCompile("tenant", true, utils.INFIELD_SEP), Filters: []string{"filter1", "filter2"}, - Flags: utils.StringMap{"flag1": true, "flag2": true}, + Flags: utils.MapSubsystemIDs{"flag1": []string{}, "flag2": []string{}}, ContinueOnSuccess: true, } if err = dareq.loadFromJsonCfg(json, utils.INFIELD_SEP); err != nil { diff --git a/config/dnsagntcfg.go b/config/dnsagntcfg.go index f5dfb40a1..d23955e84 100644 --- a/config/dnsagntcfg.go +++ b/config/dnsagntcfg.go @@ -81,7 +81,7 @@ type RequestProcessor struct { ID string Tenant RSRParsers Filters []string - Flags utils.StringMap + Flags utils.MapSubsystemIDs ContinueOnSuccess bool Timezone string RequestFields []*FCTemplate @@ -102,7 +102,9 @@ func (rp *RequestProcessor) loadFromJsonCfg(jsnCfg *ReqProcessorJsnCfg, sep stri } } if jsnCfg.Flags != nil { - rp.Flags = utils.StringMapFromSlice(*jsnCfg.Flags) + if rp.Flags, err = utils.MapSubsystemIDsFromSlice(*jsnCfg.Flags); err != nil { + return + } } if jsnCfg.Timezone != nil { rp.Timezone = *jsnCfg.Timezone diff --git a/config/httpagntcfg_test.go b/config/httpagntcfg_test.go index 851d57f17..e86c92b7f 100644 --- a/config/httpagntcfg_test.go +++ b/config/httpagntcfg_test.go @@ -74,7 +74,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { ID: "OutboundAUTHDryRun", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{{ Tag: "Allow", @@ -153,7 +153,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { ID: "OutboundAUTHDryRun", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{{ Tag: "Allow", @@ -166,7 +166,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { ID: "mtcall_cdr", Filters: []string{"*string:*req.request_type:MTCALL_CDR"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*cdrs": true}, + Flags: utils.MapSubsystemIDs{"*cdrs": []string{}}, RequestFields: []*FCTemplate{{ Tag: "RequestType", FieldId: "RequestType", @@ -191,7 +191,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { RequestProcessors: []*RequestProcessor{{ ID: "cdr_from_xml", Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*cdrs": true}, + Flags: utils.MapSubsystemIDs{"*cdrs": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{}, }}, @@ -247,7 +247,7 @@ func TestHttpAgentCfgloadFromJsonCfg(t *testing.T) { ID: "OutboundAUTHDryRun", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{}, }}, @@ -271,7 +271,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) { ID: "OutboundAUTHDryRun", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{{ Tag: "Allow", @@ -320,7 +320,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) { ID: "OutboundAUTHDryRun", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{{ Tag: "Allow", @@ -333,7 +333,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) { ID: "OutboundAUTHDryRun1", Filters: []string{"*string:*req.request_type:OutboundAUTH", "*string:*req.Msisdn:497700056231"}, Tenant: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), - Flags: utils.StringMap{"*dryrun": true}, + Flags: utils.MapSubsystemIDs{"*dryrun": []string{}}, RequestFields: []*FCTemplate{}, ReplyFields: []*FCTemplate{{ Tag: "Allow", diff --git a/sessions/sessions.go b/sessions/sessions.go index ccfd82b4c..25bc7d5e6 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -1677,7 +1677,8 @@ func (sS *SessionS) BiRPCv1ReplicateSessions(clnt rpcclient.RpcClientConnection, func NewV1AuthorizeArgs(attrs, res, maxUsage, thrslds, statQueues, suppls, supplsIgnoreErrs, supplsEventCost bool, cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, - supplierPaginator utils.Paginator) (args *V1AuthorizeArgs) { + supplierPaginator utils.Paginator, + attributeIDs, thresholdIDs, statIDs []string) (args *V1AuthorizeArgs) { args = &V1AuthorizeArgs{ GetAttributes: attrs, AuthorizeResources: res, @@ -1693,6 +1694,16 @@ func NewV1AuthorizeArgs(attrs, res, maxUsage, thrslds, } args.ArgDispatcher = argDisp args.Paginator = supplierPaginator + if len(attributeIDs) != 0 { + args.AttributeIDs = &attributeIDs + } + if len(thresholdIDs) != 0 { + args.ThresholdIDs = &thresholdIDs + } + if len(statIDs) != 0 { + args.StatIDs = &statIDs + } + return } @@ -1706,6 +1717,9 @@ type V1AuthorizeArgs struct { GetSuppliers bool SuppliersMaxCost string SuppliersIgnoreErrors bool + AttributeIDs *[]string + ThresholdIDs *[]string + StatIDs *[]string *utils.CGREvent utils.Paginator *utils.ArgDispatcher @@ -1796,6 +1810,9 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.AttributeIDs != nil { + attrArgs.AttributeIDs = *args.AttributeIDs + } var rplyEv engine.AttrSProcessEventReply if err := sS.attrS.Call(utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err == nil { @@ -1872,6 +1889,9 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.ThresholdIDs != nil { + thEv.ThresholdIDs = *args.ThresholdIDs + } if err := sS.thdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( @@ -1888,6 +1908,9 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.StatIDs != nil { + statArgs.StatIDs = *args.StatIDs + } var statReply []string if err := sS.statS.Call(utils.StatSv1ProcessEvent, statArgs, &statReply); err != nil && @@ -1947,7 +1970,8 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(clnt rpcclient.RpcClientConn // NewV1InitSessionArgs is a constructor for V1InitSessionArgs func NewV1InitSessionArgs(attrs, resrc, acnt, thrslds, stats bool, - cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1InitSessionArgs) { + cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, + attributeIDs, thresholdIDs, statIDs []string) (args *V1InitSessionArgs) { args = &V1InitSessionArgs{ GetAttributes: attrs, AllocateResources: resrc, @@ -1957,6 +1981,15 @@ func NewV1InitSessionArgs(attrs, resrc, acnt, thrslds, stats bool, CGREvent: cgrEv, ArgDispatcher: argDisp, } + if len(attributeIDs) != 0 { + args.AttributeIDs = &attributeIDs + } + if len(thresholdIDs) != 0 { + args.ThresholdIDs = &thresholdIDs + } + if len(statIDs) != 0 { + args.StatIDs = &statIDs + } return } @@ -1967,6 +2000,9 @@ type V1InitSessionArgs struct { InitSession bool ProcessThresholds bool ProcessStats bool + AttributeIDs *[]string + ThresholdIDs *[]string + StatIDs *[]string *utils.CGREvent *utils.ArgDispatcher } @@ -2053,6 +2089,9 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.AttributeIDs != nil { + attrArgs.AttributeIDs = *args.AttributeIDs + } var rplyEv engine.AttrSProcessEventReply if err := sS.attrS.Call(utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err == nil { @@ -2120,6 +2159,9 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.ThresholdIDs != nil { + thEv.ThresholdIDs = *args.ThresholdIDs + } if err := sS.thdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { @@ -2138,6 +2180,9 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.StatIDs != nil { + statArgs.StatIDs = *args.StatIDs + } if err := sS.statS.Call(utils.StatSv1ProcessEvent, statArgs, &statReply); err != nil && err.Error() != utils.ErrNotFound.Error() { @@ -2194,13 +2239,17 @@ func (sS *SessionS) BiRPCv1InitiateSessionWithDigest(clnt rpcclient.RpcClientCon // NewV1UpdateSessionArgs is a constructor for update session arguments func NewV1UpdateSessionArgs(attrs, acnts bool, - cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1UpdateSessionArgs) { + cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, + attributeIDs []string) (args *V1UpdateSessionArgs) { args = &V1UpdateSessionArgs{ GetAttributes: attrs, UpdateSession: acnts, CGREvent: cgrEv, ArgDispatcher: argDisp, } + if len(attributeIDs) != 0 { + args.AttributeIDs = &attributeIDs + } return } @@ -2208,6 +2257,7 @@ func NewV1UpdateSessionArgs(attrs, acnts bool, type V1UpdateSessionArgs struct { GetAttributes bool UpdateSession bool + AttributeIDs *[]string *utils.CGREvent *utils.ArgDispatcher } @@ -2281,6 +2331,9 @@ func (sS *SessionS) BiRPCv1UpdateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if *args.AttributeIDs != nil { + attrArgs.AttributeIDs = *args.AttributeIDs + } var rplyEv engine.AttrSProcessEventReply if err := sS.attrS.Call(utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err == nil { @@ -2329,7 +2382,8 @@ func (sS *SessionS) BiRPCv1UpdateSession(clnt rpcclient.RpcClientConnection, } func NewV1TerminateSessionArgs(acnts, resrc, thrds, stats bool, - cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1TerminateSessionArgs) { + cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, + thresholdIDs, statIDs []string) (args *V1TerminateSessionArgs) { args = &V1TerminateSessionArgs{ TerminateSession: acnts, ReleaseResources: resrc, @@ -2338,6 +2392,12 @@ func NewV1TerminateSessionArgs(acnts, resrc, thrds, stats bool, CGREvent: cgrEv, ArgDispatcher: argDisp, } + if len(thresholdIDs) != 0 { + args.ThresholdIDs = &thresholdIDs + } + if len(statIDs) != 0 { + args.StatIDs = &statIDs + } return } @@ -2346,6 +2406,8 @@ type V1TerminateSessionArgs struct { ReleaseResources bool ProcessThresholds bool ProcessStats bool + ThresholdIDs *[]string + StatIDs *[]string *utils.CGREvent *utils.ArgDispatcher } @@ -2446,6 +2508,9 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.ThresholdIDs != nil { + thEv.ThresholdIDs = *args.ThresholdIDs + } if err := sS.thdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { utils.Logger.Warning( @@ -2462,6 +2527,9 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.StatIDs != nil { + statArgs.StatIDs = *args.StatIDs + } if err := sS.statS.Call(utils.StatSv1ProcessEvent, statArgs, &statReply); err != nil && err.Error() != utils.ErrNotFound.Error() { @@ -2570,7 +2638,8 @@ func (sS *SessionS) BiRPCv1ProcessCDR(clnt rpcclient.RpcClientConnection, func NewV1ProcessEventArgs(resrc, acnts, attrs, thds, stats, suppls, supplsIgnoreErrs, supplsEventCost bool, cgrEv *utils.CGREvent, argDisp *utils.ArgDispatcher, - supplierPaginator utils.Paginator) (args *V1ProcessEventArgs) { + supplierPaginator utils.Paginator, + attributeIDs, thresholdIDs, statIDs []string) (args *V1ProcessEventArgs) { args = &V1ProcessEventArgs{ AllocateResources: resrc, Debit: acnts, @@ -2586,6 +2655,15 @@ func NewV1ProcessEventArgs(resrc, acnts, attrs, thds, stats, args.SuppliersMaxCost = utils.MetaSuppliersEventCost } args.Paginator = supplierPaginator + if len(attributeIDs) != 0 { + args.AttributeIDs = &attributeIDs + } + if len(thresholdIDs) != 0 { + args.ThresholdIDs = &thresholdIDs + } + if len(statIDs) != 0 { + args.StatIDs = &statIDs + } return } @@ -2599,6 +2677,9 @@ type V1ProcessEventArgs struct { GetSuppliers bool SuppliersMaxCost string SuppliersIgnoreErrors bool + AttributeIDs *[]string + ThresholdIDs *[]string + StatIDs *[]string *utils.CGREvent utils.Paginator *utils.ArgDispatcher @@ -2689,6 +2770,9 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.AttributeIDs != nil { + attrArgs.AttributeIDs = *args.AttributeIDs + } var rplyEv engine.AttrSProcessEventReply if err := sS.attrS.Call(utils.AttributeSv1ProcessEvent, attrArgs, &rplyEv); err == nil { @@ -2764,6 +2848,9 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.ThresholdIDs != nil { + thEv.ThresholdIDs = *args.ThresholdIDs + } if err := sS.thdS.Call(utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil && err.Error() != utils.ErrNotFound.Error() { @@ -2782,6 +2869,9 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.RpcClientConnection, CGREvent: args.CGREvent, ArgDispatcher: args.ArgDispatcher, } + if args.StatIDs != nil { + statArgs.StatIDs = *args.StatIDs + } if err := sS.statS.Call(utils.StatSv1ProcessEvent, statArgs, &statReply); err != nil && err.Error() != utils.ErrNotFound.Error() { diff --git a/sessions/sessions_test.go b/sessions/sessions_test.go index cd6e2e4ef..bfaf603f7 100644 --- a/sessions/sessions_test.go +++ b/sessions/sessions_test.go @@ -826,7 +826,7 @@ func TestSessionSNewV1AuthorizeArgs(t *testing.T) { GetAttributes: true, CGREvent: cgrEv, } - rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, nil, utils.Paginator{}) + rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, nil, utils.Paginator{}, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -841,7 +841,7 @@ func TestSessionSNewV1AuthorizeArgs(t *testing.T) { SuppliersMaxCost: utils.MetaSuppliersEventCost, CGREvent: cgrEv, } - rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, nil, utils.Paginator{}) + rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, nil, utils.Paginator{}, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v,\n received: %+v", expected, rply) } @@ -861,7 +861,7 @@ func TestSessionSNewV1UpdateSessionArgs(t *testing.T) { UpdateSession: true, CGREvent: cgrEv, } - rply := NewV1UpdateSessionArgs(true, true, cgrEv, nil) + rply := NewV1UpdateSessionArgs(true, true, cgrEv, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -870,7 +870,7 @@ func TestSessionSNewV1UpdateSessionArgs(t *testing.T) { UpdateSession: true, CGREvent: cgrEv, } - rply = NewV1UpdateSessionArgs(false, true, cgrEv, nil) + rply = NewV1UpdateSessionArgs(false, true, cgrEv, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -890,14 +890,14 @@ func TestSessionSNewV1TerminateSessionArgs(t *testing.T) { ProcessThresholds: true, CGREvent: cgrEv, } - rply := NewV1TerminateSessionArgs(true, false, true, false, cgrEv, nil) + rply := NewV1TerminateSessionArgs(true, false, true, false, cgrEv, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } expected = &V1TerminateSessionArgs{ CGREvent: cgrEv, } - rply = NewV1TerminateSessionArgs(false, false, false, false, cgrEv, nil) + rply = NewV1TerminateSessionArgs(false, false, false, false, cgrEv, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -919,7 +919,7 @@ func TestSessionSNewV1ProcessEventArgs(t *testing.T) { CGREvent: cgrEv, GetSuppliers: true, } - rply := NewV1ProcessEventArgs(true, true, true, false, false, true, false, false, cgrEv, nil, utils.Paginator{}) + rply := NewV1ProcessEventArgs(true, true, true, false, false, true, false, false, cgrEv, nil, utils.Paginator{}, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -931,7 +931,7 @@ func TestSessionSNewV1ProcessEventArgs(t *testing.T) { SuppliersMaxCost: utils.MetaSuppliersEventCost, SuppliersIgnoreErrors: true, } - rply = NewV1ProcessEventArgs(true, false, true, false, false, true, true, true, cgrEv, nil, utils.Paginator{}) + rply = NewV1ProcessEventArgs(true, false, true, false, false, true, true, true, cgrEv, nil, utils.Paginator{}, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -954,7 +954,7 @@ func TestSessionSNewV1InitSessionArgs(t *testing.T) { ProcessStats: true, CGREvent: cgrEv, } - rply := NewV1InitSessionArgs(true, true, true, true, true, cgrEv, nil) + rply := NewV1InitSessionArgs(true, true, true, true, true, cgrEv, nil, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -966,7 +966,7 @@ func TestSessionSNewV1InitSessionArgs(t *testing.T) { ProcessStats: true, CGREvent: cgrEv, } - rply = NewV1InitSessionArgs(true, false, true, false, true, cgrEv, nil) + rply = NewV1InitSessionArgs(true, false, true, false, true, cgrEv, nil, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", expected, rply) } @@ -1279,7 +1279,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) { }, } cgrArgs := cgrEv.ConsumeArgs(true, true) - rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1298,7 +1298,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1323,7 +1323,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) { }, } cgrArgs := cgrEv.ConsumeArgs(true, true) - rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1341,7 +1341,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) + rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator, nil, nil, nil) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } diff --git a/utils/map.go b/utils/map.go index b1c2b1f7f..b2616608e 100644 --- a/utils/map.go +++ b/utils/map.go @@ -268,3 +268,11 @@ func (msIDs MapSubsystemIDs) HasKey(key string) (has bool) { _, has = msIDs[key] return } + +func (msIDs MapSubsystemIDs) GetIDs(key string) []string { + ids, has := msIDs[key] + if !has { + return []string{} + } + return ids +} diff --git a/utils/map_test.go b/utils/map_test.go index 6396b51fe..342015921 100644 --- a/utils/map_test.go +++ b/utils/map_test.go @@ -163,3 +163,32 @@ func TestMapSubsystemIDsHasKey(t *testing.T) { } } + +func TestMapSubsystemIDsGetIDs(t *testing.T) { + sls := []string{"*event", "*thresholds:ID1;ID2;ID3", "*attributes", "*stats:ID"} + eMp := MapSubsystemIDs{ + "*event": []string{}, + "*thresholds": []string{"ID1", "ID2", "ID3"}, + "*attributes": []string{}, + "*stats": []string{"ID"}, + } + mp, err := MapSubsystemIDsFromSlice(sls) + if err != nil { + t.Error(err) + } else if !reflect.DeepEqual(mp, eMp) { + t.Errorf("Expecting: %+v, received: %+v", eMp, mp) + } + eIDs := []string{"ID1", "ID2", "ID3"} + if ids := mp.GetIDs("*thresholds"); !reflect.DeepEqual(ids, eIDs) { + t.Errorf("Expecting: %+v, received: %+v", eIDs, ids) + } + eIDs = []string{} + if ids := mp.GetIDs("*event"); !reflect.DeepEqual(ids, eIDs) { + t.Errorf("Expecting: %+v, received: %+v", eIDs, ids) + } + eIDs = []string{} + if ids := mp.GetIDs("*test"); !reflect.DeepEqual(ids, eIDs) { + t.Errorf("Expecting: %+v, received: %+v", eIDs, ids) + } + +}