mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-13 11:06:25 +05:00
added fallback subject
This commit is contained in:
@@ -38,7 +38,8 @@ const (
|
||||
// the minimum length for a destination prefix to be matched.
|
||||
MinPrefixLength = 2
|
||||
RecursionMaxDepth = 4
|
||||
FallbackDestination = "*all" // the string to be used to mark the fallback destination
|
||||
FallbackDestination = "fallback" // the string to be used to mark the fallback destination
|
||||
FallbackSubject = "*all"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -135,9 +136,22 @@ func (cd *CallDescriptor) SearchStorageForPrefix() (destPrefix string, err error
|
||||
key := base + destPrefix
|
||||
values, err := cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
|
||||
if err != nil {
|
||||
// use the default destination
|
||||
key := base + FallbackDestination
|
||||
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
|
||||
}
|
||||
if err != nil {
|
||||
// use the default subject
|
||||
base = fmt.Sprintf("%s:%s:%s:%s:", cd.Direction, cd.Tenant, cd.TOR, FallbackSubject)
|
||||
key = base + destPrefix
|
||||
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
|
||||
if err != nil {
|
||||
// use the default destination
|
||||
key := base + FallbackDestination
|
||||
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
|
||||
}
|
||||
}
|
||||
|
||||
//load the activation preriods
|
||||
if err == nil && len(values) > 0 {
|
||||
cd.ActivationPeriods = values
|
||||
@@ -157,6 +171,7 @@ func (cd *CallDescriptor) getActivationPeriodsOrFallback(key, base, destPrefix s
|
||||
recursionDepth++
|
||||
return cd.getActivationPeriodsOrFallback(key, base, destPrefix, recursionDepth)
|
||||
}
|
||||
|
||||
//get for a smaller prefix if the orignal one was not found
|
||||
for i := len(cd.Destination); err != nil || fallbackKey != ""; {
|
||||
if fallbackKey != "" {
|
||||
|
||||
@@ -112,6 +112,18 @@ func TestFullDestNotFound(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFullSubjectNotFound(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 30, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 18, 30, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: "OUT", TOR: "0", Tenant: "vdf", Subject: "not_exiting", Destination: "025740532", TimeStart: t1, TimeEnd: t2}
|
||||
result, _ := cd.GetCost()
|
||||
expected := &CallCost{Tenant: "vdf", Subject: "rif", Destination: "0257", Cost: 2700, ConnectFee: 0}
|
||||
if result.Cost != expected.Cost || result.ConnectFee != expected.ConnectFee {
|
||||
t.Log(cd.ActivationPeriods)
|
||||
t.Errorf("Expected %v was %v", expected, result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultipleActivationPeriods(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 8, 17, 30, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 8, 18, 30, 0, 0, time.UTC)
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
dest = `
|
||||
destinations = `
|
||||
Tag,Prefix
|
||||
GERMANY,49
|
||||
GERMANY_O2,41
|
||||
@@ -37,7 +37,7 @@ NAT,0723
|
||||
RET,0723
|
||||
RET,0724
|
||||
`
|
||||
rts = `
|
||||
rates = `
|
||||
RT_STANDARD,GERMANY,0,0.2,60,1
|
||||
RT_STANDARD,GERMANY_O2,0,0.1,60,1
|
||||
RT_STANDARD,GERMANY_PREMIUM,0,0.1,60,1
|
||||
@@ -47,13 +47,13 @@ RT_STD_WEEKEND,GERMANY_O2,0,0.05,60,1
|
||||
P1,NAT,0,1,1,1
|
||||
P2,NAT,0,0.5,1,1
|
||||
`
|
||||
ts = `
|
||||
timings = `
|
||||
WORKDAYS_00,*all,*all,*all,1;2;3;4;5,00:00:00
|
||||
WORKDAYS_18,*all,*all,*all,1;2;3;4;5,18:00:00
|
||||
WEEKENDS,*all,*all,*all,6;7,00:00:00
|
||||
ONE_TIME_RUN,2012,,,,*asap
|
||||
`
|
||||
rtts = `
|
||||
rateTimings = `
|
||||
STANDARD,RT_STANDARD,WORKDAYS_00,10
|
||||
STANDARD,RT_STD_WEEKEND,WORKDAYS_18,10
|
||||
STANDARD,RT_STD_WEEKEND,WEEKENDS,10
|
||||
@@ -63,7 +63,7 @@ EVENING,P1,WORKDAYS_00,10
|
||||
EVENING,P2,WORKDAYS_18,10
|
||||
EVENING,P2,WEEKENDS,10
|
||||
`
|
||||
rp = `
|
||||
ratingProfiles = `
|
||||
CUSTOMER_1,0,OUT,rif:from:tm,danb,PREMIUM,2012-01-01T00:00:00Z
|
||||
CUSTOMER_1,0,OUT,rif:from:tm,danb,STANDARD,2012-02-28T00:00:00Z
|
||||
CUSTOMER_2,0,OUT,danb:87.139.12.167,danb,STANDARD,2012-01-01T00:00:00Z
|
||||
@@ -71,19 +71,19 @@ CUSTOMER_1,0,OUT,danb,,PREMIUM,2012-01-01T00:00:00Z
|
||||
vdf,0,OUT,rif,,EVENING,2012-01-01T00:00:00Z
|
||||
vdf,0,OUT,rif,,EVENING,2012-02-28T00:00:00Z
|
||||
vdf,0,OUT,minu,,EVENING,2012-01-01T00:00:00Z
|
||||
vdf,0,OUT,minu,,EVENING,2012-02-28T00:00:00Z
|
||||
vdf,0,OUT,*all,,EVENING,2012-02-28T00:00:00Z
|
||||
`
|
||||
a = `
|
||||
actions = `
|
||||
MINI,TOPUP,MINUTES,OUT,100,NAT,ABSOLUTE,0,10,10
|
||||
`
|
||||
atms = `
|
||||
actionTimings = `
|
||||
MORE_MINUTES,MINI,ONE_TIME_RUN,10
|
||||
`
|
||||
atrs = `
|
||||
actionTriggers = `
|
||||
STANDARD_TRIGGER,MINUTES,OUT,10,GERMANY_O2,SOME_1,10
|
||||
STANDARD_TRIGGER,MINUTES,OUT,200,GERMANY,SOME_2,10
|
||||
`
|
||||
accs = `
|
||||
accountActions = `
|
||||
vdf,minitsboy,OUT,MORE_MINUTES,STANDARD_TRIGGER
|
||||
`
|
||||
)
|
||||
@@ -92,15 +92,15 @@ var csvr *CSVReader
|
||||
|
||||
func init() {
|
||||
csvr = NewStringCSVReader()
|
||||
csvr.LoadDestinations(dest, ',')
|
||||
csvr.LoadRates(rts, ',')
|
||||
csvr.LoadTimings(ts, ',')
|
||||
csvr.LoadRateTimings(rtts, ',')
|
||||
csvr.LoadRatingProfiles(rp, ',')
|
||||
csvr.LoadActions(a, ',')
|
||||
csvr.LoadActionTimings(atms, ',')
|
||||
csvr.LoadActionTriggers(atrs, ',')
|
||||
csvr.LoadAccountActions(accs, ',')
|
||||
csvr.LoadDestinations(destinations, ',')
|
||||
csvr.LoadRates(rates, ',')
|
||||
csvr.LoadTimings(timings, ',')
|
||||
csvr.LoadRateTimings(rateTimings, ',')
|
||||
csvr.LoadRatingProfiles(ratingProfiles, ',')
|
||||
csvr.LoadActions(actions, ',')
|
||||
csvr.LoadActionTimings(actionTimings, ',')
|
||||
csvr.LoadActionTriggers(actionTriggers, ',')
|
||||
csvr.LoadAccountActions(accountActions, ',')
|
||||
csvr.WriteToDatabase(storageGetter, false, false)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user