mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-17 06:09:53 +05:00
ChargerS with reflect detection for AttributeS nil connection, SessionS to only fork *prepaid session
This commit is contained in:
@@ -126,8 +126,9 @@ func testV2CDRsProcessCDR(t *testing.T) {
|
||||
utils.OriginHost: "192.168.1.1",
|
||||
utils.Source: "testV2CDRsProcessCDR",
|
||||
utils.RequestType: utils.META_RATED,
|
||||
utils.Category: "customers",
|
||||
utils.Category: "call",
|
||||
utils.Account: "testV2CDRsProcessCDR",
|
||||
utils.Subject: "ANY2CNT",
|
||||
utils.Destination: "+4986517174963",
|
||||
utils.AnswerTime: time.Date(2018, 8, 24, 16, 00, 26, 0, time.UTC),
|
||||
utils.Usage: time.Duration(1) * time.Minute,
|
||||
@@ -191,7 +192,7 @@ func testV2CDRsRateCDRs(t *testing.T) {
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Direction: "*out",
|
||||
Subject: "supplier1",
|
||||
Subject: "SUPPLIER1",
|
||||
RatingPlanActivations: []*utils.TPRatingActivation{
|
||||
&utils.TPRatingActivation{
|
||||
ActivationTime: "2018-01-01T00:00:00Z",
|
||||
|
||||
@@ -36,6 +36,14 @@
|
||||
},
|
||||
|
||||
|
||||
"chargers": {
|
||||
"enabled": true,
|
||||
"attributes_conns": [
|
||||
{"address": "127.0.0.1:2012", "transport": "*json"}
|
||||
],
|
||||
},
|
||||
|
||||
|
||||
"resources": {
|
||||
"enabled": true,
|
||||
},
|
||||
@@ -69,6 +77,9 @@
|
||||
"sessions": {
|
||||
"enabled": true,
|
||||
"session_ttl": "50ms",
|
||||
"chargers_conns": [
|
||||
{"address": "127.0.0.1:2012", "transport": "*json"}
|
||||
],
|
||||
"rals_conns": [
|
||||
{"address": "127.0.0.1:2012", "transport": "*json"}
|
||||
],
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#Tenant,ID,Context,FilterIDs,ActivationInterval,FieldName,Initial,Substitute,Append,Blocker,Weight
|
||||
cgrates.org,ATTR_ACNT_1001,*sessions,FLTR_ACCOUNT_1001,,OfficeGroup,*any,Marketing,true,false,10
|
||||
cgrates.org,ATTR_SUPPLIER1,*chargers,*string:Category:customers,,Subject,*any,supplier1,true,false,10
|
||||
cgrates.org,ATTR_SUPPLIER1,,,,Category,*any,call,false,false,10
|
||||
cgrates.org,ATTR_SUPPLIER1,*chargers,,,Subject,*any,SUPPLIER1,true,false,10
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#Direction,Tenant,Category,Subject,ActivationTime,RatingPlanId,RatesFallbackSubject,CdrStatQueueIds
|
||||
*out,cgrates.org,call,*any,2018-01-01T00:00:00Z,RP_TESTIT1,,
|
||||
*out,cgrates.org,call,SPECIAL_1002,2014-01-14T00:00:00Z,RP_SPECIAL_1002,,
|
||||
*out,cgrates.org,customers,*any,2018-01-01T00:00:00Z,RP_ANY2CNT,,
|
||||
*out,cgrates.org,call,supplier1,2018-01-01T00:00:00Z,RP_ANY1CNT,,
|
||||
*out,cgrates.org,call,ANY2CNT,2018-01-01T00:00:00Z,RP_ANY2CNT,,
|
||||
*out,cgrates.org,call,SUPPLIER1,2018-01-01T00:00:00Z,RP_ANY1CNT,,
|
||||
|
||||
|
||||
|
@@ -21,6 +21,7 @@ package engine
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
@@ -30,6 +31,9 @@ import (
|
||||
func NewChargerService(dm *DataManager, filterS *FilterS,
|
||||
attrS rpcclient.RpcClientConnection,
|
||||
cfg *config.CGRConfig) (*ChargerService, error) {
|
||||
if attrS != nil && reflect.ValueOf(attrS).IsNil() {
|
||||
attrS = nil
|
||||
}
|
||||
return &ChargerService{dm: dm, filterS: filterS,
|
||||
attrS: attrS, cfg: cfg}, nil
|
||||
}
|
||||
|
||||
@@ -519,15 +519,16 @@ func (smg *SMGeneric) v2ForkSessions(tnt string, evStart *engine.SafEvent,
|
||||
err.Error() != utils.ErrNotFound.Error() {
|
||||
return nil, err
|
||||
}
|
||||
if len(chrgrs) == 0 {
|
||||
return []*SMGSession{
|
||||
&SMGSession{CGRID: cgrID, ResourceID: resourceID, EventStart: evStart,
|
||||
RunID: utils.META_NONE, Timezone: smg.Timezone,
|
||||
rals: smg.rals, cdrsrv: smg.cdrsrv,
|
||||
clntConn: clntConn}}, nil
|
||||
}
|
||||
noPrepaidSs := []*SMGSession{
|
||||
&SMGSession{CGRID: cgrID, ResourceID: resourceID, EventStart: evStart,
|
||||
RunID: utils.META_NONE, Timezone: smg.Timezone,
|
||||
rals: smg.rals, cdrsrv: smg.cdrsrv,
|
||||
clntConn: clntConn}}
|
||||
for _, chrgr := range chrgrs {
|
||||
evStart := engine.NewSafEvent(chrgr.CGREvent.Event)
|
||||
if evStart.GetStringIgnoreErrors(utils.RequestType) != utils.META_PREPAID {
|
||||
continue // not forking non-prepaid session
|
||||
}
|
||||
startTime := evStart.GetTimeIgnoreErrors(utils.AnswerTime, smg.Timezone)
|
||||
if startTime.IsZero() { // AnswerTime not parsable, try SetupTime
|
||||
startTime = evStart.GetTimeIgnoreErrors(utils.SetupTime, smg.Timezone)
|
||||
@@ -556,6 +557,9 @@ func (smg *SMGeneric) v2ForkSessions(tnt string, evStart *engine.SafEvent,
|
||||
CD: cd, clntConn: clntConn,
|
||||
clientProto: smg.cgrCfg.SessionSCfg().ClientProtocol})
|
||||
}
|
||||
if len(ss) == 0 { // we have no *prepaid session to work with
|
||||
return noPrepaidSs, nil
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user