From 84187c9896aa167b05c6569aaf47d5ea3709d30b Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 10 Jan 2018 19:29:14 +0100 Subject: [PATCH] Responder ignoring ErrNotFound from AttributeS --- agents/fsevent.go | 24 +++- apier/v1/sessionsv1_it_test.go | 6 +- config/config.go | 2 +- .../cgrates/etc/cgrates/cgrates.json | 13 +- engine/responder.go | 123 +++++++++--------- 5 files changed, 94 insertions(+), 74 deletions(-) diff --git a/agents/fsevent.go b/agents/fsevent.go index 2a96ebf15..8631d1b55 100644 --- a/agents/fsevent.go +++ b/agents/fsevent.go @@ -428,14 +428,15 @@ func (fsev FSEvent) AsCallDescriptor() (*engine.CallDescriptor, error) { return lcrReq.AsCallDescriptor(config.CgrConfig().DefaultTimezone) } -func (fsev FSEvent) AsMapStringIface() (map[string]interface{}, error) { - return nil, utils.ErrNotImplemented -} - // V1AuthorizeArgs returns the arguments used in SMGv1.Authorize func (fsev FSEvent) V1AuthorizeArgs() (args *sessionmanager.V1AuthorizeArgs) { args = &sessionmanager.V1AuthorizeArgs{ // defaults GetMaxUsage: true, + CGREvent: utils.CGREvent{ + Tenant: fsev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), + }, } subsystems, has := fsev[VarCGRSubsystems] if !has { @@ -460,6 +461,11 @@ func (fsev FSEvent) V1AuthorizeArgs() (args *sessionmanager.V1AuthorizeArgs) { func (fsev FSEvent) V1InitSessionArgs() (args *sessionmanager.V1InitSessionArgs) { args = &sessionmanager.V1InitSessionArgs{ // defaults InitSession: true, + CGREvent: utils.CGREvent{ + Tenant: fsev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), + }, } subsystems, has := fsev[VarCGRSubsystems] if !has { @@ -481,6 +487,11 @@ func (fsev FSEvent) V1InitSessionArgs() (args *sessionmanager.V1InitSessionArgs) func (fsev FSEvent) V1UpdateSessionArgs() (args *sessionmanager.V1UpdateSessionArgs) { args = &sessionmanager.V1UpdateSessionArgs{ // defaults UpdateSession: true, + CGREvent: utils.CGREvent{ + Tenant: fsev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), + }, } subsystems, has := fsev[VarCGRSubsystems] if !has { @@ -499,6 +510,11 @@ func (fsev FSEvent) V1UpdateSessionArgs() (args *sessionmanager.V1UpdateSessionA func (fsev FSEvent) V1TerminateSessionArgs() (args *sessionmanager.V1TerminateSessionArgs) { args = &sessionmanager.V1TerminateSessionArgs{ // defaults TerminateSession: true, + CGREvent: utils.CGREvent{ + Tenant: fsev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), + }, } subsystems, has := fsev[VarCGRSubsystems] if !has { diff --git a/apier/v1/sessionsv1_it_test.go b/apier/v1/sessionsv1_it_test.go index 71d35935f..3b4acafb5 100644 --- a/apier/v1/sessionsv1_it_test.go +++ b/apier/v1/sessionsv1_it_test.go @@ -170,7 +170,8 @@ func TestSSv1ItAuth(t *testing.T) { ID: "TestSSv1ItAuth", Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ - "Account": "1001", "Destination": "1002", + "Account": "1001", + "Destination": "1002", "OfficeGroup": "Marketing", "OriginID": "TestSSv1It1", "RequestType": "*prepaid", @@ -224,7 +225,8 @@ func TestSSv1ItInitiateSession(t *testing.T) { ID: "TestSSv1ItInitiateSession", Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ - "Account": "1001", "Destination": "1002", + "Account": "1001", + "Destination": "1002", "OfficeGroup": "Marketing", "OriginID": "TestSSv1It1", "RequestType": "*prepaid", diff --git a/config/config.go b/config/config.go index 11fe60893..d152944f7 100755 --- a/config/config.go +++ b/config/config.go @@ -442,7 +442,7 @@ func (self *CGRConfig) checkConfigSanity() error { if self.fsAgentCfg.Enabled { for _, connCfg := range self.fsAgentCfg.SessionSConns { if connCfg.Address != utils.MetaInternal { - return errors.New("Only <*internal> connectivity allowed in in SMFreeSWITCH towards SMG for now") + return errors.New("Only <*internal> connectivity allowed in in FreeSWITCHAgent towards SessionS for now") } if connCfg.Address == utils.MetaInternal && !self.sessionSCfg.Enabled { diff --git a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json index 5d7d880b0..1838b6020 100644 --- a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json @@ -49,19 +49,19 @@ "sessions": { "enabled": true, "rals_conns": [ - {"address": "*internal"} + {"address": "127.0.0.1:2012", "transport": "*json"} ], "cdrs_conns": [ - {"address": "*internal"} + {"address": "127.0.0.1:2012", "transport": "*json"} ], "resources_conns": [ - {"address": "*internal"} + {"address": "127.0.0.1:2012", "transport": "*json"} ], "suppliers_conns": [ - {"address": "*internal"} + {"address": "127.0.0.1:2012", "transport": "*json"} ], "attributes_conns": [ - {"address": "*internal"} + {"address": "127.0.0.1:2012", "transport": "*json"} ], "debit_interval": "10s", }, @@ -69,9 +69,6 @@ "freeswitch_agent": { "enabled": true, - "sessions_conns": [ - {"address": "*internal"} - ], "event_socket_conns":[ {"address": "10.10.10.204:8021", "password": "ClueCon", "reconnects": 5} ], diff --git a/engine/responder.go b/engine/responder.go index 508943e81..c9c8acb1a 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -89,12 +89,14 @@ func (rs *Responder) GetCost(arg *CallDescriptor, reply *CallCost) (err error) { if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -136,12 +138,14 @@ func (rs *Responder) Debit(arg *CallDescriptor, reply *CallCost) (err error) { if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -187,12 +191,14 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error) if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -245,12 +251,14 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -298,12 +306,14 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -344,12 +354,14 @@ func (rs *Responder) GetMaxSessionTime(arg *CallDescriptor, reply *float64) (err if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - arg.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + arg.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = arg.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -392,12 +404,14 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) (err erro if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - ev.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = ev.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + ev.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = ev.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } // replace user profile fields @@ -511,12 +525,14 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) (err error) { if rs.AttributeS != nil { var rplyEv AttrSProcessEventReply if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - ev.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = ev.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return + ev.AsCGREvent(), &rplyEv); err != nil && + err.Error() != utils.ErrNotFound.Error() { + return utils.NewErrAttributeS(err) + } else if err == nil { + if err = ev.UpdateFromCGREvent(rplyEv.CGREvent, + rplyEv.AlteredFields); err != nil { + return utils.NewErrAttributeS(err) + } } } //utils.Logger.Info(fmt.Sprintf("DC before: %+v", ev)) @@ -619,17 +635,6 @@ func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) (err error) { if attrs.CallDescriptor.Subject == "" { attrs.CallDescriptor.Subject = attrs.CallDescriptor.Account } - if rs.AttributeS != nil { - var rplyEv AttrSProcessEventReply - if err = rs.AttributeS.Call(utils.AttributeSv1ProcessEvent, - attrs.CallDescriptor.AsCGREvent(), &rplyEv); err != nil { - return - } - if err = attrs.CallDescriptor.UpdateFromCGREvent(rplyEv.CGREvent, - rplyEv.AlteredFields); err != nil { - return - } - } // replace user profile fields if err := LoadUserProfile(attrs.CallDescriptor, utils.EXTRA_FIELDS); err != nil { return err