mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 05:09:54 +05:00
Diameter - consider smallest MaxUsage returned
This commit is contained in:
@@ -69,7 +69,7 @@ func (self *DiameterAgent) handlers() diam.Handler {
|
||||
return dSM
|
||||
}
|
||||
|
||||
func (self DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestProcessor, cca *CCA) (bool, error) {
|
||||
func (self DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestProcessor, processorVars map[string]string, cca *CCA) (bool, error) {
|
||||
passesAllFilters := true
|
||||
for _, fldFilter := range reqProcessor.RequestFilter {
|
||||
if passes, _ := passesFieldFilter(ccr.diamMessage, fldFilter, nil); !passes {
|
||||
@@ -122,7 +122,6 @@ func (self DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestPro
|
||||
}
|
||||
}
|
||||
var maxUsage float64
|
||||
processorVars := make(map[string]string)
|
||||
processorVars[CGRResultCode] = strconv.Itoa(diam.Success)
|
||||
processorVars[CGRError] = ""
|
||||
if reqProcessor.DryRun { // DryRun does not send over network
|
||||
@@ -166,6 +165,15 @@ func (self DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestPro
|
||||
processorVars[CGRResultCode] = strconv.Itoa(DiameterRatingFailed)
|
||||
}
|
||||
}
|
||||
if maxUsage < 0 {
|
||||
maxUsage = 0
|
||||
}
|
||||
if prevMaxUsageStr, hasKey := processorVars[CGRMaxUsage]; hasKey {
|
||||
prevMaxUsage, _ := strconv.ParseFloat(prevMaxUsageStr, 64)
|
||||
if prevMaxUsage < maxUsage {
|
||||
maxUsage = prevMaxUsage
|
||||
}
|
||||
}
|
||||
processorVars[CGRMaxUsage] = strconv.FormatFloat(maxUsage, 'f', -1, 64)
|
||||
}
|
||||
if err := messageSetAVPsWithPath(cca.diamMessage, []interface{}{"Result-Code"}, processorVars[CGRResultCode],
|
||||
@@ -191,8 +199,9 @@ func (self *DiameterAgent) handleCCR(c diam.Conn, m *diam.Message) {
|
||||
}
|
||||
cca := NewBareCCAFromCCR(ccr, self.cgrCfg.DiameterAgentCfg().OriginHost, self.cgrCfg.DiameterAgentCfg().OriginRealm)
|
||||
var processed, lclProcessed bool
|
||||
processorVars := make(map[string]string) // Shared between processors
|
||||
for _, reqProcessor := range self.cgrCfg.DiameterAgentCfg().RequestProcessors {
|
||||
lclProcessed, err = self.processCCR(ccr, reqProcessor, cca)
|
||||
lclProcessed, err = self.processCCR(ccr, reqProcessor, processorVars, cca)
|
||||
if lclProcessed { // Process local so we don't overwrite globally
|
||||
processed = lclProcessed
|
||||
}
|
||||
|
||||
@@ -626,7 +626,7 @@ func TestDmtAgentSendCCRSimpaEvent(t *testing.T) {
|
||||
}),
|
||||
diam.NewAVP(29000, avp.Mbit, 2011, &diam.GroupedAVP{ // MC-Information
|
||||
AVP: []*diam.AVP{
|
||||
diam.NewAVP(29938, avp.Mbit, 2011, datatype.OctetString("0x38924012914528")), // HighLayerCharacteristics
|
||||
diam.NewAVP(20938, avp.Mbit, 2011, datatype.OctetString("0x38924012914528")), // HighLayerCharacteristics
|
||||
diam.NewAVP(29002, avp.Mbit, 2011, datatype.UTF8String("12928471313847173")), // MC-Service-Id
|
||||
diam.NewAVP(29003, avp.Mbit, 2011, datatype.UTF8String("SPV123456012123")), // TransparentData
|
||||
diam.NewAVP(1201, avp.Mbit, 10415, &diam.GroupedAVP{ // MC-Information
|
||||
@@ -641,7 +641,7 @@ func TestDmtAgentSendCCRSimpaEvent(t *testing.T) {
|
||||
if err := dmtClient.SendMessage(ccr); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
time.Sleep(time.Duration(100) * time.Millisecond)
|
||||
time.Sleep(time.Duration(*waitRater) * time.Millisecond)
|
||||
msg := dmtClient.ReceivedMessage() // Discard the received message so we can test next one
|
||||
if msg == nil {
|
||||
t.Fatal("No message returned")
|
||||
|
||||
Reference in New Issue
Block a user