From 1833c1e10d8f5b78705d8830462a8d2f760a57d0 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 16 Oct 2020 13:45:16 +0300 Subject: [PATCH] Removed LowBalanceAnnFile config from AsteriskAgent --- agents/astagent.go | 90 +++------------------------------- config/config_defaults.go | 3 -- config/config_json_test.go | 9 ++-- config/libconfig_json.go | 11 ++--- config/sessionscfg.go | 28 +++-------- config/sessionscfg_test.go | 36 +++++--------- data/conf/cgrates/cgrates.json | 3 -- 7 files changed, 32 insertions(+), 148 deletions(-) diff --git a/agents/astagent.go b/agents/astagent.go index 2cd8c016f..a74116fe0 100644 --- a/agents/astagent.go +++ b/agents/astagent.go @@ -57,11 +57,10 @@ const ( func NewAsteriskAgent(cgrCfg *config.CGRConfig, astConnIdx int, connMgr *engine.ConnManager) (*AsteriskAgent, error) { sma := &AsteriskAgent{ - cgrCfg: cgrCfg, - astConnIdx: astConnIdx, - connMgr: connMgr, - eventsCache: make(map[string]*utils.CGREventWithOpts), - astTerminateEv: make(map[string]chan struct{}), + cgrCfg: cgrCfg, + astConnIdx: astConnIdx, + connMgr: connMgr, + eventsCache: make(map[string]*utils.CGREventWithOpts), } return sma, nil } @@ -76,9 +75,6 @@ type AsteriskAgent struct { astErrChan chan error eventsCache map[string]*utils.CGREventWithOpts // used to gather information about events during various phases evCacheMux sync.RWMutex // Protect eventsCache - - astTerminateEv map[string]chan struct{} - astTerminateEvMux sync.RWMutex } func (sma *AsteriskAgent) connectAsterisk() (err error) { @@ -203,7 +199,8 @@ func (sma *AsteriskAgent) handleStasisStart(ev *SMAsteriskEvent) { return } // Set absolute timeout for non-postpaid calls - if !sma.setMaxCallDuration(ev.ChannelID(), *authReply.MaxUsage) { + if !sma.setChannelVar(ev.ChannelID(), CGRMaxSessionTime, + strconv.Itoa(int(authReply.MaxUsage.Seconds()*1000))) { return } } @@ -284,14 +281,6 @@ func (sma *AsteriskAgent) handleChannelStateChange(ev *SMAsteriskEvent) { // Channel disconnect func (sma *AsteriskAgent) handleChannelDestroyed(ev *SMAsteriskEvent) { chID := ev.ChannelID() - // astTerminateEv map[/string]chan struct{} - sma.astTerminateEvMux.Lock() - if end, has := sma.astTerminateEv[chID]; has { - delete(sma.astTerminateEv, chID) - close(end) - } - sma.astTerminateEvMux.Unlock() - sma.evCacheMux.RLock() cgrEvDisp, hasIt := sma.eventsCache[chID] sma.evCacheMux.RUnlock() @@ -392,70 +381,5 @@ func (*AsteriskAgent) V1DisconnectPeer(args *utils.DPRArgs, reply *string) (err // V1WarnDisconnect is used to implement the sessions.BiRPClient interface func (sma *AsteriskAgent) V1WarnDisconnect(args map[string]interface{}, reply *string) (err error) { - channelID := engine.NewMapEvent(args).GetStringIgnoreErrors(utils.OriginID) - if err = sma.playFileOnChannel(channelID, sma.cgrCfg.AsteriskAgentCfg().LowBalanceAnnFile); err != nil { - utils.Logger.Warning( - fmt.Sprintf("<%s> failed play file <%s> on channel <%s> because: %s", - utils.AsteriskAgent, sma.cgrCfg.AsteriskAgentCfg().LowBalanceAnnFile, - channelID, err.Error())) - return - } - *reply = utils.OK - return -} - -// hangupChannel will disconnect from CGRateS side with congestion reason -func (sma *AsteriskAgent) playFileOnChannel(channelID, file string) (err error) { - if file == utils.EmptyString { - return - } - _, err = sma.astConn.Call(aringo.HTTP_POST, fmt.Sprintf("http://%s/ari/channels/%s/play", - sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address, channelID), - url.Values{"media": {file}}) - return -} - -// Sets the call timeout valid of starting of the call -func (sma *AsteriskAgent) setMaxCallDuration(channelID string, maxDur time.Duration) (success bool) { - if len(sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceContext) == 0 && - len(sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceAnnFile) == 0 { - // Set absolute timeout for non-postpaid calls - return sma.setChannelVar(channelID, CGRMaxSessionTime, - strconv.Itoa(int(maxDur.Seconds()*1000))) - } - end := make(chan struct{}) - sma.astTerminateEvMux.Lock() - sma.astTerminateEv[channelID] = end - sma.astTerminateEvMux.Unlock() - go func(channelID string, dur time.Duration, end chan struct{}) { - select { - case <-end: - case <-time.After(dur): - sma.doOnMaxCallDuration(channelID) - } - }(channelID, maxDur, end) - return true -} - -func (sma *AsteriskAgent) doOnMaxCallDuration(channelID string) (err error) { - if len(sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceContext) != 0 { - if _, err = sma.astConn.Call(aringo.HTTP_POST, fmt.Sprintf("http://%s/ari/channels/%s/continue", - sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address, channelID), - url.Values{"context": {sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceContext}}); err != nil { - utils.Logger.Err( - fmt.Sprintf("<%s> Could not transfer the call to empty balance context, error: <%s>, channelID: %v", - utils.AsteriskAgent, err.Error(), channelID)) - } - return - } - if len(sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceAnnFile) != 0 { - if err = sma.playFileOnChannel(channelID, sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceAnnFile); err != nil { - utils.Logger.Warning( - fmt.Sprintf("<%s> failed play file <%s> on channel <%s> because: %s", - utils.AsteriskAgent, sma.cgrCfg.AsteriskAgentCfg().EmptyBalanceAnnFile, - channelID, err.Error())) - } - return - } - return + return utils.ErrNotImplemented } diff --git a/config/config_defaults.go b/config/config_defaults.go index f35410ce3..a9ad4e174 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -468,9 +468,6 @@ const CGRATES_CFG_JSON = ` "enabled": false, // starts the Asterisk agent: "sessions_conns": ["*internal"], "create_cdr": false, // create CDR out of events and sends it to CDRS component - "low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls - "empty_balance_context": "", // if defined, prepaid calls will be transferred to this context on empty balance - "empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined) "asterisk_conns":[ // instantiate connections to multiple Asterisk servers {"address": "127.0.0.1:8088", "user": "cgrates", "password": "CGRateS.org", "connect_attempts": 3,"reconnects": 5} ], diff --git a/config/config_json_test.go b/config/config_json_test.go index 5deb836ac..f2d0271ba 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -729,12 +729,9 @@ func TestKamAgentJsonCfg(t *testing.T) { func TestAsteriskAgentJsonCfg(t *testing.T) { eCfg := &AsteriskAgentJsonCfg{ - Enabled: utils.BoolPointer(false), - Sessions_conns: &[]string{utils.MetaInternal}, - Create_cdr: utils.BoolPointer(false), - Empty_balance_ann_file: utils.StringPointer(""), - Empty_balance_context: utils.StringPointer(""), - Low_balance_ann_file: utils.StringPointer(""), + Enabled: utils.BoolPointer(false), + Sessions_conns: &[]string{utils.MetaInternal}, + Create_cdr: utils.BoolPointer(false), Asterisk_conns: &[]*AstConnJsonCfg{ { Address: utils.StringPointer("127.0.0.1:8088"), diff --git a/config/libconfig_json.go b/config/libconfig_json.go index c0f16b4ea..303866c20 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -286,13 +286,10 @@ type AstConnJsonCfg struct { } type AsteriskAgentJsonCfg struct { - Enabled *bool - Sessions_conns *[]string - Create_cdr *bool - Low_balance_ann_file *string - Empty_balance_context *string - Empty_balance_ann_file *string - Asterisk_conns *[]*AstConnJsonCfg + Enabled *bool + Sessions_conns *[]string + Create_cdr *bool + Asterisk_conns *[]*AstConnJsonCfg } type CacheParamJsonCfg struct { diff --git a/config/sessionscfg.go b/config/sessionscfg.go index 8f42dc638..9bbf48ada 100644 --- a/config/sessionscfg.go +++ b/config/sessionscfg.go @@ -636,13 +636,10 @@ func (aConnCfg *AsteriskConnCfg) AsMapInterface() map[string]interface{} { } type AsteriskAgentCfg struct { - Enabled bool - SessionSConns []string - CreateCDR bool - LowBalanceAnnFile string - EmptyBalanceContext string - EmptyBalanceAnnFile string - AsteriskConns []*AsteriskConnCfg + Enabled bool + SessionSConns []string + CreateCDR bool + AsteriskConns []*AsteriskConnCfg } func (aCfg *AsteriskAgentCfg) loadFromJsonCfg(jsnCfg *AsteriskAgentJsonCfg) (err error) { @@ -666,16 +663,6 @@ func (aCfg *AsteriskAgentCfg) loadFromJsonCfg(jsnCfg *AsteriskAgentJsonCfg) (err if jsnCfg.Create_cdr != nil { aCfg.CreateCDR = *jsnCfg.Create_cdr } - if jsnCfg.Low_balance_ann_file != nil { - aCfg.LowBalanceAnnFile = *jsnCfg.Low_balance_ann_file - } - if jsnCfg.Empty_balance_context != nil { - aCfg.EmptyBalanceContext = *jsnCfg.Empty_balance_context - } - - if jsnCfg.Empty_balance_ann_file != nil { - aCfg.EmptyBalanceAnnFile = *jsnCfg.Empty_balance_ann_file - } if jsnCfg.Asterisk_conns != nil { aCfg.AsteriskConns = make([]*AsteriskConnCfg, len(*jsnCfg.Asterisk_conns)) @@ -689,11 +676,8 @@ func (aCfg *AsteriskAgentCfg) loadFromJsonCfg(jsnCfg *AsteriskAgentJsonCfg) (err func (aCfg *AsteriskAgentCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ - utils.EnabledCfg: aCfg.Enabled, - utils.CreateCDRCfg: aCfg.CreateCDR, - utils.LowBalanceAnnFileCfg: aCfg.LowBalanceAnnFile, - utils.EmptyBalanceContext: aCfg.EmptyBalanceContext, - utils.EmptyBalanceAnnFileCfg: aCfg.EmptyBalanceAnnFile, + utils.EnabledCfg: aCfg.Enabled, + utils.CreateCDRCfg: aCfg.CreateCDR, } if aCfg.AsteriskConns != nil { conns := make([]map[string]interface{}, len(aCfg.AsteriskConns)) diff --git a/config/sessionscfg_test.go b/config/sessionscfg_test.go index c0add41cb..82399e6ff 100644 --- a/config/sessionscfg_test.go +++ b/config/sessionscfg_test.go @@ -698,12 +698,9 @@ func TestRemoteHostloadFromJsonCfg(t *testing.T) { func TestAsteriskAgentCfgloadFromJsonCfg(t *testing.T) { cfgJSON := &AsteriskAgentJsonCfg{ - Enabled: utils.BoolPointer(true), - Sessions_conns: &[]string{utils.MetaInternal}, - Create_cdr: utils.BoolPointer(true), - Low_balance_ann_file: utils.StringPointer("randomFile"), - Empty_balance_context: utils.StringPointer("randomContext"), - Empty_balance_ann_file: utils.StringPointer("randomAnnFile"), + Enabled: utils.BoolPointer(true), + Sessions_conns: &[]string{utils.MetaInternal}, + Create_cdr: utils.BoolPointer(true), Asterisk_conns: &[]*AstConnJsonCfg{ { Alias: utils.StringPointer("127.0.0.1:8448"), @@ -716,12 +713,9 @@ func TestAsteriskAgentCfgloadFromJsonCfg(t *testing.T) { }, } expected := &AsteriskAgentCfg{ - Enabled: true, - SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)}, - CreateCDR: true, - LowBalanceAnnFile: "randomFile", - EmptyBalanceContext: "randomContext", - EmptyBalanceAnnFile: "randomAnnFile", + Enabled: true, + SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)}, + CreateCDR: true, AsteriskConns: []*AsteriskConnCfg{{ Alias: "127.0.0.1:8448", Address: "127.0.0.1:8088", @@ -745,12 +739,9 @@ func TestAsteriskAgentCfgAsMapInterface(t *testing.T) { "asterisk_agent": {}, }` eMap := map[string]interface{}{ - utils.EnabledCfg: false, - utils.SessionSConnsCfg: []string{"*internal"}, - utils.CreateCdrCfg: false, - utils.LowBalanceAnnFileCfg: utils.EmptyString, - utils.EmptyBalanceContext: utils.EmptyString, - utils.EmptyBalanceAnnFileCfg: utils.EmptyString, + utils.EnabledCfg: false, + utils.SessionSConnsCfg: []string{"*internal"}, + utils.CreateCdrCfg: false, utils.AsteriskConnsCfg: []map[string]interface{}{ {utils.AliasCfg: "", utils.AddressCfg: "127.0.0.1:8088", utils.UserCf: "cgrates", utils.Password: "CGRateS.org", utils.ConnectAttemptsCfg: 3, utils.ReconnectsCfg: 5}, }, @@ -774,12 +765,9 @@ func TestAsteriskAgentCfgAsMapInterface1(t *testing.T) { }, }` eMap := map[string]interface{}{ - utils.EnabledCfg: true, - utils.SessionSConnsCfg: []string{"*conn1", "*conn2"}, - utils.CreateCdrCfg: true, - utils.LowBalanceAnnFileCfg: utils.EmptyString, - utils.EmptyBalanceContext: utils.EmptyString, - utils.EmptyBalanceAnnFileCfg: utils.EmptyString, + utils.EnabledCfg: true, + utils.SessionSConnsCfg: []string{"*conn1", "*conn2"}, + utils.CreateCdrCfg: true, utils.AsteriskConnsCfg: []map[string]interface{}{ {utils.AliasCfg: "", utils.AddressCfg: "127.0.0.1:8089", utils.UserCf: "cgrates", utils.Password: "CGRateS.org", utils.ConnectAttemptsCfg: 5, utils.ReconnectsCfg: 8}, }, diff --git a/data/conf/cgrates/cgrates.json b/data/conf/cgrates/cgrates.json index 23dcc2394..f646b609c 100755 --- a/data/conf/cgrates/cgrates.json +++ b/data/conf/cgrates/cgrates.json @@ -447,9 +447,6 @@ // "enabled": false, // starts the Asterisk agent: // "sessions_conns": ["*internal"], // "create_cdr": false, // create CDR out of events and sends it to CDRS component -// "low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls -// "empty_balance_context": "", // if defined, prepaid calls will be transferred to this context on empty balance -// "empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined) // "asterisk_conns":[ // instantiate connections to multiple Asterisk servers // {"address": "127.0.0.1:8088", "user": "cgrates", "password": "CGRateS.org", "connect_attempts": 3,"reconnects": 5} // ],