mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add Resource in Cache
This commit is contained in:
@@ -926,7 +926,20 @@ func (self *ApierV1) ReloadCache(attrs utils.AttrReloadCache, reply *string) (er
|
||||
if err = self.DataDB.CacheDataFromDB(utils.REVERSE_ALIASES_PREFIX, dataIDs, true); err != nil {
|
||||
return
|
||||
}
|
||||
// Resources
|
||||
// ResourceConfig
|
||||
dataIDs = make([]string, 0)
|
||||
if attrs.ResourceConfigIDs == nil {
|
||||
dataIDs = nil // Reload all
|
||||
} else if len(*attrs.ResourceConfigIDs) > 0 {
|
||||
dataIDs = make([]string, len(*attrs.ResourceConfigIDs))
|
||||
for idx, dId := range *attrs.ResourceConfigIDs {
|
||||
dataIDs[idx] = dId
|
||||
}
|
||||
}
|
||||
if err = self.DataDB.CacheDataFromDB(utils.ResourceConfigsPrefix, dataIDs, true); err != nil {
|
||||
return
|
||||
}
|
||||
// Resource
|
||||
dataIDs = make([]string, 0)
|
||||
if attrs.ResourceIDs == nil {
|
||||
dataIDs = nil // Reload all
|
||||
@@ -936,7 +949,7 @@ func (self *ApierV1) ReloadCache(attrs utils.AttrReloadCache, reply *string) (er
|
||||
dataIDs[idx] = dId
|
||||
}
|
||||
}
|
||||
if err = self.DataDB.CacheDataFromDB(utils.ResourceConfigsPrefix, dataIDs, true); err != nil {
|
||||
if err = self.DataDB.CacheDataFromDB(utils.ResourcesPrefix, dataIDs, true); err != nil {
|
||||
return
|
||||
}
|
||||
*reply = utils.OK
|
||||
@@ -947,7 +960,7 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e
|
||||
if args.FlushAll {
|
||||
cache.Flush()
|
||||
}
|
||||
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs []string
|
||||
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs, resIDs []string
|
||||
if args.DestinationIDs == nil {
|
||||
dstIDs = nil
|
||||
} else {
|
||||
@@ -1013,15 +1026,21 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e
|
||||
} else {
|
||||
rvAlsIDs = *args.ReverseAliasIDs
|
||||
}
|
||||
if args.ResourceIDs == nil {
|
||||
if args.ResourceConfigIDs == nil {
|
||||
rlIDs = nil
|
||||
} else {
|
||||
rlIDs = *args.ResourceIDs
|
||||
rlIDs = *args.ResourceConfigIDs
|
||||
}
|
||||
if args.ResourceIDs == nil {
|
||||
resIDs = nil
|
||||
} else {
|
||||
resIDs = *args.ResourceIDs
|
||||
}
|
||||
|
||||
if err := self.DataDB.LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
if err := self.DataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs); err != nil {
|
||||
if err := self.DataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
*reply = utils.OK
|
||||
|
||||
@@ -42,7 +42,7 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC
|
||||
waitTasks = append(waitTasks, cacheTaskChan)
|
||||
go func() {
|
||||
defer close(cacheTaskChan)
|
||||
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs []string
|
||||
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs, resIDs []string
|
||||
if cCfg, has := cfg.CacheConfig[utils.CacheDestinations]; !has || !cCfg.Precache {
|
||||
dstIDs = make([]string, 0) // Don't cache any
|
||||
}
|
||||
@@ -85,13 +85,17 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC
|
||||
if cCfg, has := cfg.CacheConfig[utils.CacheResourceConfigs]; !has || !cCfg.Precache {
|
||||
rlIDs = make([]string, 0)
|
||||
}
|
||||
if cCfg, has := cfg.CacheConfig[utils.CacheResources]; !has || !cCfg.Precache {
|
||||
resIDs = make([]string, 0)
|
||||
}
|
||||
|
||||
// ToDo: Add here timings
|
||||
if err := dataDB.LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs); err != nil {
|
||||
utils.Logger.Crit(fmt.Sprintf("<RALs> Cache rating error: %s", err.Error()))
|
||||
exitChan <- true
|
||||
return
|
||||
}
|
||||
if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs); err != nil {
|
||||
if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs); err != nil {
|
||||
utils.Logger.Crit(fmt.Sprintf("<RALs> Cache accounting error: %s", err.Error()))
|
||||
exitChan <- true
|
||||
return
|
||||
|
||||
@@ -68,7 +68,7 @@ func durInternalRater(cd *engine.CallDescriptor) (time.Duration, error) {
|
||||
if err := dataDb.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil); err != nil {
|
||||
return nilDuration, fmt.Errorf("Cache rating error: %s", err.Error())
|
||||
}
|
||||
if err := dataDb.LoadAccountingCache(nil, nil, nil); err != nil {
|
||||
if err := dataDb.LoadAccountingCache(nil, nil, nil, nil); err != nil {
|
||||
return nilDuration, fmt.Errorf("Cache accounting error: %s", err.Error())
|
||||
}
|
||||
log.Printf("Runnning %d cycles...", *runs)
|
||||
|
||||
@@ -348,7 +348,7 @@ func init() {
|
||||
csvr.WriteToDatabase(false, false, false)
|
||||
cache.Flush()
|
||||
dataStorage.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataStorage.LoadAccountingCache(nil, nil, nil)
|
||||
dataStorage.LoadAccountingCache(nil, nil, nil, nil)
|
||||
}
|
||||
|
||||
func TestLoadDestinations(t *testing.T) {
|
||||
|
||||
@@ -80,7 +80,7 @@ type DataDB interface {
|
||||
RemAccountActionPlans(acntID string, apIDs []string) (err error)
|
||||
PushTask(*Task) error
|
||||
PopTask() (*Task, error)
|
||||
LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) error
|
||||
LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) error
|
||||
GetAccount(string) (*Account, error)
|
||||
SetAccount(*Account) error
|
||||
RemoveAccount(string) error
|
||||
|
||||
@@ -165,7 +165,7 @@ func (ms *MapStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs,
|
||||
return
|
||||
}
|
||||
|
||||
func (ms *MapStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) error {
|
||||
func (ms *MapStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) error {
|
||||
if ms.cacheCfg == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -438,11 +438,12 @@ func (ms *MongoStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs
|
||||
return
|
||||
}
|
||||
|
||||
func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) (err error) {
|
||||
func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) {
|
||||
for key, ids := range map[string][]string{
|
||||
utils.ALIASES_PREFIX: alsIDs,
|
||||
utils.REVERSE_ALIASES_PREFIX: rvAlsIDs,
|
||||
utils.ResourceConfigsPrefix: rlIDs,
|
||||
utils.ResourcesPrefix: resIDs,
|
||||
} {
|
||||
if err = ms.CacheDataFromDB(key, ids, false); err != nil {
|
||||
return
|
||||
|
||||
@@ -140,11 +140,12 @@ func (rs *RedisStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs
|
||||
return
|
||||
}
|
||||
|
||||
func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) (err error) {
|
||||
func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) {
|
||||
for key, ids := range map[string][]string{
|
||||
utils.ALIASES_PREFIX: alsIDs,
|
||||
utils.REVERSE_ALIASES_PREFIX: rvAlsIDs,
|
||||
utils.ResourceConfigsPrefix: rlIDs,
|
||||
utils.ResourcesPrefix: resIDs,
|
||||
} {
|
||||
if err = rs.CacheDataFromDB(key, ids, false); err != nil {
|
||||
return
|
||||
|
||||
@@ -64,7 +64,7 @@ ENABLE_ACNT,*enable_account,,,,,,,,,,,,,,false,false,10`
|
||||
|
||||
cache.Flush()
|
||||
dbAcntActs.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dbAcntActs.LoadAccountingCache(nil, nil, nil)
|
||||
dbAcntActs.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
expectAcnt := &engine.Account{ID: "cgrates.org:1"}
|
||||
if acnt, err := dbAcntActs.GetAccount("cgrates.org:1"); err != nil {
|
||||
|
||||
@@ -76,7 +76,7 @@ RP_ANY,DR_ANY_1CNT,*any,10`
|
||||
|
||||
cache.Flush()
|
||||
dbAuth.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dbAuth.LoadAccountingCache(nil, nil, nil)
|
||||
dbAuth.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
|
||||
t.Error("Wrong number of cached destinations found", cachedDests)
|
||||
|
||||
@@ -74,7 +74,7 @@ RP_SMS1,DR_SMS_1,ALWAYS,10`
|
||||
csvr.WriteToDatabase(false, false, false)
|
||||
cache.Flush()
|
||||
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 3 {
|
||||
t.Error("Wrong number of cached rating plans found", cachedRPlans)
|
||||
|
||||
@@ -61,7 +61,7 @@ RP_DATA1,DR_DATA_2,TM2,10`
|
||||
csvr.WriteToDatabase(false, false, false)
|
||||
cache.Flush()
|
||||
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 {
|
||||
t.Error("Wrong number of cached rating plans found", cachedRPlans)
|
||||
|
||||
@@ -111,7 +111,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10`
|
||||
}
|
||||
cache.Flush()
|
||||
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
|
||||
t.Error("Wrong number of cached destinations found", cachedDests)
|
||||
|
||||
@@ -111,7 +111,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10`
|
||||
}
|
||||
cache.Flush()
|
||||
dataDB2.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB2.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB2.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
|
||||
t.Error("Wrong number of cached destinations found", cachedDests)
|
||||
|
||||
@@ -109,7 +109,7 @@ RP_UK,DR_UK_Mobile_BIG5,ALWAYS,10`
|
||||
}
|
||||
cache.Flush()
|
||||
dataDB3.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB3.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB3.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
|
||||
t.Error("Wrong number of cached destinations found", cachedDests)
|
||||
|
||||
@@ -59,7 +59,7 @@ func TestSMSLoadCsvTpSmsChrg1(t *testing.T) {
|
||||
csvr.WriteToDatabase(false, false, false)
|
||||
cache.Flush()
|
||||
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil)
|
||||
dataDB.LoadAccountingCache(nil, nil, nil, nil)
|
||||
|
||||
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 {
|
||||
t.Error("Wrong number of cached rating plans found", cachedRPlans)
|
||||
|
||||
@@ -104,7 +104,7 @@ func TestTutITCacheStats(t *testing.T) {
|
||||
var rcvStats *utils.CacheStats
|
||||
expectedStats := &utils.CacheStats{Destinations: 5, ReverseDestinations: 7, RatingPlans: 4, RatingProfiles: 9,
|
||||
Actions: 8, ActionPlans: 4, AccountActionPlans: 5, SharedGroups: 1, DerivedChargers: 1, LcrProfiles: 5,
|
||||
CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, Resources: 3}
|
||||
CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, ResourcesConfig: 0, Resources: 3}
|
||||
var args utils.AttrCacheStats
|
||||
if err := tutLocalRpc.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil {
|
||||
t.Error("Got error on ApierV1.GetCacheStats: ", err.Error())
|
||||
|
||||
@@ -667,6 +667,7 @@ type ArgsCache struct {
|
||||
DerivedChargerIDs *[]string
|
||||
AliasIDs *[]string
|
||||
ReverseAliasIDs *[]string
|
||||
ResourceConfigIDs *[]string
|
||||
ResourceIDs *[]string
|
||||
StatsIDs *[]string
|
||||
ThresholdsIDs *[]string
|
||||
@@ -704,6 +705,7 @@ type CacheStats struct {
|
||||
Users int
|
||||
Aliases int
|
||||
ReverseAliases int
|
||||
ResourcesConfig int
|
||||
Resources int
|
||||
//Stats int
|
||||
//thresholds int
|
||||
|
||||
Reference in New Issue
Block a user