From 0ea4987b8e5895ba4aca38b45aca85589cf5741e Mon Sep 17 00:00:00 2001 From: DanB Date: Sun, 18 Sep 2016 14:47:19 +0200 Subject: [PATCH] CDRS fix CostSource when saving CDRs, SMAsterisk - better event naming when converting SMAEvent to SMGEvent --- .../asterisk/etc/asterisk/extensions.conf | 2 +- engine/cdrs.go | 5 ++-- sessionmanager/sma_event.go | 13 +++++---- sessionmanager/sma_event_test.go | 27 ++++++++++--------- sessionmanager/smasterisk.go | 3 +++ 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/data/tutorials/asterisk_events/asterisk/etc/asterisk/extensions.conf b/data/tutorials/asterisk_events/asterisk/etc/asterisk/extensions.conf index 39fe72638..a69d09e7a 100755 --- a/data/tutorials/asterisk_events/asterisk/etc/asterisk/extensions.conf +++ b/data/tutorials/asterisk_events/asterisk/etc/asterisk/extensions.conf @@ -2,7 +2,7 @@ exten => _1XXX,1,NoOp() same => n,Set(CGRMaxSessionTime=0); use it to disconnect automatically the call if CGRateS is not active same => n,DumpChan() - same => n,Stasis(cgrates_auth,cgr_reqtype=*prepaid,cgr_destination=${EXTEN}) + same => n,Stasis(cgrates_auth,cgr_reqtype=*prepaid,cgr_supplier=supplier1) same => n,Dial(PJSIP/${EXTEN},30,L(${CGRMaxSessionTime})) same => n,Hangup() diff --git a/engine/cdrs.go b/engine/cdrs.go index 723af6130..32b76bf7f 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -383,11 +383,11 @@ func (self *CdrServer) rateCDR(cdr *CDR) ([]*CDR, error) { } cdrClone.Cost = smCost.CostDetails.Cost cdrClone.CostDetails = smCost.CostDetails + cdrClone.CostSource = smCost.CostSource cdrsRated = append(cdrsRated, cdrClone) } return cdrsRated, nil - } - if len(smCosts) == 0 { //calculate CDR as for pseudoprepaid + } else { //calculate CDR as for pseudoprepaid utils.Logger.Warning(fmt.Sprintf(" WARNING: Could not find CallCostLog for cgrid: %s, source: %s, runid: %s, will recalculate", cdr.CGRID, utils.SESSION_MANAGER_SOURCE, cdr.RunID)) qryCC, err = self.getCostFromRater(cdr) } @@ -432,6 +432,7 @@ func (self *CdrServer) getCostFromRater(cdr *CDR) (*CallCost, error) { if err != nil { return cc, err } + cdr.CostSource = utils.CDRS_SOURCE return cc, nil } diff --git a/sessionmanager/sma_event.go b/sessionmanager/sma_event.go index 01bc7a0e2..1b67c6999 100644 --- a/sessionmanager/sma_event.go +++ b/sessionmanager/sma_event.go @@ -176,11 +176,11 @@ func (smaEv *SMAsteriskEvent) AsSMGenericEvent() *SMGenericEvent { var evName string switch smaEv.EventType() { case ARIStasisStart: - evName = utils.CGR_AUTHORIZATION + evName = SMAAuthorization case ARIChannelStateChange: - evName = utils.CGR_SESSION_START + evName = SMASessionStart case ARIChannelDestroyed: - evName = utils.CGR_SESSION_END + evName = SMASessionTerminate } smgEv := SMGenericEvent{utils.EVENT_NAME: evName} smgEv[utils.ACCID] = smaEv.ChannelID() @@ -200,6 +200,9 @@ func (smaEv *SMAsteriskEvent) AsSMGenericEvent() *SMGenericEvent { smgEv[utils.ACCOUNT] = smaEv.Account() smgEv[utils.DESTINATION] = smaEv.Destination() smgEv[utils.SETUP_TIME] = smaEv.Timestamp() + if smaEv.Supplier() != "" { + smgEv[utils.SUPPLIER] = smaEv.Supplier() + } for extraKey, extraVal := range smaEv.ExtraParameters() { // Append extraParameters smgEv[extraKey] = extraVal } @@ -212,12 +215,12 @@ func (smaEv *SMAsteriskEvent) UpdateSMGEvent(smgEv *SMGenericEvent) error { resSMGEv := *smgEv switch smaEv.EventType() { case ARIChannelStateChange: - resSMGEv[utils.EVENT_NAME] = utils.CGR_SESSION_START if smaEv.ChannelState() == channelUp { + resSMGEv[utils.EVENT_NAME] = SMASessionStart resSMGEv[utils.ANSWER_TIME] = smaEv.Timestamp() } case ARIChannelDestroyed: - resSMGEv[utils.EVENT_NAME] = utils.CGR_SESSION_END + resSMGEv[utils.EVENT_NAME] = SMASessionTerminate resSMGEv[utils.DISCONNECT_CAUSE] = smaEv.DisconnectCause() if _, hasIt := resSMGEv[utils.ANSWER_TIME]; !hasIt { resSMGEv[utils.USAGE] = "0s" diff --git a/sessionmanager/sma_event_test.go b/sessionmanager/sma_event_test.go index dee83bb5e..c692679b7 100644 --- a/sessionmanager/sma_event_test.go +++ b/sessionmanager/sma_event_test.go @@ -26,7 +26,7 @@ import ( ) var ( - stasisStart = `{"application":"cgrates_auth","type":"StasisStart","timestamp":"2016-09-12T13:53:48.919+0200","args":["cgr_reqtype=*prepaid","cgr_destination=1003", "extra1=val1", "extra2=val2"],"channel":{"id":"1473681228.6","state":"Ring","name":"PJSIP/1001-00000004","caller":{"name":"1001","number":"1001"},"language":"en","connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"internal","exten":"1002","priority":2},"creationtime":"2016-09-12T13:53:48.918+0200"}}` + stasisStart = `{"application":"cgrates_auth","type":"StasisStart","timestamp":"2016-09-12T13:53:48.919+0200","args":["cgr_reqtype=*prepaid","cgr_supplier=supplier1", "extra1=val1", "extra2=val2"],"channel":{"id":"1473681228.6","state":"Ring","name":"PJSIP/1001-00000004","caller":{"name":"1001","number":"1001"},"language":"en","connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"internal","exten":"1002","priority":2},"creationtime":"2016-09-12T13:53:48.918+0200"}}` channelStateChange = `{"application":"cgrates_auth","type":"ChannelStateChange","timestamp":"2016-09-12T13:53:52.110+0200","channel":{"id":"1473681228.6","state":"Up","name":"PJSIP/1001-00000004","caller":{"name":"1001","number":"1001"},"language":"en","connected":{"name":"","number":"1002"},"accountcode":"","dialplan":{"context":"internal","exten":"1002","priority":3},"creationtime":"2016-09-12T13:53:48.918+0200"}}` channelAnsweredDestroyed = `{"type":"ChannelDestroyed","timestamp":"2016-09-12T13:54:27.335+0200","application":"cgrates_auth","cause_txt":"Normal Clearing","channel":{"id":"1473681228.6","state":"Up","name":"PJSIP/1001-00000004","caller":{"name":"1001","number":"1001"},"language":"en","connected":{"name":"","number":"1002"},"accountcode":"","dialplan":{"context":"internal","exten":"1002","priority":3},"creationtime":"2016-09-12T13:53:48.918+0200"},"cause":16}` channelUnansweredDestroyed = `{"type":"ChannelDestroyed","timestamp":"2016-09-12T18:00:18.121+0200","application":"cgrates_auth","cause_txt":"Normal Clearing","channel":{"id":"1473696018.2","state":"Ring","name":"PJSIP/1002-00000002","caller":{"name":"1002","number":"1002"},"language":"en","connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"internal","exten":"1002","priority":2},"creationtime":"2016-09-12T18:00:18.109+0200"},"cause":16}` @@ -39,7 +39,7 @@ func TestSMAParseStasisArgs(t *testing.T) { t.Error(err) } smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") - expAppArgs := map[string]string{"cgr_reqtype": "*prepaid", "cgr_destination": "1003", "extra1": "val1", "extra2": "val2"} + expAppArgs := map[string]string{"cgr_reqtype": "*prepaid", "cgr_supplier": "supplier1", "extra1": "val1", "extra2": "val2"} if !reflect.DeepEqual(smaEv.cachedFields, expAppArgs) { t.Errorf("Expecting: %+v, received: %+v", smaEv.cachedFields, expAppArgs) } @@ -128,7 +128,7 @@ func TestSMAEventDestination(t *testing.T) { t.Error(err) } smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") - if smaEv.Destination() != "1003" { + if smaEv.Destination() != "1002" { t.Error("Received:", smaEv.Destination()) } ev = make(map[string]interface{}) // Clear previous data @@ -284,7 +284,7 @@ func TestSMAEventSupplier(t *testing.T) { t.Error(err) } smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") - if smaEv.Supplier() != "" { + if smaEv.Supplier() != "supplier1" { t.Error("Received:", smaEv.Supplier()) } ev = map[string]interface{}{"args": []interface{}{"cgr_supplier=supplier1"}} // Clear previous data @@ -382,13 +382,14 @@ func TestSMAEventAsSMGenericEvent(t *testing.T) { t.Error(err) } eSMGEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_AUTHORIZATION, + utils.EVENT_NAME: SMAAuthorization, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", utils.ACCOUNT: "1001", - utils.DESTINATION: "1003", + utils.DESTINATION: "1002", utils.SETUP_TIME: "2016-09-12T13:53:48.919+0200", + utils.SUPPLIER: "supplier1", "extra1": "val1", "extra2": "val2", } @@ -405,7 +406,7 @@ func TestSMAEventUpdateSMGEventAnswered(t *testing.T) { } smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") smgEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_AUTHORIZATION, + utils.EVENT_NAME: SMAAuthorization, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -416,7 +417,7 @@ func TestSMAEventUpdateSMGEventAnswered(t *testing.T) { "extra2": "val2", } eSMGEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_SESSION_START, + utils.EVENT_NAME: SMASessionStart, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -439,7 +440,7 @@ func TestSMAEventUpdateSMGEventAnswered(t *testing.T) { } smaEv = NewSMAsteriskEvent(ev, "127.0.0.1") eSMGEv = &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_SESSION_END, + utils.EVENT_NAME: SMASessionTerminate, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -461,7 +462,7 @@ func TestSMAEventUpdateSMGEventAnswered(t *testing.T) { func TestSMAEventUpdateSMGEventUnaswered(t *testing.T) { smgEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_AUTHORIZATION, + utils.EVENT_NAME: SMAAuthorization, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -472,7 +473,7 @@ func TestSMAEventUpdateSMGEventUnaswered(t *testing.T) { "extra2": "val2", } eSMGEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_SESSION_END, + utils.EVENT_NAME: SMASessionTerminate, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -499,7 +500,7 @@ func TestSMAEventUpdateSMGEventUnaswered(t *testing.T) { func TestSMAEventUpdateSMGEventBusy(t *testing.T) { smgEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_AUTHORIZATION, + utils.EVENT_NAME: SMAAuthorization, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", @@ -510,7 +511,7 @@ func TestSMAEventUpdateSMGEventBusy(t *testing.T) { "extra2": "val2", } eSMGEv := &SMGenericEvent{ - utils.EVENT_NAME: utils.CGR_SESSION_END, + utils.EVENT_NAME: SMASessionTerminate, utils.ACCID: "1473681228.6", utils.REQTYPE: "*prepaid", utils.CDRHOST: "127.0.0.1", diff --git a/sessionmanager/smasterisk.go b/sessionmanager/smasterisk.go index 7a388cdc1..28eab4f9b 100644 --- a/sessionmanager/smasterisk.go +++ b/sessionmanager/smasterisk.go @@ -41,6 +41,9 @@ const ( channelState = "channelState" channelUp = "Up" timestamp = "timestamp" + SMAAuthorization = "SMA_AUTHORIZATION" + SMASessionStart = "SMA_SESSION_START" + SMASessionTerminate = "SMA_SESSION_TERMINATE" ) func NewSMAsterisk(cgrCfg *config.CGRConfig, astConnIdx int, smg rpcclient.RpcClientConnection) (*SMAsterisk, error) {