mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Added *derived_reply sub flag for SessionSv1.ProcessEvent
This commit is contained in:
committed by
Dan Christian Bogos
parent
aecafbc290
commit
c363286b56
@@ -157,6 +157,7 @@ func testSSv1ItProcessEventAuth(t *testing.T) {
|
||||
authUsage := 5 * time.Minute
|
||||
args := &sessions.V1ProcessEventArgs{
|
||||
Flags: []string{utils.ConcatenatedKey(utils.MetaResources, utils.MetaAuthorize),
|
||||
utils.ConcatenatedKey(utils.MetaResources, utils.MetaDerivedReply),
|
||||
utils.ConcatenatedKey(utils.MetaRALs, utils.MetaAuthorize),
|
||||
utils.MetaRoutes, utils.MetaAttributes, utils.MetaChargers},
|
||||
CGREvent: &utils.CGREvent{
|
||||
@@ -237,8 +238,9 @@ func testSSv1ItProcessEventInitiateSession(t *testing.T) {
|
||||
initUsage := 5 * time.Minute
|
||||
args := &sessions.V1ProcessEventArgs{
|
||||
Flags: []string{utils.ConcatenatedKey(utils.MetaRALs, utils.MetaInitiate),
|
||||
utils.ConcatenatedKey(utils.MetaResources, utils.MetaAllocate), utils.MetaAttributes,
|
||||
utils.MetaChargers},
|
||||
utils.ConcatenatedKey(utils.MetaResources, utils.MetaAllocate),
|
||||
utils.ConcatenatedKey(utils.MetaResources, utils.MetaDerivedReply),
|
||||
utils.MetaAttributes, utils.MetaChargers},
|
||||
CGREvent: &utils.CGREvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "testSSv1ItProcessEventInitiateSession",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{
|
||||
"id": "RoutesQuery",
|
||||
"filters": ["*string:~*vars.Method:INVITE"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes","*continue"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes:*derived_reply","*continue"],
|
||||
"request_fields":[
|
||||
{"tag": "Account", "path": "*cgreq.Account", "type": "*variable",
|
||||
"value": "~*req.From{*sipuri_user}", "mandatory": true},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{
|
||||
"id": "RoutesQuery",
|
||||
"filters": ["*string:~*vars.Method:INVITE"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes","*continue"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes:*derived_reply","*continue"],
|
||||
"request_fields":[
|
||||
{"tag": "Account", "path": "*cgreq.Account", "type": "*variable",
|
||||
"value": "~*req.From{*sipuri_user}", "mandatory": true},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{
|
||||
"id": "RoutesQuery",
|
||||
"filters": ["*string:~*vars.Method:INVITE"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes","*continue"],
|
||||
"flags": ["*event","*chargers", "*routes", "*attributes:*derived_reply","*continue"],
|
||||
"request_fields":[
|
||||
{"tag": "Account", "path": "*cgreq.Account", "type": "*variable",
|
||||
"value": "~*req.From{*sipuri_user}", "mandatory": true},
|
||||
|
||||
@@ -80,7 +80,8 @@ cgrates (0.11.0~dev) UNRELEASED; urgency=medium
|
||||
* [SessionS] Rename from ResourceMessage to ResourceAllocation
|
||||
* [LoaderS] Updated file selector from *req<FileName> to *file(FileName)
|
||||
* [SessionS] Added *chargers flag to ProcessEvent to proccess the events from ChargerS with other subsystems
|
||||
* [SessionS] Updated the ids handling in flags by ading *ids as a new flag
|
||||
* [SessionS] Updated the ids handling in flags by adding *ids as a new flag
|
||||
* [SessionS] Added *derived_reply sub flag to ProcessEvent to specify if a subsystem needs to process the events from ChargerS
|
||||
|
||||
-- DanB <danb@cgrates.org> Wed, 19 Feb 2020 13:25:52 +0200
|
||||
|
||||
|
||||
@@ -263,3 +263,13 @@ type V1STIRIdentityArgs struct {
|
||||
OverwriteIAT bool // if true the IAT from payload is overwrited with the present unix timestamp
|
||||
*utils.ArgDispatcher
|
||||
}
|
||||
|
||||
// getDerivedEvents returns only the *raw event if derivedReply flag is not specified
|
||||
func getDerivedEvents(events map[string]*utils.CGREventWithOpts, derivedReply bool) map[string]*utils.CGREventWithOpts {
|
||||
if derivedReply {
|
||||
return events
|
||||
}
|
||||
return map[string]*utils.CGREventWithOpts{
|
||||
utils.MetaRaw: events[utils.MetaRaw],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -295,3 +295,19 @@ aa+jqv4dwkr/FLEcN1zC76Y/IniI65fId55hVJvN3ORuzUqYEtzD3irmsw==
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDerivedEvents(t *testing.T) {
|
||||
events := map[string]*utils.CGREventWithOpts{
|
||||
utils.MetaRaw: {},
|
||||
"DEFAULT": {},
|
||||
}
|
||||
if rply := getDerivedEvents(events, true); !reflect.DeepEqual(events, rply) {
|
||||
t.Errorf("Expected %s received %s", utils.ToJSON(events), utils.ToJSON(rply))
|
||||
}
|
||||
exp := map[string]*utils.CGREventWithOpts{
|
||||
utils.MetaRaw: events[utils.MetaRaw],
|
||||
}
|
||||
if rply := getDerivedEvents(events, false); !reflect.DeepEqual(exp, rply) {
|
||||
t.Errorf("Expected %s received %s", utils.ToJSON(exp), utils.ToJSON(rply))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3179,7 +3179,8 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
if argsFlagsWithParams.GetBool(utils.MetaAttributes) {
|
||||
attrIDs := argsFlagsWithParams.ParamsSlice(utils.MetaAttributes, utils.MetaIDs)
|
||||
rply.Attributes = make(map[string]*engine.AttrSProcessEventReply)
|
||||
for runID, cgrEv := range events {
|
||||
|
||||
for runID, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaAttributes].Has(utils.MetaDerivedReply)) {
|
||||
rplyAttr, err := sS.processAttributes(cgrEv.CGREvent, cgrEv.ArgDispatcher,
|
||||
attrIDs, cgrEv.Opts)
|
||||
if err != nil {
|
||||
@@ -3207,7 +3208,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
if flags.Has(utils.MetaEventCost) {
|
||||
maxCost = utils.MetaRoutesEventCost
|
||||
}
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, flags.Has(utils.MetaDerivedReply)) {
|
||||
routesReply, err := sS.getRoutes(cgrEv.CGREvent.Clone(), cgrEv.ArgDispatcher,
|
||||
args.Paginator, ignoreErrors, maxCost, cgrEv.Opts)
|
||||
if err != nil {
|
||||
@@ -3223,7 +3224,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
if argsFlagsWithParams.GetBool(utils.MetaThresholds) {
|
||||
rply.ThresholdIDs = make(map[string][]string)
|
||||
thIDs := argsFlagsWithParams.ParamsSlice(utils.MetaThresholds, utils.MetaIDs)
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaThresholds].Has(utils.MetaDerivedReply)) {
|
||||
tIDs, err := sS.processThreshold(cgrEv.CGREvent, cgrEv.ArgDispatcher, thIDs)
|
||||
if err != nil && err.Error() != utils.ErrNotFound.Error() {
|
||||
utils.Logger.Warning(
|
||||
@@ -3239,7 +3240,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
if argsFlagsWithParams.GetBool(utils.MetaStats) {
|
||||
rply.StatQueueIDs = make(map[string][]string)
|
||||
stIDs := argsFlagsWithParams.ParamsSlice(utils.MetaStats, utils.MetaIDs)
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaStats].Has(utils.MetaDerivedReply)) {
|
||||
sIDs, err := sS.processStats(cgrEv.CGREvent, cgrEv.ArgDispatcher, stIDs)
|
||||
if err != nil &&
|
||||
err.Error() != utils.ErrNotFound.Error() {
|
||||
@@ -3253,7 +3254,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
}
|
||||
|
||||
if argsFlagsWithParams.GetBool(utils.MetaSTIRAuthenticate) {
|
||||
for _, cgrEv := range events {
|
||||
for _, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaSTIRAuthenticate].Has(utils.MetaDerivedReply)) {
|
||||
ev := engine.MapEvent(cgrEv.CGREvent.Event)
|
||||
opts := engine.MapEvent(cgrEv.Opts)
|
||||
attest := sS.cgrCfg.SessionSCfg().STIRCfg.AllowedAttest
|
||||
@@ -3275,7 +3276,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
}
|
||||
} else if argsFlagsWithParams.GetBool(utils.MetaSTIRInitiate) {
|
||||
rply.STIRIdentity = make(map[string]string)
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaSTIRInitiate].Has(utils.MetaDerivedReply)) {
|
||||
ev := engine.MapEvent(cgrEv.CGREvent.Event)
|
||||
opts := engine.MapEvent(cgrEv.Opts)
|
||||
attest := sS.cgrCfg.SessionSCfg().STIRCfg.DefaultAttest
|
||||
@@ -3315,7 +3316,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
}
|
||||
rply.ResourceAllocation = make(map[string]string)
|
||||
if resOpt := argsFlagsWithParams[utils.MetaResources]; len(resOpt) != 0 {
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, resOpt.Has(utils.MetaDerivedReply)) {
|
||||
originID := engine.MapEvent(cgrEv.CGREvent.Event).GetStringIgnoreErrors(utils.OriginID)
|
||||
if originID == "" {
|
||||
return utils.NewErrMandatoryIeMissing(utils.OriginID)
|
||||
@@ -3362,7 +3363,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
// check for *cost
|
||||
if ralsOpts.Has(utils.MetaCost) {
|
||||
rply.Cost = make(map[string]float64)
|
||||
for runID, cgrEv := range events {
|
||||
for runID, cgrEv := range getDerivedEvents(events, ralsOpts.Has(utils.MetaDerivedReply)) {
|
||||
ev := engine.MapEvent(cgrEv.CGREvent.Event)
|
||||
//compose the CallDescriptor with Args
|
||||
startTime := ev.GetTimeIgnoreErrors(utils.AnswerTime,
|
||||
@@ -3497,10 +3498,11 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
|
||||
|
||||
if argsFlagsWithParams.GetBool(utils.MetaCDRs) {
|
||||
var cdrRply string
|
||||
for _, cgrEv := range events {
|
||||
flgs := argsFlagsWithParams[utils.MetaCDRs].SliceFlags()
|
||||
for _, cgrEv := range getDerivedEvents(events, argsFlagsWithParams[utils.MetaCDRs].Has(utils.MetaDerivedReply)) {
|
||||
if err := sS.connMgr.Call(sS.cgrCfg.SessionSCfg().CDRsConns, nil, utils.CDRsV1ProcessEvent,
|
||||
&engine.ArgV1ProcessEvent{
|
||||
Flags: argsFlagsWithParams[utils.MetaCDRs].SliceFlags(),
|
||||
Flags: flgs,
|
||||
CGREvent: *cgrEv.CGREvent,
|
||||
ArgDispatcher: cgrEv.ArgDispatcher,
|
||||
}, &cdrRply); err != nil {
|
||||
|
||||
@@ -2264,7 +2264,7 @@ const (
|
||||
|
||||
// Event Flags
|
||||
const (
|
||||
MetaDerivedReply = "*derivedreply"
|
||||
MetaDerivedReply = "*derived_reply"
|
||||
|
||||
MetaIDs = "*ids"
|
||||
|
||||
|
||||
@@ -298,7 +298,7 @@ func (fWp FlagsWithParams) SliceFlags() (sls []string) {
|
||||
continue
|
||||
}
|
||||
for opt, values := range sub {
|
||||
if len(values) == 0 { // it's an option without values(e.g *derivedreply)
|
||||
if len(values) == 0 { // it's an option without values(e.g *derived_reply)
|
||||
sls = append(sls, ConcatenatedKey(key, opt))
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ func TestMapHasKey(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMapSubsystemIDsFromSlice(t *testing.T) {
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*thresholds:*derivedreply", "*attributes:*disabled", "*stats:*ids:ID"}
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*thresholds:*derived_reply", "*attributes:*disabled", "*stats:*ids:ID"}
|
||||
eMp := FlagsWithParams{
|
||||
"*event": map[string][]string{},
|
||||
"*thresholds": map[string][]string{MetaIDs: {"ID1", "ID2", "ID3"}, MetaDerivedReply: {}},
|
||||
@@ -258,7 +258,7 @@ func TestMapSubsystemIDsGetIDs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFlagsToSlice(t *testing.T) {
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*attributes", "*stats:*ids:ID", "*routes:*derivedreply"}
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*attributes", "*stats:*ids:ID", "*routes:*derived_reply"}
|
||||
eMp := FlagsWithParams{
|
||||
"*event": map[string][]string{},
|
||||
"*thresholds": map[string][]string{MetaIDs: {"ID1", "ID2", "ID3"}},
|
||||
@@ -319,7 +319,7 @@ func TestFlagParamsAdd(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFlagsToSlice2(t *testing.T) {
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*attributes", "*stats:*ids:ID", "*routes:*derivedreply", "*cdrs:*attributes", "*cdrs:*stats:ID"}
|
||||
sls := []string{"*event", "*thresholds:*ids:ID1;ID2;ID3", "*attributes", "*stats:*ids:ID", "*routes:*derived_reply", "*cdrs:*attributes", "*cdrs:*stats:ID"}
|
||||
eMp := FlagsWithParams{
|
||||
"*event": map[string][]string{},
|
||||
"*thresholds": map[string][]string{MetaIDs: {"ID1", "ID2", "ID3"}},
|
||||
|
||||
Reference in New Issue
Block a user