diff --git a/apier/v2/cdrs_it_test.go b/apier/v2/cdrs_it_test.go index 8a32c251f..b11786c7a 100644 --- a/apier/v2/cdrs_it_test.go +++ b/apier/v2/cdrs_it_test.go @@ -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", diff --git a/data/conf/samples/sessions/cgrates.json b/data/conf/samples/sessions/cgrates.json index c85dd0717..0cb0c356f 100644 --- a/data/conf/samples/sessions/cgrates.json +++ b/data/conf/samples/sessions/cgrates.json @@ -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"} ], diff --git a/data/tariffplans/testit/Attributes.csv b/data/tariffplans/testit/Attributes.csv index c19507c6e..d1b516142 100644 --- a/data/tariffplans/testit/Attributes.csv +++ b/data/tariffplans/testit/Attributes.csv @@ -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 diff --git a/data/tariffplans/testit/RatingProfiles.csv b/data/tariffplans/testit/RatingProfiles.csv index 102f97f27..4857a6c90 100644 --- a/data/tariffplans/testit/RatingProfiles.csv +++ b/data/tariffplans/testit/RatingProfiles.csv @@ -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,, diff --git a/engine/chargers.go b/engine/chargers.go index 85894ccb1..948da2753 100644 --- a/engine/chargers.go +++ b/engine/chargers.go @@ -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 } diff --git a/sessions/sessions.go b/sessions/sessions.go index 689035764..2f075379d 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -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 }