Added *derived_reply sub flag for SessionSv1.ProcessEvent

This commit is contained in:
Trial97
2020-07-20 12:52:48 +03:00
committed by Dan Christian Bogos
parent aecafbc290
commit c363286b56
11 changed files with 52 additions and 21 deletions

View File

@@ -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",

View File

@@ -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},

View File

@@ -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},

View File

@@ -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},

View File

@@ -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

View File

@@ -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],
}
}

View File

@@ -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))
}
}

View File

@@ -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 {

View File

@@ -2264,7 +2264,7 @@ const (
// Event Flags
const (
MetaDerivedReply = "*derivedreply"
MetaDerivedReply = "*derived_reply"
MetaIDs = "*ids"

View File

@@ -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
}

View File

@@ -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"}},