Updated v1ProcessCDR and V1RateCDR

This commit is contained in:
Trial97
2019-12-17 17:25:41 +02:00
parent beaf0d6e98
commit 7e6c8ca61c
8 changed files with 61 additions and 92 deletions

View File

@@ -1397,6 +1397,25 @@ func TestApierResetDataAfterLoadFromFolder(t *testing.T) {
}
}
func TestApierSetChargerS(t *testing.T) {
//add a default charger
chargerProfile := &ChargerWithCache{
ChargerProfile: &engine.ChargerProfile{
Tenant: "cgrates.org",
ID: "Default",
RunID: utils.MetaDefault,
AttributeIDs: []string{"*none"},
Weight: 20,
},
}
var result string
if err := rater.Call(utils.ApierV1SetChargerProfile, chargerProfile, &result); err != nil {
t.Error(err)
} else if result != utils.OK {
t.Error("Unexpected reply returned", result)
}
}
// Make sure balance was topped-up
// Bug reported by DigiDaz over IRC
func TestApierGetAccountAfterLoad(t *testing.T) {
@@ -1435,7 +1454,6 @@ func TestApierResponderGetCost(t *testing.T) {
}
func TestApierMaxDebitInexistentAcnt(t *testing.T) {
cc := &engine.CallCost{}
cd := &engine.CallDescriptorWithArgDispatcher{
CallDescriptor: &engine.CallDescriptor{
@@ -1454,7 +1472,6 @@ func TestApierMaxDebitInexistentAcnt(t *testing.T) {
if err := rater.Call(utils.ResponderDebit, cd, cc); err == nil {
t.Error(err.Error())
}
}
func TestApierCdrServer(t *testing.T) {
@@ -1478,7 +1495,7 @@ func TestApierCdrServer(t *testing.T) {
func TestApierITGetCdrs(t *testing.T) {
var reply []*engine.ExternalCDR
req := utils.AttrGetCdrs{MediationRunIds: []string{utils.MetaRaw}}
req := utils.AttrGetCdrs{MediationRunIds: []string{utils.MetaDefault}}
if err := rater.Call(utils.ApierV1GetCDRs, req, &reply); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(reply) != 2 {
@@ -1487,22 +1504,6 @@ func TestApierITGetCdrs(t *testing.T) {
}
func TestApierITProcessCdr(t *testing.T) {
//add a default charger
chargerProfile := &ChargerWithCache{
ChargerProfile: &engine.ChargerProfile{
Tenant: "cgrates.org",
ID: "Default",
RunID: utils.MetaDefault,
AttributeIDs: []string{"*none"},
Weight: 20,
},
}
var result string
if err := rater.Call(utils.ApierV1SetChargerProfile, chargerProfile, &result); err != nil {
t.Error(err)
} else if result != utils.OK {
t.Error("Unexpected reply returned", result)
}
var reply string
cdr := &engine.CDRWithArgDispatcher{
CDR: &engine.CDR{CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderID: 123, ToR: utils.VOICE, OriginID: "dsafdsaf",
@@ -1518,7 +1519,7 @@ func TestApierITProcessCdr(t *testing.T) {
t.Error("Unexpected reply received: ", reply)
}
var cdrs []*engine.ExternalCDR
req := utils.AttrGetCdrs{MediationRunIds: []string{utils.MetaRaw}}
req := utils.AttrGetCdrs{MediationRunIds: []string{utils.MetaDefault}}
if err := rater.Call(utils.ApierV1GetCDRs, req, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(cdrs) != 3 {

View File

@@ -208,7 +208,7 @@ func testCDReProcessExternalCdr(t *testing.T) {
args := utils.RPCCDRsFilter{OriginIDs: []string{"testextcdr1"}}
if err := cdreRPC.Call(utils.ApierV2GetCDRs, args, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(cdrs) != 2 {
} else if len(cdrs) != 1 {
t.Errorf("Unexpected number of CDRs returned: %v, cdrs=%s ", len(cdrs), utils.ToJSON(cdrs))
return
} else {
@@ -322,11 +322,11 @@ func testCDReExportCDRsWithAttributes(t *testing.T) {
} else if len(rply.ExportedCGRIDs) != 2 {
t.Errorf("Unexpected number of CDR exported: %s ", utils.ToJSON(rply))
}
fileContent1 := `Cdr3,*raw,test2,OriginCDR3,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,30s,-1.0000
Cdr2,*raw,test2,OriginCDR2,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,5s,-1.0000
fileContent1 := `Cdr3,*default,test2,OriginCDR3,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,30s,-1.0000
Cdr2,*default,test2,OriginCDR2,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,5s,-1.0000
`
fileContent2 := `Cdr2,*raw,test2,OriginCDR2,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,5s,-1.0000
Cdr3,*raw,test2,OriginCDR3,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,30s,-1.0000
fileContent2 := `Cdr2,*default,test2,OriginCDR2,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,5s,-1.0000
Cdr3,*default,test2,OriginCDR3,cgrates.org,ATTR_CATEGORY,1001,ATTR_SUBJECT,+4986517174963,30s,-1.0000
`
if outContent1, err := ioutil.ReadFile(rply.ExportedPath); err != nil {
t.Error(err)

View File

@@ -687,6 +687,7 @@ func testV2CDRsGetCdrsWithRattingPlan(t *testing.T) {
t.Errorf("Unexpected cost for CDR: %f", cdrs[0].Cost)
}
}
cdrs = []*engine.ExternalCDR{} // gob will not update zero value fields
args = utils.RPCCDRsFilter{RunIDs: []string{"CustomerCharges"}, Accounts: []string{"testV2CDRsProcessCDR4"}}
if err := cdrsRpc.Call(utils.ApierV2GetCDRs, args, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())
@@ -700,6 +701,7 @@ func testV2CDRsGetCdrsWithRattingPlan(t *testing.T) {
t.Errorf("Expected ExtraInfo : %s received :%s", "", cdrs[0].ExtraInfo)
}
}
cdrs = []*engine.ExternalCDR{} // gob will not update zero value fields
args = utils.RPCCDRsFilter{RunIDs: []string{"SupplierCharges"}, Accounts: []string{"testV2CDRsProcessCDR4"}}
if err := cdrsRpc.Call(utils.ApierV2GetCDRs, args, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())

View File

@@ -69,11 +69,6 @@
},
"chargers": {
"enabled": true,
"attributes_conns": ["*internal"],
},
"apier": {
"caches_conns":["*internal"],
"scheduler_conns": ["*internal"],

View File

@@ -39,7 +39,6 @@
"cdrs": {
"enabled": true,
"chargers_conns":["*internal"],
"rals_conns": ["*internal"],
},

View File

@@ -674,54 +674,26 @@ func (cdrS *CDRServer) V1ProcessCDR(cdr *CDRWithArgDispatcher, reply *string) (e
if cdr.Subject == utils.EmptyString { // Use account information as rating subject if missing
cdr.Subject = cdr.Account
}
if !cdr.PreRated { // Enforce the RunID if CDR is not rated
cdr.RunID = utils.MetaRaw
}
if utils.SliceHasMember([]string{"", utils.MetaRaw}, cdr.RunID) {
cdr.Cost = -1.0
if cdr.RunID == utils.EmptyString {
cdr.RunID = utils.MetaDefault
}
cgrEv := &utils.CGREventWithArgDispatcher{
CGREvent: &utils.CGREvent{
Tenant: cdr.Tenant,
ID: utils.UUIDSha1Prefix(),
Event: cdr.AsMapStringIface(),
},
CGREvent: cdr.AsCGREvent(),
ArgDispatcher: cdr.ArgDispatcher,
}
if len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0 {
if err = cdrS.attrSProcessEvent(cgrEv); err != nil {
err = utils.NewErrServerError(err)
return
}
}
if cdrS.cgrCfg.CdrsCfg().StoreCdrs { // Store *raw CDR
if err = cdrS.cdrDb.SetCDR(cdr.CDR, false); err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> storing primary CDR %+v, got error: %s",
utils.CDRs, cdr, err.Error()))
err = utils.NewErrServerError(err) // Cannot store CDR
return
}
}
if len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0 {
cdrS.exportCDRs([]*CDR{cdr.CDR}) // Replicate raw CDR
}
if len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0 {
go cdrS.thdSProcessEvent(cgrEv)
}
if len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0 {
go cdrS.statSProcessEvent(cgrEv)
}
if len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) != 0 &&
utils.SliceHasMember([]string{"", utils.MetaRaw}, cdr.RunID) {
go cdrS.chrgProcessEvent(cgrEv, len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0,
cdrS.cgrCfg.CdrsCfg().StoreCdrs, false,
len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0, len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0,
len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0)
if err = cdrS.processEvent(cgrEv,
len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) != 0 && !cdr.PreRated,
len(cdrS.cgrCfg.CdrsCfg().AttributeSConns) != 0,
!cdr.PreRated, // rate the CDR if is not PreRated
cdrS.cgrCfg.CdrsCfg().StoreCdrs,
false, // no rerate
len(cdrS.cgrCfg.CdrsCfg().OnlineCDRExports) != 0,
len(cdrS.cgrCfg.CdrsCfg().ThresholdSConns) != 0,
len(cdrS.cgrCfg.CdrsCfg().StatSConns) != 0); err != nil {
return
}
*reply = utils.OK
return
}
@@ -800,10 +772,8 @@ func (cdrS *CDRServer) V1ProcessEvent(arg *ArgV1ProcessEvent, reply *string) (er
// end of processing options
cgrEv := &utils.CGREventWithArgDispatcher{
CGREvent: &arg.CGREvent,
}
if arg.ArgDispatcher != nil {
cgrEv.ArgDispatcher = arg.ArgDispatcher
CGREvent: &arg.CGREvent,
ArgDispatcher: arg.ArgDispatcher,
}
if err = cdrS.processEvent(cgrEv,
chrgS, attrS, ralS, store, reRate, export, thdS, stS); err != nil {
@@ -947,23 +917,27 @@ func (cdrS *CDRServer) V1RateCDRs(arg *ArgRateCDRs, reply *string) (err error) {
if flgs.HasKey(utils.MetaStatS) {
statS = flgs.GetBool(utils.MetaStatS)
}
if flgs.GetBool(utils.MetaChargers) {
if len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) == 0 {
return utils.NewErrNotConnected(utils.ChargerS)
chrgS := len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) != 0
if flgs.HasKey(utils.MetaChargers) {
chrgS = flgs.GetBool(utils.MetaChargers)
}
if chrgS && len(cdrS.cgrCfg.CdrsCfg().ChargerSConns) == 0 {
return utils.NewErrNotConnected(utils.ChargerS)
}
for _, cdr := range cdrs {
cdr.Cost = -1 // the cost will be recalculated
cgrEv := &utils.CGREventWithArgDispatcher{
CGREvent: cdr.AsCGREvent(),
ArgDispatcher: arg.ArgDispatcher,
}
for _, cdr := range cdrs {
argCharger := &utils.CGREventWithArgDispatcher{
CGREvent: cdr.AsCGREvent(),
ArgDispatcher: arg.ArgDispatcher,
}
if err = cdrS.chrgProcessEvent(argCharger,
false, store, true, export, thdS, statS); err != nil {
return utils.NewErrServerError(err)
}
if err = cdrS.processEvent(cgrEv,
chrgS, false, true, store, true, export, thdS, statS); err != nil {
return utils.NewErrServerError(err)
}
}
*reply = utils.OK
return nil
return
}
// V1ProcessExternalCDR is used to process external CDRs

View File

@@ -184,7 +184,7 @@ func testV1CDRsProcessEventAttrS(t *testing.T) {
var replyAt *engine.AttributeProfile
if err := pecdrsRpc.Call(utils.ApierV1GetAttributeProfile,
&utils.TenantID{Tenant: "cgrates.org", ID: "ApierTest"}, &replyAt); err != nil {
t.Error(err)
t.Fatal(err)
}
replyAt.Compile()
if !reflect.DeepEqual(alsPrf, replyAt) {

View File

@@ -302,8 +302,6 @@ const (
MetaSQSjsonMap = "*sqs_json_map"
MetaKafkajsonMap = "*kafka_json_map"
MetaSQL = "*sql"
MetaMySQL = "*mysql"
MetaPostgres = "*postgres"
MetaS3jsonMap = "*s3_json_map"
CONFIG_PATH = "/etc/cgrates/"
DISCONNECT_CAUSE = "DisconnectCause"