ChargerS with reflect detection for AttributeS nil connection, SessionS to only fork *prepaid session

This commit is contained in:
DanB
2018-08-30 12:51:19 +02:00
parent f079d6f3dc
commit 615b0a032e
6 changed files with 32 additions and 13 deletions

View File

@@ -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",

View File

@@ -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"}
],

View File

@@ -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 #Tenant ID Context FilterIDs ActivationInterval FieldName Initial Substitute Append Blocker Weight
2 cgrates.org ATTR_ACNT_1001 *sessions FLTR_ACCOUNT_1001 OfficeGroup *any Marketing true false 10
3 cgrates.org ATTR_SUPPLIER1 *chargers *string:Category:customers Subject *any supplier1 SUPPLIER1 true false 10
cgrates.org ATTR_SUPPLIER1 Category *any call false false 10

View File

@@ -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,,
1 #Direction Tenant Category Subject ActivationTime RatingPlanId RatesFallbackSubject CdrStatQueueIds
2 *out cgrates.org call *any 2018-01-01T00:00:00Z RP_TESTIT1
3 *out cgrates.org call SPECIAL_1002 2014-01-14T00:00:00Z RP_SPECIAL_1002
4 *out cgrates.org customers call *any ANY2CNT 2018-01-01T00:00:00Z RP_ANY2CNT
5 *out cgrates.org call supplier1 SUPPLIER1 2018-01-01T00:00:00Z RP_ANY1CNT
6

View File

@@ -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
}

View File

@@ -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
}