mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 05:09:54 +05:00
Update aringo library
This commit is contained in:
committed by
Dan Christian Bogos
parent
40e40710a1
commit
6a89dd1d6b
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
package agents
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strconv"
|
||||
@@ -99,6 +100,7 @@ func (sma *AsteriskAgent) ListenAndServe() (err error) {
|
||||
case astRawEv := <-sma.astEvChan:
|
||||
smAsteriskEvent := NewSMAsteriskEvent(astRawEv,
|
||||
strings.Split(sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address, ":")[0])
|
||||
|
||||
switch smAsteriskEvent.EventType() {
|
||||
case ARIStasisStart:
|
||||
go sma.handleStasisStart(smAsteriskEvent)
|
||||
@@ -192,12 +194,13 @@ func (sma *AsteriskAgent) handleStasisStart(ev *SMAsteriskEvent) {
|
||||
if *authReply.MaxUsage == time.Duration(0) {
|
||||
sma.hangupChannel(ev.ChannelID(), "")
|
||||
return
|
||||
} else if *authReply.MaxUsage != time.Duration(-1) {
|
||||
// Set absolute timeout for non-postpaid calls
|
||||
if !sma.setChannelVar(ev.ChannelID(), CGRMaxSessionTime,
|
||||
strconv.Itoa(int(authReply.MaxUsage.Seconds()*1000))) {
|
||||
return
|
||||
}
|
||||
} else if *authReply.MaxUsage == time.Duration(-1) {
|
||||
*authReply.MaxUsage = sma.cgrCfg.SessionSCfg().MaxCallDuration
|
||||
}
|
||||
// Set absolute timeout for non-postpaid calls
|
||||
if !sma.setChannelVar(ev.ChannelID(), CGRMaxSessionTime,
|
||||
strconv.Itoa(int(authReply.MaxUsage.Seconds()*1000))) {
|
||||
return
|
||||
}
|
||||
}
|
||||
if authReply.ResourceAllocation != nil {
|
||||
@@ -232,6 +235,7 @@ func (sma *AsteriskAgent) handleChannelStateChange(ev *SMAsteriskEvent) {
|
||||
if ev.ChannelState() != channelUp {
|
||||
return
|
||||
}
|
||||
|
||||
sma.evCacheMux.RLock()
|
||||
cgrEv, hasIt := sma.eventsCache[ev.ChannelID()]
|
||||
sma.evCacheMux.RUnlock()
|
||||
@@ -331,23 +335,25 @@ func (sma *AsteriskAgent) Call(serviceMethod string, args interface{}, reply int
|
||||
}
|
||||
|
||||
func (sma *AsteriskAgent) V1GetActiveSessionIDs(ignParam string,
|
||||
sessionIDs *[]*sessions.SessionID) (err error) {
|
||||
var sIDs []*sessions.SessionID
|
||||
i := 0
|
||||
sma.evCacheMux.RLock()
|
||||
originIds := make([]string, len(sma.eventsCache))
|
||||
for orgId := range sma.eventsCache {
|
||||
originIds[i] = orgId
|
||||
i++
|
||||
sessionIDs *[]*sessions.SessionID) error {
|
||||
var slMpIface []map[string]interface{} // decode the result from ari into a slice of map[string]interface{}
|
||||
if mp, err := sma.astConn.Call(
|
||||
aringo.HTTP_GET,
|
||||
fmt.Sprintf("http://%s/ari/channels",
|
||||
sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address),
|
||||
nil); err != nil {
|
||||
return err
|
||||
} else if err := json.Unmarshal(mp, &slMpIface); err != nil {
|
||||
return err
|
||||
}
|
||||
sma.evCacheMux.RUnlock()
|
||||
for _, orgId := range originIds {
|
||||
var sIDs []*sessions.SessionID
|
||||
for _, mpIface := range slMpIface {
|
||||
sIDs = append(sIDs, &sessions.SessionID{
|
||||
OriginHost: strings.Split(sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address, ":")[0],
|
||||
OriginID: orgId},
|
||||
OriginID: mpIface["id"].(string)},
|
||||
)
|
||||
}
|
||||
*sessionIDs = sIDs
|
||||
return
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -498,6 +499,10 @@ func testCall1001Cdrs(t *testing.T) {
|
||||
t.Errorf("Unexpected RequestType for CDR: %+v", cdr.RequestType)
|
||||
}
|
||||
if cdr.Destination == "1002" {
|
||||
// in case of Asterisk take the integer part from usage
|
||||
if optConf == utils.Asterisk {
|
||||
cdr.Usage = strings.Split(cdr.Usage, ".")[0] + "s"
|
||||
}
|
||||
if cdr.Usage != "1m7s" && cdr.Usage != "1m8s" { // Usage as seconds
|
||||
t.Errorf("Unexpected Usage for CDR: %+v", cdr.Usage)
|
||||
}
|
||||
@@ -505,6 +510,10 @@ func testCall1001Cdrs(t *testing.T) {
|
||||
t.Errorf("Unexpected CostSource for CDR: %+v", cdr.CostSource)
|
||||
}
|
||||
} else if cdr.Destination == "1003" {
|
||||
// in case of Asterisk take the integer part from usage
|
||||
if optConf == utils.Asterisk {
|
||||
cdr.Usage = strings.Split(cdr.Usage, ".")[0] + "s"
|
||||
}
|
||||
if cdr.Usage != "12s" && cdr.Usage != "13s" { // Usage as seconds
|
||||
t.Errorf("Unexpected Usage for CDR: %+v", cdr.Usage)
|
||||
}
|
||||
@@ -529,6 +538,10 @@ func testCall1002Cdrs(t *testing.T) {
|
||||
if reply[0].RequestType != utils.META_POSTPAID {
|
||||
t.Errorf("Unexpected RequestType for CDR: %+v", reply[0].RequestType)
|
||||
}
|
||||
// in case of Asterisk take the integer part from usage
|
||||
if optConf == utils.Asterisk {
|
||||
reply[0].Usage = strings.Split(reply[0].Usage, ".")[0] + "s"
|
||||
}
|
||||
if reply[0].Usage != "1m5s" && reply[0].Usage != "1m6s" { // Usage as seconds
|
||||
t.Errorf("Unexpected Usage for CDR: %+v", reply[0].Usage)
|
||||
}
|
||||
@@ -552,6 +565,10 @@ func testCall1003Cdrs(t *testing.T) {
|
||||
if cdr.RequestType != utils.META_PREPAID {
|
||||
t.Errorf("Unexpected RequestType for CDR: %+v", cdr.RequestType)
|
||||
}
|
||||
// in case of Asterisk take the integer part from usage
|
||||
if optConf == utils.Asterisk {
|
||||
cdr.Usage = strings.Split(cdr.Usage, ".")[0] + "s"
|
||||
}
|
||||
if cdr.Usage != "15s" && cdr.Usage != "16s" &&
|
||||
cdr.Usage != "20s" && cdr.Usage != "21s" { // Usage as seconds
|
||||
t.Errorf("Unexpected Usage for CDR: %+v", cdr.Usage)
|
||||
@@ -578,6 +595,10 @@ func testCallStatMetrics(t *testing.T) {
|
||||
utils.MetaTCC: "1.34009",
|
||||
utils.MetaTCD: "2m24s",
|
||||
}
|
||||
firstStatMetrics4 := map[string]string{
|
||||
utils.MetaTCC: "1.35346",
|
||||
utils.MetaTCD: "2m24s",
|
||||
}
|
||||
secondStatMetrics1 := map[string]string{
|
||||
utils.MetaTCC: "0.6",
|
||||
utils.MetaTCD: "35s",
|
||||
@@ -590,15 +611,24 @@ func testCallStatMetrics(t *testing.T) {
|
||||
if err := tutorialCallsRpc.Call(utils.StatSv1GetQueueStringMetrics,
|
||||
&utils.TenantID{Tenant: "cgrates.org", ID: "Stats2"}, &metrics); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(firstStatMetrics1, metrics) &&
|
||||
}
|
||||
if optConf == utils.Asterisk {
|
||||
metrics[utils.MetaTCD] = strings.Split(metrics[utils.MetaTCD], ".")[0] + "s"
|
||||
}
|
||||
if !reflect.DeepEqual(firstStatMetrics1, metrics) &&
|
||||
!reflect.DeepEqual(firstStatMetrics2, metrics) &&
|
||||
!reflect.DeepEqual(firstStatMetrics3, metrics) {
|
||||
!reflect.DeepEqual(firstStatMetrics3, metrics) &&
|
||||
!reflect.DeepEqual(firstStatMetrics4, metrics) {
|
||||
t.Errorf("expecting: %+v, received reply: %s", firstStatMetrics1, metrics)
|
||||
}
|
||||
if err := tutorialCallsRpc.Call(utils.StatSv1GetQueueStringMetrics,
|
||||
&utils.TenantID{Tenant: "cgrates.org", ID: "Stats2_1"}, &metrics); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(secondStatMetrics1, metrics) &&
|
||||
}
|
||||
if optConf == utils.Asterisk {
|
||||
metrics[utils.MetaTCD] = strings.Split(metrics[utils.MetaTCD], ".")[0] + "s"
|
||||
}
|
||||
if !reflect.DeepEqual(secondStatMetrics1, metrics) &&
|
||||
!reflect.DeepEqual(secondStatMetrics2, metrics) {
|
||||
t.Errorf("expecting: %+v, received reply: %s", secondStatMetrics1, metrics)
|
||||
}
|
||||
@@ -772,8 +802,7 @@ func testCallSyncSessions(t *testing.T) {
|
||||
t.Errorf("Resources: %+v", rsAfter)
|
||||
}
|
||||
for _, r := range *rsAfter {
|
||||
if r.ID == "ResGroup1" &&
|
||||
(len(r.Usages) != 0 || len(r.TTLIdx) != 0) {
|
||||
if r.ID == "ResGroup1" && len(r.Usages) != 0 {
|
||||
t.Errorf("Unexpected resource: %+v", utils.ToJSON(r))
|
||||
}
|
||||
}
|
||||
|
||||
2
glide.lock
generated
2
glide.lock
generated
@@ -8,7 +8,7 @@ imports:
|
||||
subpackages:
|
||||
- jsonrpc
|
||||
- name: github.com/cgrates/aringo
|
||||
version: 47cdb110c5ff42bddf2b801dc5ae8ceb15d2d602
|
||||
version: f996da7890eaec95ba13240253744446e17e6598
|
||||
- name: github.com/cgrates/fsock
|
||||
version: bcbd5e75c07dddb12ac86f1f861f2bdddc1d4596
|
||||
- name: github.com/cgrates/kamevapi
|
||||
|
||||
@@ -292,7 +292,7 @@ func (smg *SMGeneric) ttlTerminate(s *SMGSession, tmtr *smgSessionTerminator) {
|
||||
var reply string
|
||||
argsRU := utils.ArgRSv1ResourceUsage{
|
||||
CGREvent: utils.CGREvent{
|
||||
Tenant: s.EventStart.GetStringIgnoreErrors(utils.Tenant),
|
||||
Tenant: s.Tenant,
|
||||
Event: s.EventStart.AsMapInterface(),
|
||||
},
|
||||
UsageID: s.ResourceID,
|
||||
|
||||
Reference in New Issue
Block a user