mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
tests passing on hapool with response_ttl > 0
This commit is contained in:
@@ -32,6 +32,7 @@ func NewResponseCache(ttl time.Duration) *ResponseCache {
|
||||
}
|
||||
|
||||
func (rc *ResponseCache) Cache(key string, item *CacheItem) {
|
||||
//utils.Logger.Info("key: " + key)
|
||||
if rc.ttl == 0 {
|
||||
return
|
||||
}
|
||||
@@ -58,6 +59,7 @@ func (rc *ResponseCache) Get(key string) (*CacheItem, error) {
|
||||
item, ok := rc.cache[key]
|
||||
rc.mu.RUnlock()
|
||||
if ok {
|
||||
//utils.Logger.Info(",,,,,,,,,,,,,,,,,,,,,Found key: " + key)
|
||||
return item, nil
|
||||
}
|
||||
rc.wait(key) // wait for other goroutine processsing this key
|
||||
@@ -67,6 +69,7 @@ func (rc *ResponseCache) Get(key string) (*CacheItem, error) {
|
||||
if !ok {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
//utils.Logger.Info("............................Found key: " + key)
|
||||
return item, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
// Used for cgradmin
|
||||
// Starts rater, scheduler
|
||||
|
||||
"general": {
|
||||
"response_cache_ttl": "1s",
|
||||
},
|
||||
|
||||
"listen": {
|
||||
"rpc_json": ":2012", // RPC JSON listening address
|
||||
"rpc_gob": ":2013", // RPC GOB listening address
|
||||
|
||||
@@ -10,4 +10,4 @@ cgrates.org,1011,TEST_VOICE,,,
|
||||
cgrates.org,1012,PREPAID_10,,,
|
||||
cgrates.org,1013,TEST_NEG,,,
|
||||
cgrates.org,1014,TEST_RPC,,,
|
||||
cgrates.org,1015,,,,
|
||||
cgrates.org,1015,TEST_DID,,,
|
||||
|
||||
|
@@ -5,4 +5,5 @@ TEST_EXE,TOPUP_EXE,ALWAYS,10
|
||||
TEST_DATA_r,TOPUP_DATA_r,ASAP,10
|
||||
TEST_VOICE,TOPUP_VOICE,ASAP,10
|
||||
TEST_NEG,TOPUP_NEG,ASAP,10
|
||||
TEST_RPC,RPC,ALWAYS,10
|
||||
TEST_RPC,RPC,ALWAYS,10
|
||||
TEST_DID,DID,ALWAYS,10
|
||||
|
||||
|
@@ -2233,7 +2233,9 @@ func TestValueFormulaDebit(t *testing.T) {
|
||||
}
|
||||
at.Execute()
|
||||
afterUb, err := accountingStorage.GetAccount("cgrates.org:vf")
|
||||
if err != nil || afterUb.BalanceMap[utils.MONETARY].GetTotalValue() != -0.333334 {
|
||||
// not an exact value, depends of month
|
||||
v := afterUb.BalanceMap[utils.MONETARY].GetTotalValue()
|
||||
if err != nil || v > -0.30 || v < -0.35 {
|
||||
t.Error("error debiting account: ", err, utils.ToIJSON(afterUb))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -933,6 +933,8 @@ func (cd *CallDescriptor) Clone() *CallDescriptor {
|
||||
ForceDuration: cd.ForceDuration,
|
||||
PerformRounding: cd.PerformRounding,
|
||||
DryRun: cd.DryRun,
|
||||
CgrID: cd.CgrID,
|
||||
RunID: cd.RunID,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -147,7 +147,8 @@ func (rs *Responder) Debit(arg *CallDescriptor, reply *CallCost) (err error) {
|
||||
}
|
||||
|
||||
func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error) {
|
||||
if item, err := rs.getCache().Get(utils.MAX_DEBIT_CACHE_PREFIX + arg.CgrID + arg.RunID); err == nil && item != nil {
|
||||
cacheKey := utils.MAX_DEBIT_CACHE_PREFIX + arg.CgrID + arg.RunID + arg.DurationIndex.String()
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*reply = *(item.Value.(*CallCost))
|
||||
return item.Err
|
||||
}
|
||||
@@ -178,7 +179,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
|
||||
} else {
|
||||
r, e := arg.MaxDebit()
|
||||
if e != nil {
|
||||
rs.getCache().Cache(utils.MAX_DEBIT_CACHE_PREFIX+arg.CgrID+arg.RunID, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Err: e,
|
||||
})
|
||||
return e
|
||||
@@ -186,7 +187,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
|
||||
*reply = *r
|
||||
}
|
||||
}
|
||||
rs.getCache().Cache(utils.MAX_DEBIT_CACHE_PREFIX+arg.CgrID+arg.RunID, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -194,7 +195,8 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
|
||||
}
|
||||
|
||||
func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err error) {
|
||||
if item, err := rs.getCache().Get(utils.REFUND_INCR_CACHE_PREFIX + arg.CgrID + arg.RunID); err == nil && item != nil {
|
||||
cacheKey := utils.REFUND_INCR_CACHE_PREFIX + arg.CgrID + arg.RunID
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*reply = *(item.Value.(*float64))
|
||||
return item.Err
|
||||
}
|
||||
@@ -216,6 +218,9 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
|
||||
Subject: arg.Subject,
|
||||
Context: utils.ALIAS_CONTEXT_RATING,
|
||||
}, arg, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -224,7 +229,7 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
|
||||
} else {
|
||||
err = arg.RefundIncrements()
|
||||
}
|
||||
rs.getCache().Cache(utils.REFUND_INCR_CACHE_PREFIX+arg.CgrID+arg.RunID, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -232,7 +237,8 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
|
||||
}
|
||||
|
||||
func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err error) {
|
||||
if item, err := rs.getCache().Get(utils.REFUND_ROUND_CACHE_PREFIX + arg.CgrID + arg.RunID); err == nil && item != nil {
|
||||
cacheKey := utils.REFUND_ROUND_CACHE_PREFIX + arg.CgrID + arg.RunID + arg.DurationIndex.String()
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*reply = *(item.Value.(*float64))
|
||||
return item.Err
|
||||
}
|
||||
@@ -254,6 +260,9 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er
|
||||
Subject: arg.Subject,
|
||||
Context: utils.ALIAS_CONTEXT_RATING,
|
||||
}, arg, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -262,7 +271,7 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er
|
||||
} else {
|
||||
err = arg.RefundRounding()
|
||||
}
|
||||
rs.getCache().Cache(utils.REFUND_ROUND_CACHE_PREFIX+arg.CgrID+arg.RunID, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -305,11 +314,17 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
if rs.Bal != nil {
|
||||
return errors.New("unsupported method on the balancer")
|
||||
}
|
||||
cacheKey := utils.GET_DERIV_MAX_SESS_TIME + ev.CGRID + ev.RunID
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*reply = *(item.Value.(*float64))
|
||||
return item.Err
|
||||
}
|
||||
if ev.Subject == "" {
|
||||
ev.Subject = ev.Account
|
||||
}
|
||||
// replace user profile fields
|
||||
if err := LoadUserProfile(ev, utils.EXTRA_FIELDS); err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
// replace aliases
|
||||
@@ -323,6 +338,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
Subject: ev.Subject,
|
||||
Context: utils.ALIAS_CONTEXT_RATING,
|
||||
}, ev, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -331,6 +347,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
Account: ev.GetAccount(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT)}
|
||||
dcs := &utils.DerivedChargers{}
|
||||
if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
dcs, _ = dcs.AppendDefaultRun()
|
||||
@@ -351,10 +368,12 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
}
|
||||
startTime, err := ev.GetSetupTime(utils.META_DEFAULT, rs.Timezone)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
usage, err := ev.GetDuration(utils.META_DEFAULT)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
if usage == 0 {
|
||||
@@ -362,7 +381,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
}
|
||||
cd := &CallDescriptor{
|
||||
CgrID: ev.GetCgrId(rs.Timezone),
|
||||
RunID: ev.RunID,
|
||||
RunID: dc.RunID,
|
||||
TOR: ev.ToR,
|
||||
Direction: ev.GetDirection(dc.DirectionField),
|
||||
Tenant: ev.GetTenant(dc.TenantField),
|
||||
@@ -377,6 +396,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
err = rs.GetMaxSessionTime(cd, &remainingDuration)
|
||||
if err != nil {
|
||||
*reply = 0
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
if utils.IsSliceMember([]string{utils.META_POSTPAID, utils.POSTPAID}, ev.GetReqType(dc.RequestTypeField)) {
|
||||
@@ -390,6 +410,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
maxCallDuration = remainingDuration
|
||||
}
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: maxCallDuration})
|
||||
*reply = maxCallDuration
|
||||
return nil
|
||||
}
|
||||
@@ -399,6 +420,11 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
if rs.Bal != nil {
|
||||
return errors.New("Unsupported method on the balancer")
|
||||
}
|
||||
cacheKey := utils.GET_SESS_RUNS_CACHE_PREFIX + ev.CGRID
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*sRuns = *(item.Value.(*[]*SessionRun))
|
||||
return item.Err
|
||||
}
|
||||
if ev.Subject == "" {
|
||||
ev.Subject = ev.Account
|
||||
}
|
||||
@@ -427,7 +453,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
//utils.Logger.Info(fmt.Sprintf("Derived chargers for: %+v", attrsDC))
|
||||
dcs := &utils.DerivedChargers{}
|
||||
if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil {
|
||||
rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
@@ -441,22 +467,18 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
}
|
||||
startTime, err := ev.GetAnswerTime(dc.AnswerTimeField, rs.Timezone)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return errors.New("Error parsing answer event start time")
|
||||
}
|
||||
endTime, err := ev.GetEndTime("", rs.Timezone)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
return errors.New("Error parsing answer event end time")
|
||||
}
|
||||
extraFields := ev.GetExtraFields()
|
||||
cd := &CallDescriptor{
|
||||
CgrID: ev.GetCgrId(rs.Timezone),
|
||||
RunID: ev.RunID,
|
||||
RunID: dc.RunID,
|
||||
TOR: ev.ToR,
|
||||
Direction: ev.GetDirection(dc.DirectionField),
|
||||
Tenant: ev.GetTenant(dc.TenantField),
|
||||
@@ -477,9 +499,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
}
|
||||
//utils.Logger.Info(fmt.Sprintf("RUNS: %v", len(sesRuns)))
|
||||
*sRuns = sesRuns
|
||||
rs.getCache().Cache(utils.GET_SESS_RUNS_CACHE_PREFIX+ev.CGRID, &cache2go.CacheItem{
|
||||
Value: sRuns,
|
||||
})
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: sRuns})
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -497,6 +517,10 @@ func (rs *Responder) GetDerivedChargers(attrs *utils.AttrDerivedChargers, dcs *u
|
||||
|
||||
func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) error {
|
||||
cacheKey := utils.LCRCachePrefix + attrs.CgrID + attrs.RunID
|
||||
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
|
||||
*reply = *(item.Value.(*LCRCost))
|
||||
return item.Err
|
||||
}
|
||||
if attrs.CallDescriptor.Subject == "" {
|
||||
attrs.CallDescriptor.Subject = attrs.CallDescriptor.Account
|
||||
}
|
||||
|
||||
@@ -153,10 +153,10 @@ func TestResponderGetSessionRuns(t *testing.T) {
|
||||
sesRuns := make([]*SessionRun, 0)
|
||||
eSRuns := []*SessionRun{
|
||||
&SessionRun{DerivedCharger: extra1DC,
|
||||
CallDescriptor: &CallDescriptor{CgrID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), RunID: "*default", Direction: "*out", Category: "0",
|
||||
CallDescriptor: &CallDescriptor{CgrID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), RunID: "extra1", Direction: "*out", Category: "0",
|
||||
Tenant: "vdf", Subject: "rif", Account: "minitsboy", Destination: "0256", TimeStart: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), TimeEnd: time.Date(2013, 11, 7, 8, 42, 36, 0, time.UTC), TOR: utils.VOICE, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}}},
|
||||
&SessionRun{DerivedCharger: extra2DC,
|
||||
CallDescriptor: &CallDescriptor{CgrID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), RunID: "*default", Direction: "*out", Category: "call",
|
||||
CallDescriptor: &CallDescriptor{CgrID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), RunID: "extra2", Direction: "*out", Category: "call",
|
||||
Tenant: "vdf", Subject: "ivo", Account: "ivo", Destination: "1002", TimeStart: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), TimeEnd: time.Date(2013, 11, 7, 8, 42, 36, 0, time.UTC), TOR: utils.VOICE, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}}},
|
||||
&SessionRun{DerivedCharger: dfDC,
|
||||
CallDescriptor: &CallDescriptor{CgrID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), RunID: "*default", Direction: "*out", Category: "call",
|
||||
@@ -165,7 +165,7 @@ func TestResponderGetSessionRuns(t *testing.T) {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(eSRuns, sesRuns) {
|
||||
for _, sr := range sesRuns {
|
||||
t.Logf("sr cd: %+v", sr.CallDescriptor)
|
||||
t.Logf("sr cd: %s", utils.ToIJSON(sr.CallDescriptor))
|
||||
}
|
||||
t.Errorf("Expecting: %+v, received: %+v", eSRuns, sesRuns)
|
||||
}
|
||||
|
||||
@@ -341,6 +341,9 @@ func TestTpRemActionsRefenced(t *testing.T) {
|
||||
if !*testIntegration {
|
||||
return
|
||||
}
|
||||
|
||||
// no more reference check for sake of speed!
|
||||
|
||||
actionsMap := make(map[string]engine.Actions)
|
||||
if err := tpRPC.Call("ApierV2.GetActions", v2.AttrGetActions{
|
||||
ActionIDs: []string{"TOPUP_VOICE"},
|
||||
@@ -352,16 +355,14 @@ func TestTpRemActionsRefenced(t *testing.T) {
|
||||
var reply string
|
||||
if err := tpRPC.Call("ApierV2.RemActions", v1.AttrRemActions{
|
||||
ActionIDs: []string{"TOPUP_VOICE"},
|
||||
}, &reply); err == nil {
|
||||
t.Error("No error on ApierV2.RemActions: ", err.Error())
|
||||
} else if reply == utils.OK {
|
||||
}, &reply); err != nil {
|
||||
t.Error("Error on ApierV2.RemActions: ", err.Error())
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Calling ApierV2.RemActions got reply: %s", reply)
|
||||
}
|
||||
if err := tpRPC.Call("ApierV2.GetActions", v2.AttrGetActions{
|
||||
ActionIDs: []string{"TOPUP_VOICE"},
|
||||
}, &actionsMap); err != nil {
|
||||
t.Error("Got error on ApierV2.GetActions: ", err.Error())
|
||||
} else if len(actionsMap) != 1 {
|
||||
t.Errorf("Calling ApierV2.GetActions got reply: %s", utils.ToIJSON(actionsMap))
|
||||
ActionIDs: []string{"PAYMENT_2056bd2fe137082970f97102b64e42fd"},
|
||||
}, &actionsMap); err == nil {
|
||||
t.Error("no error on ApierV2.GetActions: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123491",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -104,7 +104,7 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:59",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -124,7 +124,7 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123491",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -132,6 +132,8 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:59",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
utils.LastUsed: "20000",
|
||||
}
|
||||
@@ -150,7 +152,7 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123491",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -158,6 +160,8 @@ func TestSMGDataLastUsedData(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:59",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.LastUsed: "0",
|
||||
}
|
||||
var rpl string
|
||||
@@ -187,7 +191,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -195,7 +199,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:50",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -221,7 +225,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -252,7 +256,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -283,7 +287,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -314,7 +318,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -345,7 +349,7 @@ func TestSMGDataLastUsedMultipleData(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123492",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -387,7 +391,7 @@ func TestSMGDataDerivedChargingNoCredit(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234967",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1011",
|
||||
utils.SUBJECT: "1011",
|
||||
@@ -403,6 +407,8 @@ func TestSMGDataDerivedChargingNoCredit(t *testing.T) {
|
||||
if err := smgRPC.Call("SMGenericV1.SessionStart", smgEv, &maxUsage); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
// the second derived charging run has no credit
|
||||
|
||||
if maxUsage != 0 {
|
||||
t.Error("Bad max usage: ", maxUsage)
|
||||
}
|
||||
@@ -429,7 +435,7 @@ func TestSMGDataTTLExpired(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123494",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -437,7 +443,7 @@ func TestSMGDataTTLExpired(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:52",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -478,7 +484,7 @@ func TestSMGDataTTLExpiredMultiUpdates(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123495",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -486,7 +492,7 @@ func TestSMGDataTTLExpiredMultiUpdates(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:53",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -513,7 +519,7 @@ func TestSMGDataTTLExpiredMultiUpdates(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123495",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -566,7 +572,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -574,7 +580,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:54",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -600,7 +606,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -631,7 +637,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -662,7 +668,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -693,7 +699,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -724,7 +730,7 @@ func TestSMGDataMultipleDataNoUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123496",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -766,7 +772,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -774,7 +780,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
utils.CATEGORY: "data",
|
||||
utils.TENANT: "cgrates.org",
|
||||
utils.REQTYPE: utils.META_PREPAID,
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:49",
|
||||
utils.SETUP_TIME: "2016-01-05 18:30:55",
|
||||
utils.ANSWER_TIME: "2016-01-05 18:31:05",
|
||||
utils.USAGE: "1048576",
|
||||
}
|
||||
@@ -801,7 +807,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -832,7 +838,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -863,7 +869,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -894,7 +900,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
@@ -925,7 +931,7 @@ func TestSMGDataMultipleDataConstantUsage(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.DATA,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "123497",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1010",
|
||||
utils.SUBJECT: "1010",
|
||||
|
||||
@@ -117,7 +117,7 @@ func TestSMGVoiceMonetaryRefund(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123451",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -147,7 +147,7 @@ func TestSMGVoiceMonetaryRefund(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123451",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -178,7 +178,7 @@ func TestSMGVoiceVoiceRefund(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123452",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -208,7 +208,7 @@ func TestSMGVoiceVoiceRefund(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123452",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -246,7 +246,7 @@ func TestSMGVoiceMixedRefund(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123453",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -278,7 +278,7 @@ func TestSMGVoiceMixedRefund(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12345",
|
||||
utils.ACCID: "123453",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -438,7 +438,7 @@ func TestSMGVoiceLastUsedEnd(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234911",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -466,7 +466,7 @@ func TestSMGVoiceLastUsedEnd(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234911",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -492,7 +492,7 @@ func TestSMGVoiceLastUsedEnd(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234911",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -529,7 +529,7 @@ func TestSMGVoiceLastUsedNotFixed(t *testing.T) {
|
||||
smgEv := SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234922",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -557,7 +557,7 @@ func TestSMGVoiceLastUsedNotFixed(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234922",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
@@ -583,7 +583,7 @@ func TestSMGVoiceLastUsedNotFixed(t *testing.T) {
|
||||
smgEv = SMGenericEvent{
|
||||
utils.EVENT_NAME: "TEST_EVENT",
|
||||
utils.TOR: utils.VOICE,
|
||||
utils.ACCID: "12349",
|
||||
utils.ACCID: "1234922",
|
||||
utils.DIRECTION: utils.OUT,
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.SUBJECT: "1001",
|
||||
|
||||
@@ -192,8 +192,10 @@ func (self *SMGSession) refund(refundDuration time.Duration) error {
|
||||
if len(refundIncrements) > 0 {
|
||||
cd := firstCC.CreateCallDescriptor()
|
||||
cd.Increments = refundIncrements
|
||||
cd.CgrID = self.cd.CgrID
|
||||
cd.RunID = self.cd.RunID
|
||||
cd.Increments.Compress()
|
||||
utils.Logger.Info(fmt.Sprintf("Refunding duration %v with cd: %s", initialRefundDuration, utils.ToJSON(cd)))
|
||||
utils.Logger.Info(fmt.Sprintf("Refunding %s duration %v with incerements: %s", cd.CgrID, initialRefundDuration, utils.ToJSON(cd.Increments)))
|
||||
var response float64
|
||||
err := self.rater.Call("Responder.RefundIncrements", cd, &response)
|
||||
if err != nil {
|
||||
@@ -253,6 +255,8 @@ func (self *SMGSession) saveOperations(originID string) error {
|
||||
roundIncrements := firstCC.GetRoundIncrements()
|
||||
if len(roundIncrements) != 0 {
|
||||
cd := firstCC.CreateCallDescriptor()
|
||||
cd.CgrID = self.cd.CgrID
|
||||
cd.RunID = self.cd.RunID
|
||||
cd.Increments = roundIncrements
|
||||
var response float64
|
||||
if err := self.rater.Call("Responder.RefundRounding", cd, &response); err != nil {
|
||||
|
||||
@@ -423,16 +423,10 @@ func (self *SMGeneric) ChargeEvent(gev SMGenericEvent, clnt *rpc2.Client) (maxDu
|
||||
}
|
||||
// refund cc
|
||||
if len(refundIncrements) > 0 {
|
||||
cd := &engine.CallDescriptor{
|
||||
Direction: cc.Direction,
|
||||
Tenant: cc.Tenant,
|
||||
Category: cc.Category,
|
||||
Subject: cc.Subject,
|
||||
Account: cc.Account,
|
||||
Destination: cc.Destination,
|
||||
TOR: cc.TOR,
|
||||
Increments: refundIncrements,
|
||||
}
|
||||
cd := cc.CreateCallDescriptor()
|
||||
cd.Increments = refundIncrements
|
||||
cd.CgrID = sR.CallDescriptor.CgrID
|
||||
cd.RunID = sR.CallDescriptor.RunID
|
||||
cd.Increments.Compress()
|
||||
utils.Logger.Info(fmt.Sprintf("Refunding session run callcost: %s", utils.ToJSON(cd)))
|
||||
var response float64
|
||||
|
||||
@@ -242,6 +242,7 @@ const (
|
||||
REFUND_INCR_CACHE_PREFIX = "REFUND_INCR_"
|
||||
REFUND_ROUND_CACHE_PREFIX = "REFUND_ROUND_"
|
||||
GET_SESS_RUNS_CACHE_PREFIX = "GET_SESS_RUNS_"
|
||||
GET_DERIV_MAX_SESS_TIME = "GET_DERIV_MAX_SESS_TIME_"
|
||||
LOG_CALL_COST_CACHE_PREFIX = "LOG_CALL_COSTS_"
|
||||
LCRCachePrefix = "LCR_"
|
||||
ALIAS_CONTEXT_RATING = "*rating"
|
||||
|
||||
Reference in New Issue
Block a user