mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-24 00:28:44 +05:00
cache refactoring for save and load
This commit is contained in:
@@ -28,7 +28,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/balancer2go"
|
||||
"github.com/cgrates/cgrates/cache2go"
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
"github.com/cgrates/rpcclient"
|
||||
@@ -53,17 +52,17 @@ type Responder struct {
|
||||
Timeout time.Duration
|
||||
Timezone string
|
||||
cnt int64
|
||||
responseCache *cache2go.ResponseCache
|
||||
responseCache *ResponseCache
|
||||
}
|
||||
|
||||
func (rs *Responder) SetTimeToLive(timeToLive time.Duration, out *int) error {
|
||||
rs.responseCache = cache2go.NewResponseCache(timeToLive)
|
||||
rs.responseCache = NewResponseCache(timeToLive)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rs *Responder) getCache() *cache2go.ResponseCache {
|
||||
func (rs *Responder) getCache() *ResponseCache {
|
||||
if rs.responseCache == nil {
|
||||
rs.responseCache = cache2go.NewResponseCache(0)
|
||||
rs.responseCache = NewResponseCache(0)
|
||||
}
|
||||
return rs.responseCache
|
||||
}
|
||||
@@ -179,7 +178,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
|
||||
} else {
|
||||
r, e := arg.MaxDebit()
|
||||
if e != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Err: e,
|
||||
})
|
||||
return e
|
||||
@@ -187,7 +186,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
|
||||
*reply = *r
|
||||
}
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -218,7 +217,7 @@ 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{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
@@ -229,7 +228,7 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
|
||||
} else {
|
||||
err = arg.RefundIncrements()
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -260,7 +259,7 @@ 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{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
@@ -271,7 +270,7 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er
|
||||
} else {
|
||||
err = arg.RefundRounding()
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Value: reply,
|
||||
Err: err,
|
||||
})
|
||||
@@ -324,7 +323,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
}
|
||||
// replace user profile fields
|
||||
if err := LoadUserProfile(ev, utils.EXTRA_FIELDS); err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
// replace aliases
|
||||
@@ -338,7 +337,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})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -347,7 +346,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})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
dcs, _ = dcs.AppendDefaultRun()
|
||||
@@ -368,12 +367,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})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
usage, err := ev.GetDuration(utils.META_DEFAULT)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
if usage == 0 {
|
||||
@@ -396,7 +395,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})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
if utils.IsSliceMember([]string{utils.META_POSTPAID, utils.POSTPAID}, ev.GetReqType(dc.RequestTypeField)) {
|
||||
@@ -410,7 +409,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
|
||||
maxCallDuration = remainingDuration
|
||||
}
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: maxCallDuration})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Value: maxCallDuration})
|
||||
*reply = maxCallDuration
|
||||
return nil
|
||||
}
|
||||
@@ -453,7 +452,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(cacheKey, &cache2go.CacheItem{
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{
|
||||
Err: err,
|
||||
})
|
||||
return err
|
||||
@@ -467,12 +466,12 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
}
|
||||
startTime, err := ev.GetAnswerTime(dc.AnswerTimeField, rs.Timezone)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return errors.New("Error parsing answer event start time")
|
||||
}
|
||||
endTime, err := ev.GetEndTime("", rs.Timezone)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return errors.New("Error parsing answer event end time")
|
||||
}
|
||||
extraFields := ev.GetExtraFields()
|
||||
@@ -499,7 +498,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
|
||||
}
|
||||
//utils.Logger.Info(fmt.Sprintf("RUNS: %v", len(sesRuns)))
|
||||
*sRuns = sesRuns
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: sRuns})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Value: sRuns})
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -540,12 +539,12 @@ func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) error {
|
||||
Subject: cd.Subject,
|
||||
Context: utils.ALIAS_CONTEXT_RATING,
|
||||
}, cd, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
lcrCost, err := attrs.CallDescriptor.GetLCR(rs.Stats, attrs.Paginator)
|
||||
if err != nil {
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
|
||||
return err
|
||||
}
|
||||
if lcrCost.Entry != nil && lcrCost.Entry.Strategy == LCR_STRATEGY_LOAD {
|
||||
@@ -553,7 +552,7 @@ func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) error {
|
||||
suppl.Cost = -1 // In case of load distribution we don't calculate costs
|
||||
}
|
||||
}
|
||||
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: lcrCost})
|
||||
rs.getCache().Cache(cacheKey, &CacheItem{Value: lcrCost})
|
||||
*reply = *lcrCost
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user