mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-22 07:38:45 +05:00
Merge branch 'master' into hapool
This commit is contained in:
@@ -147,6 +147,22 @@ func (self *CdrServer) RateCdrs(cgrIds, runIds, tors, cdrHosts, cdrSources, reqT
|
||||
if cdr.MediationRunId == "" { // raw CDRs which were not calculated before
|
||||
cdr.MediationRunId = utils.META_DEFAULT
|
||||
}
|
||||
// replace aliases for cases they were loaded after CDR received
|
||||
if err := LoadAlias(&AttrMatchingAlias{
|
||||
Destination: cdr.Destination,
|
||||
Direction: cdr.Direction,
|
||||
Tenant: cdr.Tenant,
|
||||
Category: cdr.Category,
|
||||
Account: cdr.Account,
|
||||
Subject: cdr.Subject,
|
||||
Context: utils.ALIAS_CONTEXT_RATING,
|
||||
}, cdr, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
// replace user profile fields
|
||||
if err := LoadUserProfile(cdr, utils.EXTRA_FIELDS); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := self.rateStoreStatsReplicate(cdr); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<CDRS> Processing CDR %+v, got error: %s", cdr, err.Error()))
|
||||
}
|
||||
@@ -192,6 +208,7 @@ func (self *CdrServer) processCdr(storedCdr *StoredCdr) (err error) {
|
||||
utils.Logger.Err(fmt.Sprintf("<CDRS> Storing primary CDR %+v, got error: %s", storedCdr, err.Error()))
|
||||
return err // Error is propagated back and we don't continue processing the CDR if we cannot store it
|
||||
}
|
||||
|
||||
}
|
||||
go self.deriveRateStoreStatsReplicate(storedCdr)
|
||||
return nil
|
||||
@@ -275,7 +292,7 @@ func (self *CdrServer) deriveCdrs(storedCdr *StoredCdr) ([]*StoredCdr, error) {
|
||||
return cdrRuns, nil
|
||||
}
|
||||
attrsDC := &utils.AttrDerivedChargers{Tenant: storedCdr.Tenant, Category: storedCdr.Category, Direction: storedCdr.Direction,
|
||||
Account: storedCdr.Account, Subject: storedCdr.Subject}
|
||||
Account: storedCdr.Account, Subject: storedCdr.Subject, Destination: storedCdr.Destination}
|
||||
var dcs utils.DerivedChargers
|
||||
if err := self.client.Call("Responder.GetDerivedChargers", attrsDC, &dcs); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("Could not get derived charging for cgrid %s, error: %s", storedCdr.CgrId, err.Error()))
|
||||
@@ -291,6 +308,7 @@ func (self *CdrServer) deriveCdrs(storedCdr *StoredCdr) ([]*StoredCdr, error) {
|
||||
}
|
||||
}
|
||||
if !matchingAllFilters { // Do not process the derived charger further if not all filters were matched
|
||||
|
||||
continue
|
||||
}
|
||||
dcReqTypeFld, _ := utils.NewRSRField(dc.ReqTypeField)
|
||||
@@ -326,6 +344,10 @@ func (self *CdrServer) deriveCdrs(storedCdr *StoredCdr) ([]*StoredCdr, error) {
|
||||
func (self *CdrServer) getCostFromRater(storedCdr *StoredCdr) (*CallCost, error) {
|
||||
cc := new(CallCost)
|
||||
var err error
|
||||
timeStart := storedCdr.AnswerTime
|
||||
if timeStart.IsZero() { // Fix for FreeSWITCH unanswered calls
|
||||
timeStart = storedCdr.SetupTime
|
||||
}
|
||||
cd := &CallDescriptor{
|
||||
TOR: storedCdr.TOR,
|
||||
Direction: storedCdr.Direction,
|
||||
@@ -334,8 +356,8 @@ func (self *CdrServer) getCostFromRater(storedCdr *StoredCdr) (*CallCost, error)
|
||||
Subject: storedCdr.Subject,
|
||||
Account: storedCdr.Account,
|
||||
Destination: storedCdr.Destination,
|
||||
TimeStart: storedCdr.AnswerTime,
|
||||
TimeEnd: storedCdr.AnswerTime.Add(storedCdr.Usage),
|
||||
TimeStart: timeStart,
|
||||
TimeEnd: timeStart.Add(storedCdr.Usage),
|
||||
DurationIndex: storedCdr.Usage,
|
||||
}
|
||||
if utils.IsSliceMember([]string{utils.META_PSEUDOPREPAID, utils.META_POSTPAID, utils.META_PREPAID, utils.PSEUDOPREPAID, utils.POSTPAID, utils.PREPAID}, storedCdr.ReqType) { // Prepaid - Cost can be recalculated in case of missing records from SM
|
||||
|
||||
Reference in New Issue
Block a user