diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 44652e4b6..a1bd7137e 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -358,7 +358,7 @@ func (self *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply for _, prfx := range []string{ utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix} { + utils.ResourceProfilesPrefix} { loadedIDs, _ := dbReader.GetLoadedIds(prfx) if err := self.DataDB.CacheDataFromDB(prfx, loadedIDs, true); err != nil { return utils.NewErrServerError(err) @@ -926,20 +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 } - // ResourceConfig + // ResourceProfiles dataIDs = make([]string, 0) - if attrs.ResourceConfigIDs == nil { + if attrs.ResourceProfileIDs == nil { dataIDs = nil // Reload all - } else if len(*attrs.ResourceConfigIDs) > 0 { - dataIDs = make([]string, len(*attrs.ResourceConfigIDs)) - for idx, dId := range *attrs.ResourceConfigIDs { + } else if len(*attrs.ResourceProfileIDs) > 0 { + dataIDs = make([]string, len(*attrs.ResourceProfileIDs)) + for idx, dId := range *attrs.ResourceProfileIDs { dataIDs[idx] = dId } } - if err = self.DataDB.CacheDataFromDB(utils.ResourceConfigsPrefix, dataIDs, true); err != nil { + if err = self.DataDB.CacheDataFromDB(utils.ResourceProfilesPrefix, dataIDs, true); err != nil { return } - // Resource + // Resources dataIDs = make([]string, 0) if attrs.ResourceIDs == nil { dataIDs = nil // Reload all @@ -960,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, resIDs []string + var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rspIDs, resIDs []string if args.DestinationIDs == nil { dstIDs = nil } else { @@ -1026,10 +1026,10 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e } else { rvAlsIDs = *args.ReverseAliasIDs } - if args.ResourceConfigIDs == nil { - rlIDs = nil + if args.ResourceProfileIDs == nil { + rspIDs = nil } else { - rlIDs = *args.ResourceConfigIDs + rspIDs = *args.ResourceProfileIDs } if args.ResourceIDs == nil { resIDs = nil @@ -1040,7 +1040,7 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e 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, resIDs); err != nil { + if err := self.DataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rspIDs, resIDs); err != nil { return utils.NewErrServerError(err) } *reply = utils.OK @@ -1138,11 +1138,18 @@ func (self *ApierV1) FlushCache(args utils.AttrReloadCache, reply *string) (err cache.RemKey(utils.REVERSE_ALIASES_PREFIX+key, true, utils.NonTransactional) } } + if args.ResourceProfileIDs == nil { + cache.RemPrefixKey(utils.ResourceProfilesPrefix, true, utils.NonTransactional) + } else if len(*args.ResourceProfileIDs) != 0 { + for _, key := range *args.ResourceProfileIDs { + cache.RemKey(utils.ResourceProfilesPrefix+key, true, utils.NonTransactional) + } + } if args.ResourceIDs == nil { - cache.RemPrefixKey(utils.ResourceConfigsPrefix, true, utils.NonTransactional) + cache.RemPrefixKey(utils.ResourcesPrefix, true, utils.NonTransactional) } else if len(*args.ResourceIDs) != 0 { for _, key := range *args.ResourceIDs { - cache.RemKey(utils.ResourceConfigsPrefix+key, true, utils.NonTransactional) + cache.RemKey(utils.ResourcesPrefix+key, true, utils.NonTransactional) } } *reply = utils.OK @@ -1163,7 +1170,8 @@ func (self *ApierV1) GetCacheStats(attrs utils.AttrCacheStats, reply *utils.Cach cs.LcrProfiles = cache.CountEntries(utils.LCR_PREFIX) cs.Aliases = cache.CountEntries(utils.ALIASES_PREFIX) cs.ReverseAliases = cache.CountEntries(utils.REVERSE_ALIASES_PREFIX) - cs.Resources = cache.CountEntries(utils.ResourceConfigsPrefix) + cs.ResourceProfiles = cache.CountEntries(utils.ResourceProfilesPrefix) + cs.Resources = cache.CountEntries(utils.ResourcesPrefix) if self.CdrStatsSrv != nil { var queueIds []string @@ -1421,17 +1429,35 @@ func (v1 *ApierV1) GetCacheKeys(args utils.ArgsCacheKeys, reply *utils.ArgsCache reply.ReverseAliasIDs = &ids } } - if args.ResourceIDs != nil { + if args.ResourceProfileIDs != nil { var ids []string - if len(*args.ResourceIDs) != 0 { - for _, id := range *args.ResourceIDs { - if _, hasIt := cache.Get(utils.ResourceConfigsPrefix + id); hasIt { + if len(*args.ResourceProfileIDs) != 0 { + for _, id := range *args.ResourceProfileIDs { + if _, hasIt := cache.Get(utils.ResourceProfilesPrefix + id); hasIt { ids = append(ids, id) } } } else { - for _, id := range cache.GetEntryKeys(utils.ResourceConfigsPrefix) { - ids = append(ids, id[len(utils.ResourceConfigsPrefix):]) + for _, id := range cache.GetEntryKeys(utils.ResourceProfilesPrefix) { + ids = append(ids, id[len(utils.ResourceProfilesPrefix):]) + } + } + ids = args.Paginator.PaginateStringSlice(ids) + if len(ids) != 0 { + reply.ResourceProfileIDs = &ids + } + } + if args.ResourceIDs != nil { + var ids []string + if len(*args.ResourceIDs) != 0 { + for _, id := range *args.ResourceIDs { + if _, hasIt := cache.Get(utils.ResourcesPrefix + id); hasIt { + ids = append(ids, id) + } + } + } else { + for _, id := range cache.GetEntryKeys(utils.ResourcesPrefix) { + ids = append(ids, id[len(utils.ResourcesPrefix):]) } } ids = args.Paginator.PaginateStringSlice(ids) @@ -1513,7 +1539,8 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, for _, prfx := range []string{ utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix} { + utils.ResourceProfilesPrefix, + utils.ResourcesPrefix} { loadedIDs, _ := loader.GetLoadedIds(prfx) if err := self.DataDB.CacheDataFromDB(prfx, loadedIDs, true); err != nil { return utils.NewErrServerError(err) diff --git a/apier/v1/apier_it_test.go b/apier/v1/apier_it_test.go index 22bf7ff84..78f6854b1 100644 --- a/apier/v1/apier_it_test.go +++ b/apier/v1/apier_it_test.go @@ -1242,7 +1242,7 @@ func TestApierComputeReverse(t *testing.T) { } func TestApierResetDataAfterLoadFromFolder(t *testing.T) { - expStats := &utils.CacheStats{Destinations: 3, Actions: 6, ActionPlans: 7, AccountActionPlans: 13, Aliases: 1} // We get partial cache info during load, maybe fix this in the future + expStats := &utils.CacheStats{Destinations: 3, Actions: 5, ActionPlans: 7, AccountActionPlans: 13, Aliases: 1} // We get partial cache info during load, maybe fix this in the future var rcvStats *utils.CacheStats if err := rater.Call("ApierV1.GetCacheStats", utils.AttrCacheStats{}, &rcvStats); err != nil { t.Error("Got error on ApierV1.GetCacheStats: ", err.Error()) @@ -1272,7 +1272,8 @@ func TestApierResetDataAfterLoadFromFolder(t *testing.T) { rcvStats.LcrProfiles != 0 || rcvStats.Aliases != 1 || rcvStats.ReverseAliases != 2 || - rcvStats.Resources != 3 { + rcvStats.ResourceProfiles != 3 || + rcvStats.Resources != 0 { t.Errorf("Expecting: %+v, received: %+v", expStats, rcvStats) } } diff --git a/apier/v1/resourcesv1.go b/apier/v1/resourcesv1.go index 18b650b8b..800937dcf 100644 --- a/apier/v1/resourcesv1.go +++ b/apier/v1/resourcesv1.go @@ -61,7 +61,7 @@ func (rsv1 *ResourceSV1) Call(serviceMethod string, args interface{}, reply inte } // GetResourcesForEvent returns Resources matching a specific event -func (rsv1 *ResourceSV1) GetResourcesForEvent(ev map[string]interface{}, reply *[]*engine.ResourceCfg) error { +func (rsv1 *ResourceSV1) GetResourcesForEvent(ev map[string]interface{}, reply *[]*engine.ResourceProfile) error { return rsv1.rls.V1ResourcesForEvent(ev, reply) } @@ -80,16 +80,16 @@ func (rsv1 *ResourceSV1) ReleaseResource(args utils.AttrRLsResourceUsage, reply return rsv1.rls.V1ReleaseResource(args, reply) } -type AttrGetResCfg struct { +type AttrGetResPrf struct { ID string } -// GetResourceConfig returns a resource configuration -func (apierV1 *ApierV1) GetResourceConfig(attr AttrGetResCfg, reply *engine.ResourceCfg) error { +// GetResourceProfile returns a resource configuration +func (apierV1 *ApierV1) GetResourceProfile(attr AttrGetResPrf, reply *engine.ResourceProfile) error { if missing := utils.MissingStructFields(&attr, []string{"ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if rcfg, err := apierV1.DataDB.GetResourceCfg(attr.ID, true, utils.NonTransactional); err != nil { + if rcfg, err := apierV1.DataDB.GetResourceProfile(attr.ID, true, utils.NonTransactional); err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } @@ -100,24 +100,24 @@ func (apierV1 *ApierV1) GetResourceConfig(attr AttrGetResCfg, reply *engine.Reso return nil } -//SetResourceConfig add a new resource configuration -func (apierV1 *ApierV1) SetResourceConfig(attr *engine.ResourceCfg, reply *string) error { +//SetResourceProfile add a new resource configuration +func (apierV1 *ApierV1) SetResourceProfile(attr *engine.ResourceProfile, reply *string) error { if missing := utils.MissingStructFields(attr, []string{"ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := apierV1.DataDB.SetResourceCfg(attr, utils.NonTransactional); err != nil { + if err := apierV1.DataDB.SetResourceProfile(attr, utils.NonTransactional); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -//RemResourceConfig remove a specific resource configuration -func (apierV1 *ApierV1) RemResourceConfig(attrs AttrGetResCfg, reply *string) error { +//RemResourceProfile remove a specific resource configuration +func (apierV1 *ApierV1) RemResourceProfile(attrs AttrGetResPrf, reply *string) error { if missing := utils.MissingStructFields(&attrs, []string{"ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := apierV1.DataDB.RemoveResourceCfg(attrs.ID, utils.NonTransactional); err != nil { + if err := apierV1.DataDB.RemoveResourceProfile(attrs.ID, utils.NonTransactional); err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } diff --git a/apier/v1/smgenericv1_it_test.go b/apier/v1/smgenericv1_it_test.go index 3c87dcad6..ba5a9d5af 100644 --- a/apier/v1/smgenericv1_it_test.go +++ b/apier/v1/smgenericv1_it_test.go @@ -102,7 +102,7 @@ func TestSMGV1CacheStats(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} + LcrProfiles: 5, CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, ResourceProfiles: 3, Resources: 0} var args utils.AttrCacheStats if err := smgV1Rpc.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil { t.Error("Got error on ApierV1.GetCacheStats: ", err.Error()) diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 4460f8de6..f78e33654 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -182,7 +182,7 @@ func (self *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, for _, prfx := range []string{ utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix} { + utils.ResourceProfilesPrefix} { loadedIDs, _ := loader.GetLoadedIds(prfx) if err := self.DataDB.CacheDataFromDB(prfx, loadedIDs, true); err != nil { return utils.NewErrServerError(err) diff --git a/cmd/cgr-engine/rater.go b/cmd/cgr-engine/rater.go index 0046efec6..c65813a11 100755 --- a/cmd/cgr-engine/rater.go +++ b/cmd/cgr-engine/rater.go @@ -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, resIDs []string + var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rspIDs, resIDs []string if cCfg, has := cfg.CacheConfig[utils.CacheDestinations]; !has || !cCfg.Precache { dstIDs = make([]string, 0) // Don't cache any } @@ -82,8 +82,8 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC if cCfg, has := cfg.CacheConfig[utils.CacheReverseAliases]; !has || !cCfg.Precache { rvAlsIDs = make([]string, 0) } - if cCfg, has := cfg.CacheConfig[utils.CacheResourceConfigs]; !has || !cCfg.Precache { - rlIDs = make([]string, 0) + if cCfg, has := cfg.CacheConfig[utils.CacheResourceProfiles]; !has || !cCfg.Precache { + rspIDs = make([]string, 0) } if cCfg, has := cfg.CacheConfig[utils.CacheResources]; !has || !cCfg.Precache { resIDs = make([]string, 0) @@ -95,7 +95,7 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC exitChan <- true return } - if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs); err != nil { + if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rspIDs, resIDs); err != nil { utils.Logger.Crit(fmt.Sprintf(" Cache accounting error: %s", err.Error())) exitChan <- true return diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index e76350134..8c2ab46d3 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -31,7 +31,6 @@ import ( ) var ( - datadb_type = flag.String("datadb_type", config.CgrConfig().DataDbType, "The type of the DataDb database ") datadb_host = flag.String("datadb_host", config.CgrConfig().DataDbHost, "The DataDb host to connect to.") datadb_port = flag.String("datadb_port", config.CgrConfig().DataDbPort, "The DataDb port to bind to.") @@ -225,7 +224,7 @@ func main() { if len(*historyServer) != 0 && *verbose { log.Print("Wrote history.") } - var dstIds, revDstIDs, rplIds, rpfIds, actIds, aapIDs, shgIds, alsIds, lcrIds, dcsIds, rlIDs, aatIDs, ralsIDs []string + var dstIds, revDstIDs, rplIds, rpfIds, actIds, aapIDs, shgIds, alsIds, lcrIds, dcsIds, rspIDs, resIDs, aatIDs, ralsIDs []string if rater != nil { dstIds, _ = tpReader.GetLoadedIds(utils.DESTINATION_PREFIX) revDstIDs, _ = tpReader.GetLoadedIds(utils.REVERSE_DESTINATION_PREFIX) @@ -237,7 +236,8 @@ func main() { alsIds, _ = tpReader.GetLoadedIds(utils.ALIASES_PREFIX) lcrIds, _ = tpReader.GetLoadedIds(utils.LCR_PREFIX) dcsIds, _ = tpReader.GetLoadedIds(utils.DERIVEDCHARGERS_PREFIX) - rlIDs, _ = tpReader.GetLoadedIds(utils.ResourceConfigsPrefix) + rspIDs, _ = tpReader.GetLoadedIds(utils.ResourceProfilesPrefix) + resIDs, _ = tpReader.GetLoadedIds(utils.ResourcesPrefix) aatIDs, _ = tpReader.GetLoadedIds(utils.ACTION_TRIGGER_PREFIX) ralsIDs, _ = tpReader.GetLoadedIds(utils.REVERSE_ALIASES_PREFIX) } @@ -275,7 +275,8 @@ func main() { DerivedChargerIDs: &dcsIds, AliasIDs: &alsIds, ReverseAliasIDs: &ralsIDs, - ResourceIDs: &rlIDs}, + ResourceProfileIDs: &rspIDs, + ResourceIDs: &resIDs}, FlushAll: *flush, }, &reply); err != nil { log.Printf("WARNING: Got error on cache reload: %s\n", err.Error()) diff --git a/config/config_defaults.go b/config/config_defaults.go index 3d6498d94..8ee288a3c 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -64,7 +64,8 @@ const CGRATES_CFG_JSON = ` "aliases": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control aliases caching "reverse_aliases": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control reverse aliases index caching "derived_chargers": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control derived charging rule caching - "resource_configs": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control resource configs caching + "resource_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control resource profiles caching + "resources": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control resources caching "timings": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false}, // control timings caching }, @@ -408,7 +409,7 @@ const CGRATES_CFG_JSON = ` "enabled": false, // starts ResourceLimiter service: . "stats_conns": [], // address where to reach the stats service, empty to disable stats functionality: <""|*internal|x.y.z.y:1234> "store_interval": "", // dump cache regularly to dataDB, 0 - dump at start/shutdown: <""|*never|$dur> - "short_cache": {"limit": -1, "ttl": "1m", "static_ttl": false}, // short cache for data like resources for events in case of allow queries + "short_cache": {"limit": -1, "ttl": "1m", "static_ttl": false}, // short cache for data like resources for events in case of allow queries }, diff --git a/config/config_json_test.go b/config/config_json_test.go index d66132ec1..ecc879adb 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -109,7 +109,10 @@ func TestCacheJsonCfg(t *testing.T) { utils.CacheDerivedChargers: &CacheParamJsonCfg{Limit: utils.IntPointer(-1), Ttl: utils.StringPointer(""), Static_ttl: utils.BoolPointer(false), Precache: utils.BoolPointer(false)}, - utils.CacheResourceConfigs: &CacheParamJsonCfg{Limit: utils.IntPointer(-1), + utils.CacheResourceProfiles: &CacheParamJsonCfg{Limit: utils.IntPointer(-1), + Ttl: utils.StringPointer(""), Static_ttl: utils.BoolPointer(false), + Precache: utils.BoolPointer(false)}, + utils.CacheResources: &CacheParamJsonCfg{Limit: utils.IntPointer(-1), Ttl: utils.StringPointer(""), Static_ttl: utils.BoolPointer(false), Precache: utils.BoolPointer(false)}, utils.CacheTimings: &CacheParamJsonCfg{Limit: utils.IntPointer(-1), diff --git a/config/config_test.go b/config/config_test.go index 6c8169e11..cb26f5522 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -435,7 +435,9 @@ func TestCgrCfgJSONDefaultsCacheCFG(t *testing.T) { TTL: time.Duration(0), StaticTTL: false, Precache: false}, utils.CacheDerivedChargers: &CacheParamConfig{Limit: -1, TTL: time.Duration(0), StaticTTL: false, Precache: false}, - utils.CacheResourceConfigs: &CacheParamConfig{Limit: -1, + utils.CacheResourceProfiles: &CacheParamConfig{Limit: -1, + TTL: time.Duration(0), StaticTTL: false, Precache: false}, + utils.CacheResources: &CacheParamConfig{Limit: -1, TTL: time.Duration(0), StaticTTL: false, Precache: false}, utils.CacheTimings: &CacheParamConfig{Limit: -1, TTL: time.Duration(0), StaticTTL: false, Precache: false}, diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json index e8b0f8b49..db6a53cb1 100644 --- a/data/conf/samples/tutmysql/cgrates.json +++ b/data/conf/samples/tutmysql/cgrates.json @@ -35,7 +35,8 @@ "aliases": {"limit": 10000, "ttl":"0s", "precache": true}, "reverse_aliases": {"limit": 10000, "ttl":"0s", "precache": true}, "derived_chargers": {"limit": 10000, "ttl":"0s", "precache": true}, - "resource_configs": {"limit": 10000, "ttl":"0s", "precache": true}, + "resource_profiles": {"limit": 10000, "ttl":"0s", "precache": true}, + "resources": {"limit": 10000, "ttl":"0s", "precache": true}, }, @@ -71,7 +72,7 @@ "cdre": { "TestTutITExportCDR": { - "content_fields": [ + "content_fields": [ {"tag": "CGRID", "type": "*composed", "value": "CGRID"}, {"tag": "RunID", "type": "*composed", "value": "RunID"}, {"tag":"OriginID", "type": "*composed", "value": "OriginID"}, @@ -131,4 +132,4 @@ }, -} \ No newline at end of file +} diff --git a/data/tariffplans/testtp/Resources.csv b/data/tariffplans/testtp/Resources.csv index 2531cf85a..06204d7c7 100755 --- a/data/tariffplans/testtp/Resources.csv +++ b/data/tariffplans/testtp/Resources.csv @@ -3,4 +3,4 @@ ResGroup1,*string,Account,1001;1002,2014-07-29T15:00:00Z,1s,7,,true,true,20, ResGroup1,*string_prefix,Destination,10;20,,,,,,,, ResGroup1,*rsr_fields,,Subject(~^1.*1$);Destination(1002),,,,,,,, ResGroup2,*destinations,Destination,DST_FS,2014-07-29T15:00:00Z,3600s,8,SPECIAL_1002,true,true,10, -ResGroup3,*cdr_stats,,CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20,,,,,,,, \ No newline at end of file +ResGroup3,*cdr_stats,,CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20,,,,,,,, diff --git a/data/tariffplans/tutorial/Resources.csv b/data/tariffplans/tutorial/Resources.csv index f18c3aae8..980438b6a 100755 --- a/data/tariffplans/tutorial/Resources.csv +++ b/data/tariffplans/tutorial/Resources.csv @@ -5,4 +5,4 @@ ResGroup1,*rsr_fields,,Subject(~^1.*1$);Destination(1002),,,,,,,, ResGroup2,*destinations,Destination,DST_FS,2014-07-29T15:00:00Z,3600s,8,SPECIAL_1002,true,true,10, ResGroup3,*string,Account,3001,2014-07-29T15:00:00Z,1s,3,,true,true,20, #ResGroup3,*timings,SetupTime,PEAK,,,,,,,, -#ResGroup3,*cdr_stats,,CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20,,,,,,,, \ No newline at end of file +#ResGroup3,*cdr_stats,,CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20,,,,,,,, diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 43a411cb5..c2751f3d6 100755 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -265,7 +265,7 @@ cgrates.org,mas,true,another,value,10 *out,cgrates.org,call,remo,remo,*any,*rating,Subject,remo,minu,10 *out,cgrates.org,call,remo,remo,*any,*rating,Account,remo,minu,10 ` - resLimits = ` + resProfiles = ` #Id[0],FilterType[1],FilterFieldName[2],FilterFieldValues[3],ActivationInterval[4],TTL[5],Limit[6],AllocationMessage[7],Weight[8],Thresholds[9] ResGroup21,*string,HdrAccount,1001;1002,2014-07-29T15:00:00Z,1s,2,call,true,true,10, ResGroup21,*string_prefix,HdrDestination,10;20,,,,,,,, @@ -286,7 +286,7 @@ var csvr *TpReader func init() { csvr = NewTpReader(dataStorage, NewStringCSVStorage(',', destinations, timings, rates, destinationRates, ratingPlans, ratingProfiles, - sharedGroups, lcrs, actions, actionPlans, actionTriggers, accountActions, derivedCharges, cdrStats, users, aliases, resLimits, stats, thresholds), testTPID, "") + sharedGroups, lcrs, actions, actionPlans, actionTriggers, accountActions, derivedCharges, cdrStats, users, aliases, resProfiles, stats, thresholds), testTPID, "") if err := csvr.LoadDestinations(); err != nil { log.Print("error in LoadDestinations:", err) } @@ -335,8 +335,8 @@ func init() { if err := csvr.LoadAliases(); err != nil { log.Print("error in LoadAliases:", err) } - if err := csvr.LoadResources(); err != nil { - log.Print("error in LoadResources:", err) + if err := csvr.LoadResourceProfiles(); err != nil { + log.Print("error in LoadResourceProfiles:", err) } if err := csvr.LoadStats(); err != nil { @@ -1388,8 +1388,8 @@ func TestLoadReverseAliases(t *testing.T) { } } -func TestLoadResources(t *testing.T) { - eResLimits := map[string]*utils.TPResource{ +func TestLoadResourceProfiles(t *testing.T) { + eResProfiles := map[string]*utils.TPResource{ "ResGroup21": &utils.TPResource{ TPid: testTPID, ID: "ResGroup21", @@ -1423,10 +1423,10 @@ func TestLoadResources(t *testing.T) { Limit: "2", }, } - if len(csvr.resLimits) != len(eResLimits) { - t.Error("Failed to load resourcelimits: ", len(csvr.resLimits)) - } else if !reflect.DeepEqual(eResLimits["ResGroup22"], csvr.resLimits["ResGroup22"]) { - t.Errorf("Expecting: %+v, received: %+v", eResLimits["ResGroup22"], csvr.resLimits["ResGroup22"]) + if len(csvr.resProfiles) != len(eResProfiles) { + t.Error("Failed to load resourceProfiles: ", len(csvr.resProfiles)) + } else if !reflect.DeepEqual(eResProfiles["ResGroup22"], csvr.resProfiles["ResGroup22"]) { + t.Errorf("Expecting: %+v, received: %+v", eResProfiles["ResGroup22"], csvr.resProfiles["ResGroup22"]) } } diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index c9f6e7d37..a5a5cb61d 100755 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -151,8 +151,8 @@ func TestLoaderITLoadFromCSV(t *testing.T) { if err = loader.LoadAliases(); err != nil { t.Error("Failed loading aliases: ", err.Error()) } - if err = loader.LoadResources(); err != nil { - t.Error("Failed loading resource limits: ", err.Error()) + if err = loader.LoadResourceProfiles(); err != nil { + t.Error("Failed loading resource profiles: ", err.Error()) } if err = loader.LoadStats(); err != nil { t.Error("Failed loading stats: ", err.Error()) @@ -309,10 +309,10 @@ func TestLoaderITWriteToDatabase(t *testing.T) { } } - for k, rl := range loader.resLimits { - rcv, err := loader.dataStorage.GetResourceCfg(k, true, utils.NonTransactional) + for k, rl := range loader.resProfiles { + rcv, err := loader.dataStorage.GetResourceProfile(k, true, utils.NonTransactional) if err != nil { - t.Error("Failed GetResourceLimit: ", err.Error()) + t.Error("Failed GetResourceProfile: ", err.Error()) } rlT, err := APItoResource(rl, "UTC") if err != nil { diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 509b943a5..c26aca1e6 100755 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1918,8 +1918,8 @@ func APItoModelResource(rl *utils.TPResource) (mdls TpResources) { return } -func APItoResource(tpRL *utils.TPResource, timezone string) (rl *ResourceCfg, err error) { - rl = &ResourceCfg{ +func APItoResource(tpRL *utils.TPResource, timezone string) (rp *ResourceProfile, err error) { + rp = &ResourceProfile{ ID: tpRL.ID, Weight: tpRL.Weight, Blocker: tpRL.Blocker, @@ -1927,7 +1927,7 @@ func APItoResource(tpRL *utils.TPResource, timezone string) (rl *ResourceCfg, er Filters: make([]*RequestFilter, len(tpRL.Filters)), } if tpRL.UsageTTL != "" { - if rl.UsageTTL, err = utils.ParseDurationWithSecs(tpRL.UsageTTL); err != nil { + if rp.UsageTTL, err = utils.ParseDurationWithSecs(tpRL.UsageTTL); err != nil { return nil, err } } @@ -1936,19 +1936,19 @@ func APItoResource(tpRL *utils.TPResource, timezone string) (rl *ResourceCfg, er if err := rf.CompileValues(); err != nil { return nil, err } - rl.Filters[i] = rf + rp.Filters[i] = rf } if tpRL.ActivationInterval != nil { - if rl.ActivationInterval, err = tpRL.ActivationInterval.AsActivationInterval(timezone); err != nil { + if rp.ActivationInterval, err = tpRL.ActivationInterval.AsActivationInterval(timezone); err != nil { return nil, err } } if tpRL.Limit != "" { - if rl.Limit, err = strconv.ParseFloat(tpRL.Limit, 64); err != nil { + if rp.Limit, err = strconv.ParseFloat(tpRL.Limit, 64); err != nil { return nil, err } } - return rl, nil + return rp, nil } type TpStatsS []*TpStats diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 1662db579..7533150e9 100755 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -808,7 +808,7 @@ func TestAPItoResource(t *testing.T) { Weight: 10, Limit: "2", } - eRL := &ResourceCfg{ + eRL := &ResourceProfile{ ID: tpRL.ID, Stored: tpRL.Stored, Blocker: tpRL.Blocker, diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 930cd9f63..07311fbb0 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -61,7 +61,7 @@ var sTestsOnStorIT = []func(t *testing.T){ testOnStorITCacheAlias, testOnStorITCacheReverseAlias, testOnStorITCacheResource, - testOnStorITCacheResourceCfg, + testOnStorITCacheResourceProfile, testOnStorITCacheTiming, // ToDo: test cache flush for a prefix // ToDo: testOnStorITLoadAccountingCache @@ -85,7 +85,7 @@ var sTestsOnStorIT = []func(t *testing.T){ testOnStorITCRUDAlias, testOnStorITCRUDReverseAlias, testOnStorITCRUDResource, - testOnStorITCRUDResourceCfg, + testOnStorITCRUDResourceProfile, testOnStorITCRUDTiming, testOnStorITCRUDHistory, testOnStorITCRUDStructVersion, @@ -196,7 +196,7 @@ func testOnStorITSetReqFilterIndexes(t *testing.T) { }, }, } - if err := onStor.SetReqFilterIndexes(utils.ResourcesIndex, idxes); err != nil { + if err := onStor.SetReqFilterIndexes(utils.ResourceProfilesIndex, idxes); err != nil { t.Error(err) } } @@ -227,7 +227,7 @@ func testOnStorITGetReqFilterIndexes(t *testing.T) { }, }, } - if idxes, err := onStor.GetReqFilterIndexes(utils.ResourcesIndex); err != nil { + if idxes, err := onStor.GetReqFilterIndexes(utils.ResourceProfilesIndex); err != nil { t.Error(err) } else if !reflect.DeepEqual(eIdxes, idxes) { t.Errorf("Expecting: %+v, received: %+v", eIdxes, idxes) @@ -242,12 +242,12 @@ func testOnStorITMatchReqFilterIndex(t *testing.T) { "RL1": true, "RL2": true, } - if rcvMp, err := onStor.MatchReqFilterIndex(utils.ResourcesIndex, "Account", "1002"); err != nil { + if rcvMp, err := onStor.MatchReqFilterIndex(utils.ResourceProfilesIndex, "Account", "1002"); err != nil { t.Error(err) } else if !reflect.DeepEqual(eMp, rcvMp) { t.Errorf("Expecting: %+v, received: %+v", eMp, rcvMp) } - if _, err := onStor.MatchReqFilterIndex(utils.ResourcesIndex, "NonexistentField", "1002"); err == nil || err != utils.ErrNotFound { + if _, err := onStor.MatchReqFilterIndex(utils.ResourceProfilesIndex, "NonexistentField", "1002"); err == nil || err != utils.ErrNotFound { t.Error(err) } } @@ -780,8 +780,8 @@ func testOnStorITCacheReverseAlias(t *testing.T) { } } -func testOnStorITCacheResourceCfg(t *testing.T) { - rCfg := &ResourceCfg{ +func testOnStorITCacheResourceProfile(t *testing.T) { + rCfg := &ResourceProfile{ ID: "RL_TEST", Weight: 10, Filters: []*RequestFilter{ @@ -796,24 +796,24 @@ func testOnStorITCacheResourceCfg(t *testing.T) { Thresholds: []string{"TEST_ACTIONS"}, UsageTTL: time.Duration(1 * time.Millisecond), } - if err := onStor.SetResourceCfg(rCfg, utils.NonTransactional); err != nil { + if err := onStor.SetResourceProfile(rCfg, utils.NonTransactional); err != nil { t.Error(err) } - expectedR := []string{"rcf_RL_TEST"} - if itm, err := onStor.GetKeysForPrefix(utils.ResourceConfigsPrefix); err != nil { + expectedR := []string{"rsp_RL_TEST"} + if itm, err := onStor.GetKeysForPrefix(utils.ResourceProfilesPrefix); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedR, itm) { t.Errorf("Expected : %+v, but received %+v", expectedR, itm) } - if _, hasIt := cache.Get(utils.ResourceConfigsPrefix + rCfg.ID); hasIt { + if _, hasIt := cache.Get(utils.ResourceProfilesPrefix + rCfg.ID); hasIt { t.Error("Already in cache") } - if err := onStor.CacheDataFromDB(utils.ResourceConfigsPrefix, []string{rCfg.ID}, false); err != nil { + if err := onStor.CacheDataFromDB(utils.ResourceProfilesPrefix, []string{rCfg.ID}, false); err != nil { t.Error(err) } - if itm, hasIt := cache.Get(utils.ResourceConfigsPrefix + rCfg.ID); !hasIt { + if itm, hasIt := cache.Get(utils.ResourceProfilesPrefix + rCfg.ID); !hasIt { t.Error("Did not cache") - } else if rcv := itm.(*ResourceCfg); !reflect.DeepEqual(rCfg, rcv) { + } else if rcv := itm.(*ResourceProfile); !reflect.DeepEqual(rCfg, rcv) { t.Errorf("Expecting: %+v, received: %+v", rCfg, rcv) } } @@ -1782,8 +1782,8 @@ func testOnStorITCRUDReverseAlias(t *testing.T) { // } } -func testOnStorITCRUDResourceCfg(t *testing.T) { - rL := &ResourceCfg{ +func testOnStorITCRUDResourceProfile(t *testing.T) { + rL := &ResourceProfile{ ID: "RL_TEST2", Weight: 10, Filters: []*RequestFilter{ @@ -1798,13 +1798,13 @@ func testOnStorITCRUDResourceCfg(t *testing.T) { Thresholds: []string{"TEST_ACTIONS"}, UsageTTL: time.Duration(1 * time.Millisecond), } - if _, rcvErr := onStor.GetResourceCfg(rL.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetResourceProfile(rL.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } - if err := onStor.SetResourceCfg(rL, utils.NonTransactional); err != nil { + if err := onStor.SetResourceProfile(rL, utils.NonTransactional); err != nil { t.Error(err) } - if rcv, err := onStor.GetResourceCfg(rL.ID, true, utils.NonTransactional); err != nil { + if rcv, err := onStor.GetResourceProfile(rL.ID, true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(rL, rcv) { t.Errorf("Expecting: %v, received: %v", rL, rcv) @@ -1817,7 +1817,7 @@ func testOnStorITCRUDResourceCfg(t *testing.T) { // t.Error(rcvErr) // } // - if rcv, err := onStor.GetResourceCfg(rL.ID, false, utils.NonTransactional); err != nil { + if rcv, err := onStor.GetResourceProfile(rL.ID, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(rL, rcv) { t.Errorf("Expecting: %v, received: %v", rL, rcv) @@ -1825,10 +1825,46 @@ func testOnStorITCRUDResourceCfg(t *testing.T) { // if err = onStor.SelectDatabase(onStorCfg); err != nil { // t.Error(err) // } - if err := onStor.RemoveResourceCfg(rL.ID, utils.NonTransactional); err != nil { + if err := onStor.RemoveResourceProfile(rL.ID, utils.NonTransactional); err != nil { t.Error(err) } - if _, rcvErr := onStor.GetResourceCfg(rL.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetResourceProfile(rL.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + t.Error(rcvErr) + } +} + +func testOnStorITCRUDResource(t *testing.T) { + res := &Resource{ + ID: "RL1", + Usages: map[string]*ResourceUsage{ + "RU1": &ResourceUsage{ + ID: "RU1", + ExpiryTime: time.Date(2014, 7, 3, 13, 43, 0, 0, time.UTC).Local(), + Units: 2, + }, + }, + TTLIdx: []string{"RU1"}, + } + if _, rcvErr := onStor.GetResource("RL1", true, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { + t.Error(rcvErr) + } + if err := onStor.SetResource(res); err != nil { + t.Error(err) + } + if rcv, err := onStor.GetResource("RL1", true, utils.NonTransactional); err != nil { + t.Error(err) + } else if !(reflect.DeepEqual(res, rcv)) { + t.Errorf("Expecting: %v, received: %v", res, rcv) + } + if rcv, err := onStor.GetResource("RL1", false, utils.NonTransactional); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(res, rcv) { + t.Errorf("Expecting: %v, received: %v", res, rcv) + } + if err := onStor.RemoveResource(res.ID, utils.NonTransactional); err != nil { + t.Error(err) + } + if _, rcvErr := onStor.GetResource(res.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } @@ -1891,63 +1927,27 @@ func testOnStorITCRUDHistory(t *testing.T) { } } -func testOnStorITCRUDResource(t *testing.T) { - res := &Resource{ - ID: "RL1", - Usages: map[string]*ResourceUsage{ - "RU1": &ResourceUsage{ - ID: "RU1", - ExpiryTime: time.Date(2014, 7, 3, 13, 43, 0, 0, time.UTC).Local(), - Units: 2, - }, - }, - TTLIdx: []string{"RU1"}, - } - if _, rcvErr := onStor.GetResource("RL1", true, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { - t.Error(rcvErr) - } - if err := onStor.SetResource(res); err != nil { - t.Error(err) - } - if rcv, err := onStor.GetResource("RL1", true, utils.NonTransactional); err != nil { - t.Error(err) - } else if !(reflect.DeepEqual(res, rcv)) { - t.Errorf("Expecting: %v, received: %v", res, rcv) - } - if rcv, err := onStor.GetResource("RL1", false, utils.NonTransactional); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(res, rcv) { - t.Errorf("Expecting: %v, received: %v", res, rcv) - } - if err := onStor.RemoveResource(res.ID, utils.NonTransactional); err != nil { - t.Error(err) - } - if _, rcvErr := onStor.GetResource(res.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { - t.Error(rcvErr) - } -} - func testOnStorITCRUDStructVersion(t *testing.T) { cv := &StructVersion{ - Destinations: "1", - RatingPlans: "1", - RatingProfiles: "1", - Lcrs: "1", - DerivedChargers: "1", - Actions: "1", - ActionPlans: "1", - ActionTriggers: "1", - SharedGroups: "1", - Accounts: "1", - CdrStats: "1", - Users: "1", - Alias: "1", - PubSubs: "1", - LoadHistory: "1", - Cdrs: "1", - SMCosts: "1", - ResourceConfigs: "1", - Timings: "1", + Destinations: "1", + RatingPlans: "1", + RatingProfiles: "1", + Lcrs: "1", + DerivedChargers: "1", + Actions: "1", + ActionPlans: "1", + ActionTriggers: "1", + SharedGroups: "1", + Accounts: "1", + CdrStats: "1", + Users: "1", + Alias: "1", + PubSubs: "1", + LoadHistory: "1", + Cdrs: "1", + SMCosts: "1", + ResourceProfiles: "1", + Timings: "1", } if _, rcvErr := onStor.GetStructVersion(); rcvErr != utils.ErrNotFound { t.Error(rcvErr) diff --git a/engine/resources.go b/engine/resources.go index 90491093c..f2e70d28a 100755 --- a/engine/resources.go +++ b/engine/resources.go @@ -37,8 +37,8 @@ func init() { rand.Seed(time.Now().UnixNano()) } -// ResourceCfg represents the user configuration for the resource -type ResourceCfg struct { +// ResourceProfile represents the user configuration for the resource +type ResourceProfile struct { ID string // identifier of this resource Filters []*RequestFilter // filters for the request ActivationInterval *utils.ActivationInterval // time when this resource becomes active and expires @@ -68,10 +68,10 @@ func (ru *ResourceUsage) isActive(atTime time.Time) bool { type Resource struct { ID string Usages map[string]*ResourceUsage - TTLIdx []string // holds ordered list of ResourceIDs based on their TTL, empty if feature is disabled - tUsage *float64 // sum of all usages - dirty *bool // the usages were modified, needs save, *bool so we only save if enabled in config - rCfg *ResourceCfg // for ordering purposes + TTLIdx []string // holds ordered list of ResourceIDs based on their TTL, empty if feature is disabled + tUsage *float64 // sum of all usages + dirty *bool // the usages were modified, needs save, *bool so we only save if enabled in config + rPrf *ResourceProfile // for ordering purposes } // removeExpiredUnits removes units which are expired from the resource @@ -147,7 +147,7 @@ type Resources []*Resource // sort based on Weight func (rs Resources) Sort() { - sort.Slice(rs, func(i, j int) bool { return rs[i].rCfg.Weight > rs[j].rCfg.Weight }) + sort.Slice(rs, func(i, j int) bool { return rs[i].rPrf.Weight > rs[j].rPrf.Weight }) } // recordUsage will record the usage in all the resource limits, failing back on errors @@ -200,12 +200,12 @@ func (rs Resources) AllocateResource(ru *ResourceUsage, dryRun bool) (alcMessage defer guardian.Guardian.UnguardIDs(lockIDs...) // Simulate resource usage for _, r := range rs { - if r.rCfg.Limit >= r.totalUsage()+ru.Units { + if r.rPrf.Limit >= r.totalUsage()+ru.Units { if alcMessage == "" { - alcMessage = r.rCfg.AllocationMessage + alcMessage = r.rPrf.AllocationMessage } if alcMessage == "" { // rl.AllocationMessage is not populated - alcMessage = r.rCfg.ID + alcMessage = r.rPrf.ID } } } @@ -366,27 +366,27 @@ func (rS *ResourceService) cachedResourcesForEvent(evUUID string) (rs Resources) // matchingResourcesForEvent returns ordered list of matching resources which are active by the time of the call func (rS *ResourceService) matchingResourcesForEvent(ev map[string]interface{}) (rs Resources, err error) { matchingResources := make(map[string]*Resource) - rIDs, err := matchingItemIDsForEvent(ev, rS.dataDB, utils.ResourcesIndex) + rIDs, err := matchingItemIDsForEvent(ev, rS.dataDB, utils.ResourceProfilesIndex) if err != nil { return nil, err } - lockIDs := utils.PrefixSliceItems(rIDs.Slice(), utils.ResourcesPrefix) + lockIDs := utils.PrefixSliceItems(rIDs.Slice(), utils.ResourceProfilesIndex) guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockIDs...) defer guardian.Guardian.UnguardIDs(lockIDs...) for resName := range rIDs { - rCfg, err := rS.dataDB.GetResourceCfg(resName, false, utils.NonTransactional) + rPrf, err := rS.dataDB.GetResourceProfile(resName, false, utils.NonTransactional) if err != nil { if err == utils.ErrNotFound { continue } return nil, err } - if rCfg.ActivationInterval != nil && - !rCfg.ActivationInterval.IsActiveAtTime(time.Now()) { // not active + if rPrf.ActivationInterval != nil && + !rPrf.ActivationInterval.IsActiveAtTime(time.Now()) { // not active continue } passAllFilters := true - for _, fltr := range rCfg.Filters { + for _, fltr := range rPrf.Filters { if pass, err := fltr.Pass(ev, "", rS.statS); err != nil { return nil, err } else if !pass { @@ -397,15 +397,15 @@ func (rS *ResourceService) matchingResourcesForEvent(ev map[string]interface{}) if !passAllFilters { continue } - r, err := rS.dataDB.GetResource(rCfg.ID, false, "") + r, err := rS.dataDB.GetResource(rPrf.ID, false, "") if err != nil { return nil, err } - if rCfg.Stored { + if rPrf.Stored { r.dirty = utils.BoolPointer(false) } - r.rCfg = rCfg - matchingResources[rCfg.ID] = r // Cannot save it here since we could have errors after and resource will remain unused + r.rPrf = rPrf + matchingResources[rPrf.ID] = r // Cannot save it here since we could have errors after and resource will remain unused } // All good, convert from Map to Slice so we can sort rs = make(Resources, len(matchingResources)) @@ -416,7 +416,7 @@ func (rS *ResourceService) matchingResourcesForEvent(ev map[string]interface{}) } rs.Sort() for i, r := range rs { - if r.rCfg.Blocker { // blocker will stop processing + if r.rPrf.Blocker { // blocker will stop processing rs = rs[:i+1] break } @@ -425,7 +425,7 @@ func (rS *ResourceService) matchingResourcesForEvent(ev map[string]interface{}) } // V1ResourcesForEvent returns active resource configs matching the event -func (rS *ResourceService) V1ResourcesForEvent(ev map[string]interface{}, reply *[]*ResourceCfg) error { +func (rS *ResourceService) V1ResourcesForEvent(ev map[string]interface{}, reply *[]*ResourceProfile) error { matchingRLForEv, err := rS.matchingResourcesForEvent(ev) if err != nil { return err @@ -434,7 +434,7 @@ func (rS *ResourceService) V1ResourcesForEvent(ev map[string]interface{}, reply return utils.ErrNotFound } for _, r := range matchingRLForEv { - *reply = append(*reply, r.rCfg) + *reply = append(*reply, r.rPrf) } return nil } diff --git a/engine/resources_test.go b/engine/resources_test.go index 7aaffb314..42bfaf1f4 100644 --- a/engine/resources_test.go +++ b/engine/resources_test.go @@ -45,7 +45,7 @@ func TestRSRecordUsage(t *testing.T) { r1 = &Resource{ ID: "RL1", - rCfg: &ResourceCfg{ + rPrf: &ResourceProfile{ ID: "RL1", Filters: []*RequestFilter{ &RequestFilter{ @@ -125,7 +125,7 @@ func TestRSUsedUnits(t *testing.T) { func TestRSRsort(t *testing.T) { r2 = &Resource{ ID: "RL2", - rCfg: &ResourceCfg{ + rPrf: &ResourceProfile{ ID: "RL2", Filters: []*RequestFilter{ &RequestFilter{ @@ -159,7 +159,7 @@ func TestRSRsort(t *testing.T) { rs = Resources{r2, r1} rs.Sort() - if rs[0].rCfg.ID != "RL1" { + if rs[0].rPrf.ID != "RL1" { t.Error("Sort failed") } } @@ -199,8 +199,8 @@ func TestRSAllocateResource(t *testing.T) { rs.clearUsage(ru1.ID) rs.clearUsage(ru2.ID) - rs[0].rCfg.UsageTTL = time.Duration(20 * time.Second) - rs[1].rCfg.UsageTTL = time.Duration(20 * time.Second) + rs[0].rPrf.UsageTTL = time.Duration(20 * time.Second) + rs[1].rPrf.UsageTTL = time.Duration(20 * time.Second) //ru1.ExpiryTime = time.Now() //ru2.Time = time.Now() @@ -216,8 +216,8 @@ func TestRSAllocateResource(t *testing.T) { t.Error("Did not receive " + utils.ErrResourceUnavailable.Error() + " error") } - rs[0].rCfg.Limit = 2 - rs[1].rCfg.Limit = 4 + rs[0].rPrf.Limit = 2 + rs[1].rPrf.Limit = 4 if alcMessage, err := rs.AllocateResource(ru1, true); err != nil { t.Error(err.Error()) diff --git a/engine/storage_csv.go b/engine/storage_csv.go index 359bc3ee4..620137790 100755 --- a/engine/storage_csv.go +++ b/engine/storage_csv.go @@ -32,26 +32,26 @@ type CSVStorage struct { readerFunc func(string, rune, int) (*csv.Reader, *os.File, error) // file names destinationsFn, ratesFn, destinationratesFn, timingsFn, destinationratetimingsFn, ratingprofilesFn, - sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resLimitsFn, statsFn, thresholdsFn string + sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resProfilesFn, statsFn, thresholdsFn string } func NewFileCSVStorage(sep rune, destinationsFn, timingsFn, ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, lcrFn, - actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resLimitsFn, statsFn, thresholdsFn string) *CSVStorage { + actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resProfilesFn, statsFn, thresholdsFn string) *CSVStorage { c := new(CSVStorage) c.sep = sep c.readerFunc = openFileCSVStorage c.destinationsFn, c.timingsFn, c.ratesFn, c.destinationratesFn, c.destinationratetimingsFn, c.ratingprofilesFn, - c.sharedgroupsFn, c.lcrFn, c.actionsFn, c.actiontimingsFn, c.actiontriggersFn, c.accountactionsFn, c.derivedChargersFn, c.cdrStatsFn, c.usersFn, c.aliasesFn, c.resLimitsFn, c.statsFn, c.thresholdsFn = destinationsFn, timingsFn, - ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resLimitsFn, statsFn, thresholdsFn + c.sharedgroupsFn, c.lcrFn, c.actionsFn, c.actiontimingsFn, c.actiontriggersFn, c.accountactionsFn, c.derivedChargersFn, c.cdrStatsFn, c.usersFn, c.aliasesFn, c.resProfilesFn, c.statsFn, c.thresholdsFn = destinationsFn, timingsFn, + ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resProfilesFn, statsFn, thresholdsFn return c } func NewStringCSVStorage(sep rune, destinationsFn, timingsFn, ratesFn, destinationratesFn, destinationratetimingsFn, ratingprofilesFn, sharedgroupsFn, lcrFn, - actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resLimitsFn, statsFn, thresholdsFn string) *CSVStorage { + actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resProfilesFn, statsFn, thresholdsFn string) *CSVStorage { c := NewFileCSVStorage(sep, destinationsFn, timingsFn, ratesFn, destinationratesFn, destinationratetimingsFn, - ratingprofilesFn, sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resLimitsFn, statsFn, thresholdsFn) + ratingprofilesFn, sharedgroupsFn, lcrFn, actionsFn, actiontimingsFn, actiontriggersFn, accountactionsFn, derivedChargersFn, cdrStatsFn, usersFn, aliasesFn, resProfilesFn, statsFn, thresholdsFn) c.readerFunc = openStringCSVStorage return c } @@ -593,7 +593,7 @@ func (csvs *CSVStorage) GetTPAliases(filter *utils.TPAliases) ([]*utils.TPAliase } func (csvs *CSVStorage) GetTPResources(tpid, id string) ([]*utils.TPResource, error) { - csvReader, fp, err := csvs.readerFunc(csvs.resLimitsFn, csvs.sep, getColumnCount(TpResource{})) + csvReader, fp, err := csvs.readerFunc(csvs.resProfilesFn, csvs.sep, getColumnCount(TpResource{})) if err != nil { //log.Print("Could not load resource limits file: ", err) // allow writing of the other values @@ -605,11 +605,11 @@ func (csvs *CSVStorage) GetTPResources(tpid, id string) ([]*utils.TPResource, er var tpResLimits TpResources for record, err := csvReader.Read(); err != io.EOF; record, err = csvReader.Read() { if err != nil { - log.Print("bad line in resourcelimits csv: ", err) + log.Print("bad line in resourceprofiles csv: ", err) return nil, err } if tpResLimit, err := csvLoad(TpResource{}, record); err != nil { - log.Print("error loading resourcelimit: ", err) + log.Print("error loading resourceprofiles: ", err) return nil, err } else { tpLimit := tpResLimit.(TpResource) diff --git a/engine/storage_interface.go b/engine/storage_interface.go index fb08c04c4..92853f240 100755 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -80,7 +80,7 @@ type DataDB interface { RemAccountActionPlans(acntID string, apIDs []string) (err error) PushTask(*Task) error PopTask() (*Task, error) - LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) error + LoadAccountingCache(alsIDs, rvAlsIDs, rspIDs, resIDs []string) error GetAccount(string) (*Account, error) SetAccount(*Account) error RemoveAccount(string) error @@ -98,9 +98,9 @@ type DataDB interface { RemoveAlias(string, string) error SetReverseAlias(*Alias, string) error GetReverseAlias(string, bool, string) ([]string, error) - GetResourceCfg(string, bool, string) (*ResourceCfg, error) - SetResourceCfg(*ResourceCfg, string) error - RemoveResourceCfg(string, string) error + GetResourceProfile(string, bool, string) (*ResourceProfile, error) + SetResourceProfile(*ResourceProfile, string) error + RemoveResourceProfile(string, string) error GetResource(string, bool, string) (*Resource, error) SetResource(*Resource) error RemoveResource(string, string) error diff --git a/engine/storage_map.go b/engine/storage_map.go index 10726ae3c..d8fbf8e70 100755 --- a/engine/storage_map.go +++ b/engine/storage_map.go @@ -221,7 +221,8 @@ func (ms *MapStorage) CacheDataFromDB(prefix string, IDs []string, mustBeCached utils.LCR_PREFIX, utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix, + utils.ResourceProfilesPrefix, + utils.ResourcesPrefix, utils.TimingsPrefix}, prefix) { return utils.NewCGRError(utils.REDIS, utils.MandatoryIEMissingCaps, @@ -285,8 +286,10 @@ func (ms *MapStorage) CacheDataFromDB(prefix string, IDs []string, mustBeCached _, err = ms.GetAlias(dataID, true, utils.NonTransactional) case utils.REVERSE_ALIASES_PREFIX: _, err = ms.GetReverseAlias(dataID, true, utils.NonTransactional) - case utils.ResourceConfigsPrefix: - _, err = ms.GetResourceCfg(dataID, true, utils.NonTransactional) + case utils.ResourceProfilesPrefix: + _, err = ms.GetResourceProfile(dataID, true, utils.NonTransactional) + case utils.ResourcesPrefix: + _, err = ms.GetResource(dataID, true, utils.NonTransactional) case utils.TimingsPrefix: _, err = ms.GetTiming(dataID, true, utils.NonTransactional) } @@ -1309,14 +1312,14 @@ func (ms *MapStorage) GetStructVersion() (rsv *StructVersion, err error) { return } -func (ms *MapStorage) GetResourceCfg(id string, skipCache bool, transactionID string) (rl *ResourceCfg, err error) { +func (ms *MapStorage) GetResourceProfile(id string, skipCache bool, transactionID string) (rsp *ResourceProfile, err error) { ms.mu.RLock() defer ms.mu.RUnlock() - key := utils.ResourceConfigsPrefix + id + key := utils.ResourceProfilesPrefix + id if !skipCache { if x, ok := cache.Get(key); ok { if x != nil { - return x.(*ResourceCfg), nil + return x.(*ResourceProfile), nil } return nil, utils.ErrNotFound } @@ -1326,34 +1329,34 @@ func (ms *MapStorage) GetResourceCfg(id string, skipCache bool, transactionID st cache.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } - err = ms.ms.Unmarshal(values, &rl) + err = ms.ms.Unmarshal(values, &rsp) if err != nil { return nil, err } - for _, fltr := range rl.Filters { + for _, fltr := range rsp.Filters { if err := fltr.CompileValues(); err != nil { return nil, err } } - cache.Set(key, rl, cacheCommit(transactionID), transactionID) + cache.Set(key, rsp, cacheCommit(transactionID), transactionID) return } -func (ms *MapStorage) SetResourceCfg(r *ResourceCfg, transactionID string) error { +func (ms *MapStorage) SetResourceProfile(r *ResourceProfile, transactionID string) error { ms.mu.Lock() defer ms.mu.Unlock() result, err := ms.ms.Marshal(r) if err != nil { return err } - ms.dict[utils.ResourceConfigsPrefix+r.ID] = result + ms.dict[utils.ResourceProfilesPrefix+r.ID] = result return nil } -func (ms *MapStorage) RemoveResourceCfg(id string, transactionID string) error { +func (ms *MapStorage) RemoveResourceProfile(id string, transactionID string) error { ms.mu.Lock() defer ms.mu.Unlock() - key := utils.ResourceConfigsPrefix + id + key := utils.ResourceProfilesPrefix + id delete(ms.dict, key) cache.RemKey(key, cacheCommit(transactionID), transactionID) return nil diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index b51307c3e..9b7eb31a1 100755 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -56,7 +56,7 @@ const ( colCrs = "cdr_stats" colLht = "load_history" colVer = "versions" - colRCfg = "resource_configs" + colRsP = "resource_profiles" colSts = "stats" colRFI = "request_filter_indexes" colTmg = "timings" @@ -150,7 +150,7 @@ func (ms *MongoStorage) EnsureIndexes() (err error) { } var colectNames []string // collection names containing this index if ms.storageType == utils.DataDB { - colectNames = []string{colAct, colApl, colAAp, colAtr, colDcs, colRCfgs, colRpl, colLcr, colDst, colRds, colAls, colUsr, colLht, colRes} + colectNames = []string{colAct, colApl, colAAp, colAtr, colDcs, colRsP, colRpl, colLcr, colDst, colRds, colAls, colUsr, colLht, colRes} } for _, col := range colectNames { if err = db.C(col).EnsureIndex(idx); err != nil { @@ -324,7 +324,7 @@ func (ms *MongoStorage) getColNameForPrefix(prefix string) (name string, ok bool utils.CDR_STATS_PREFIX: colCrs, utils.LOADINST_KEY: colLht, utils.VERSION_PREFIX: colVer, - utils.ResourceConfigsPrefix: colRCfg, + utils.ResourceProfilesPrefix: colRsP, utils.StatsPrefix: colSts, utils.TimingsPrefix: colTmg, utils.ResourcesPrefix: colRes, @@ -438,11 +438,11 @@ func (ms *MongoStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs return } -func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) { +func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rpIDs, resIDs []string) (err error) { for key, ids := range map[string][]string{ utils.ALIASES_PREFIX: alsIDs, utils.REVERSE_ALIASES_PREFIX: rvAlsIDs, - utils.ResourceConfigsPrefix: rlIDs, + utils.ResourceProfilesPrefix: rpIDs, utils.ResourcesPrefix: resIDs, } { if err = ms.CacheDataFromDB(key, ids, false); err != nil { @@ -469,7 +469,7 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached utils.LCR_PREFIX, utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix, + utils.ResourceProfilesPrefix, utils.TimingsPrefix, utils.ResourcesPrefix}, prfx) { return utils.NewCGRError(utils.MONGO, @@ -534,12 +534,12 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached _, err = ms.GetAlias(dataID, true, utils.NonTransactional) case utils.REVERSE_ALIASES_PREFIX: _, err = ms.GetReverseAlias(dataID, true, utils.NonTransactional) - case utils.ResourceConfigsPrefix: - _, err = ms.GetResourceCfg(dataID, true, utils.NonTransactional) - case utils.TimingsPrefix: - _, err = ms.GetTiming(dataID, true, utils.NonTransactional) + case utils.ResourceProfilesPrefix: + _, err = ms.GetResourceProfile(dataID, true, utils.NonTransactional) case utils.ResourcesPrefix: _, err = ms.GetResource(dataID, true, utils.NonTransactional) + case utils.TimingsPrefix: + _, err = ms.GetTiming(dataID, true, utils.NonTransactional) } if err != nil { return utils.NewCGRError(utils.MONGO, @@ -630,10 +630,15 @@ func (ms *MongoStorage) GetKeysForPrefix(prefix string) (result []string, err er for iter.Next(&keyResult) { result = append(result, utils.REVERSE_ALIASES_PREFIX+keyResult.Key) } - case utils.ResourceConfigsPrefix: - iter := db.C(colRCfg).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() + case utils.ResourceProfilesPrefix: + iter := db.C(colRsP).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() for iter.Next(&idResult) { - result = append(result, utils.ResourceConfigsPrefix+idResult.Id) + result = append(result, utils.ResourceProfilesPrefix+idResult.Id) + } + case utils.ResourcesPrefix: + iter := db.C(colRes).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() + for iter.Next(&idResult) { + result = append(result, utils.ResourcesPrefix+idResult.Id) } case utils.StatsPrefix: iter := db.C(colSts).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() @@ -655,11 +660,6 @@ func (ms *MongoStorage) GetKeysForPrefix(prefix string) (result []string, err er for iter.Next(&idResult) { result = append(result, utils.TimingsPrefix+idResult.Id) } - case utils.ResourcesPrefix: - iter := db.C(colRes).Find(bson.M{"id": bson.M{"$regex": bson.RegEx{Pattern: subject}}}).Select(bson.M{"id": 1}).Iter() - for iter.Next(&idResult) { - result = append(result, utils.ResourcesPrefix+idResult.Id) - } default: err = fmt.Errorf("unsupported prefix in GetKeysForPrefix: %s", prefix) } @@ -1857,49 +1857,49 @@ func (ms *MongoStorage) GetStructVersion() (rsv *StructVersion, err error) { return } -func (ms *MongoStorage) GetResourceCfg(id string, skipCache bool, transactionID string) (rl *ResourceCfg, err error) { - key := utils.ResourceConfigsPrefix + id +func (ms *MongoStorage) GetResourceProfile(id string, skipCache bool, transactionID string) (rp *ResourceProfile, err error) { + key := utils.ResourceProfilesPrefix + id if !skipCache { if x, ok := cache.Get(key); ok { if x == nil { return nil, utils.ErrNotFound } - return x.(*ResourceCfg), nil + return x.(*ResourceProfile), nil } } - session, col := ms.conn(colRCfg) + session, col := ms.conn(colRsP) defer session.Close() - rl = new(ResourceCfg) - if err = col.Find(bson.M{"id": id}).One(rl); err != nil { + rp = new(ResourceProfile) + if err = col.Find(bson.M{"id": id}).One(rp); err != nil { if err == mgo.ErrNotFound { err = utils.ErrNotFound cache.Set(key, nil, cacheCommit(transactionID), transactionID) } return nil, err } - for _, fltr := range rl.Filters { + for _, fltr := range rp.Filters { if err = fltr.CompileValues(); err != nil { return } } - cache.Set(key, rl, cacheCommit(transactionID), transactionID) + cache.Set(key, rp, cacheCommit(transactionID), transactionID) return } -func (ms *MongoStorage) SetResourceCfg(rl *ResourceCfg, transactionID string) (err error) { - session, col := ms.conn(colRCfg) +func (ms *MongoStorage) SetResourceProfile(rp *ResourceProfile, transactionID string) (err error) { + session, col := ms.conn(colRsP) defer session.Close() - _, err = col.Upsert(bson.M{"id": rl.ID}, rl) + _, err = col.Upsert(bson.M{"id": rp.ID}, rp) return } -func (ms *MongoStorage) RemoveResourceCfg(id string, transactionID string) (err error) { - session, col := ms.conn(colRCfg) +func (ms *MongoStorage) RemoveResourceProfile(id string, transactionID string) (err error) { + session, col := ms.conn(colRsP) defer session.Close() if err = col.Remove(bson.M{"id": id}); err != nil { return } - cache.RemKey(utils.ResourceConfigsPrefix+id, cacheCommit(transactionID), transactionID) + cache.RemKey(utils.ResourceProfilesPrefix+id, cacheCommit(transactionID), transactionID) return nil } diff --git a/engine/storage_redis.go b/engine/storage_redis.go index ee1d50382..5307fd7a5 100755 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -140,11 +140,11 @@ func (rs *RedisStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs return } -func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) { +func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rpIDs, resIDs []string) (err error) { for key, ids := range map[string][]string{ utils.ALIASES_PREFIX: alsIDs, utils.REVERSE_ALIASES_PREFIX: rvAlsIDs, - utils.ResourceConfigsPrefix: rlIDs, + utils.ResourceProfilesPrefix: rpIDs, utils.ResourcesPrefix: resIDs, } { if err = rs.CacheDataFromDB(key, ids, false); err != nil { @@ -231,9 +231,9 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached utils.LCR_PREFIX, utils.ALIASES_PREFIX, utils.REVERSE_ALIASES_PREFIX, - utils.ResourceConfigsPrefix, - utils.TimingsPrefix, - utils.ResourcesPrefix}, prfx) { + utils.ResourceProfilesPrefix, + utils.ResourcesPrefix, + utils.TimingsPrefix}, prfx) { return utils.NewCGRError(utils.REDIS, utils.MandatoryIEMissingCaps, utils.UnsupportedCachePrefix, @@ -296,12 +296,12 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached _, err = rs.GetAlias(dataID, true, utils.NonTransactional) case utils.REVERSE_ALIASES_PREFIX: _, err = rs.GetReverseAlias(dataID, true, utils.NonTransactional) - case utils.ResourceConfigsPrefix: - _, err = rs.GetResourceCfg(dataID, true, utils.NonTransactional) - case utils.TimingsPrefix: - _, err = rs.GetTiming(dataID, true, utils.NonTransactional) + case utils.ResourceProfilesPrefix: + _, err = rs.GetResourceProfile(dataID, true, utils.NonTransactional) case utils.ResourcesPrefix: _, err = rs.GetResource(dataID, true, utils.NonTransactional) + case utils.TimingsPrefix: + _, err = rs.GetTiming(dataID, true, utils.NonTransactional) } if err != nil { return utils.NewCGRError(utils.REDIS, @@ -1378,14 +1378,14 @@ func (rs *RedisStorage) GetStructVersion() (rsv *StructVersion, err error) { return } -func (rs *RedisStorage) GetResourceCfg(id string, skipCache bool, transactionID string) (rl *ResourceCfg, err error) { - key := utils.ResourceConfigsPrefix + id +func (rs *RedisStorage) GetResourceProfile(id string, skipCache bool, transactionID string) (rsp *ResourceProfile, err error) { + key := utils.ResourceProfilesPrefix + id if !skipCache { if x, ok := cache.Get(key); ok { if x == nil { return nil, utils.ErrNotFound } - return x.(*ResourceCfg), nil + return x.(*ResourceProfile), nil } } var values []byte @@ -1396,28 +1396,28 @@ func (rs *RedisStorage) GetResourceCfg(id string, skipCache bool, transactionID } return } - if err = rs.ms.Unmarshal(values, &rl); err != nil { + if err = rs.ms.Unmarshal(values, &rsp); err != nil { return } - for _, fltr := range rl.Filters { + for _, fltr := range rsp.Filters { if err = fltr.CompileValues(); err != nil { return } } - cache.Set(key, rl, cacheCommit(transactionID), transactionID) + cache.Set(key, rsp, cacheCommit(transactionID), transactionID) return } -func (rs *RedisStorage) SetResourceCfg(r *ResourceCfg, transactionID string) error { - result, err := rs.ms.Marshal(r) +func (rs *RedisStorage) SetResourceProfile(rsp *ResourceProfile, transactionID string) error { + result, err := rs.ms.Marshal(rsp) if err != nil { return err } - return rs.Cmd("SET", utils.ResourceConfigsPrefix+r.ID, result).Err + return rs.Cmd("SET", utils.ResourceProfilesPrefix+rsp.ID, result).Err } -func (rs *RedisStorage) RemoveResourceCfg(id string, transactionID string) (err error) { - key := utils.ResourceConfigsPrefix + id +func (rs *RedisStorage) RemoveResourceProfile(id string, transactionID string) (err error) { + key := utils.ResourceProfilesPrefix + id if err = rs.Cmd("DEL", key).Err; err != nil { return } diff --git a/engine/tp_reader.go b/engine/tp_reader.go index 052219dc6..12e5f77ae 100755 --- a/engine/tp_reader.go +++ b/engine/tp_reader.go @@ -52,7 +52,7 @@ type TpReader struct { cdrStats map[string]*CdrStats users map[string]*UserProfile aliases map[string]*Alias - resLimits map[string]*utils.TPResource + resProfiles map[string]*utils.TPResource stats map[string]*utils.TPStats thresholds map[string]*utils.TPThreshold @@ -126,7 +126,7 @@ func (tpr *TpReader) Init() { tpr.users = make(map[string]*UserProfile) tpr.aliases = make(map[string]*Alias) tpr.derivedChargers = make(map[string]*utils.DerivedChargers) - tpr.resLimits = make(map[string]*utils.TPResource) + tpr.resProfiles = make(map[string]*utils.TPResource) tpr.stats = make(map[string]*utils.TPStats) tpr.thresholds = make(map[string]*utils.TPThreshold) tpr.revDests = make(map[string][]string) @@ -1591,21 +1591,21 @@ func (tpr *TpReader) LoadAliases() error { return err } -func (tpr *TpReader) LoadResourcesFiltered(tag string) error { +func (tpr *TpReader) LoadResourceProfilesFiltered(tag string) error { rls, err := tpr.lr.GetTPResources(tpr.tpid, tag) if err != nil { return err } - mapRLs := make(map[string]*utils.TPResource) + mapRsPs := make(map[string]*utils.TPResource) for _, rl := range rls { - mapRLs[rl.ID] = rl + mapRsPs[rl.ID] = rl } - tpr.resLimits = mapRLs + tpr.resProfiles = mapRsPs return nil } -func (tpr *TpReader) LoadResources() error { - return tpr.LoadResourcesFiltered("") +func (tpr *TpReader) LoadResourceProfiles() error { + return tpr.LoadResourceProfilesFiltered("") } func (tpr *TpReader) LoadStatsFiltered(tag string) error { @@ -1691,7 +1691,7 @@ func (tpr *TpReader) LoadAll() (err error) { if err = tpr.LoadAliases(); err != nil && err.Error() != utils.NotFoundCaps { return } - if err = tpr.LoadResources(); err != nil && err.Error() != utils.NotFoundCaps { + if err = tpr.LoadResourceProfiles(); err != nil && err.Error() != utils.NotFoundCaps { return } if err = tpr.LoadStats(); err != nil && err.Error() != utils.NotFoundCaps { @@ -1933,18 +1933,18 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose, disable_reverse bool) (err } } if verbose { - log.Print("Resources:") + log.Print("ResourceProfiles:") } - for _, tpRL := range tpr.resLimits { - rl, err := APItoResource(tpRL, tpr.timezone) + for _, tpRsp := range tpr.resProfiles { + rsp, err := APItoResource(tpRsp, tpr.timezone) if err != nil { return err } - if err = tpr.dataStorage.SetResourceCfg(rl, utils.NonTransactional); err != nil { + if err = tpr.dataStorage.SetResourceProfile(rsp, utils.NonTransactional); err != nil { return err } if verbose { - log.Print("\t", rl.ID) + log.Print("\t", rsp.ID) } } if verbose { @@ -2013,15 +2013,15 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose, disable_reverse bool) (err return err } } - if len(tpr.resLimits) > 0 { + if len(tpr.resProfiles) > 0 { if verbose { - log.Print("Indexing resource limits") + log.Print("Indexing resource profiles") } - rlIdxr, err := NewReqFilterIndexer(tpr.dataStorage, utils.ResourcesIndex) + rlIdxr, err := NewReqFilterIndexer(tpr.dataStorage, utils.ResourceProfilesIndex) if err != nil { return err } - for _, tpRL := range tpr.resLimits { + for _, tpRL := range tpr.resProfiles { if rl, err := APItoResource(tpRL, tpr.timezone); err != nil { return err } else { @@ -2029,7 +2029,7 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose, disable_reverse bool) (err } } if verbose { - log.Printf("Indexed ResourceLimit keys: %+v", rlIdxr.ChangedKeys().Slice()) + log.Printf("Indexed ResourceProfile keys: %+v", rlIdxr.ChangedKeys().Slice()) } if err := rlIdxr.StoreIndexes(); err != nil { return err @@ -2141,7 +2141,7 @@ func (tpr *TpReader) ShowStatistics() { // cdr stats log.Print("CDR stats: ", len(tpr.cdrStats)) // resource limits - log.Print("ResourceLimits: ", len(tpr.resLimits)) + log.Print("ResourceProfiles: ", len(tpr.resProfiles)) // stats log.Print("Stats: ", len(tpr.stats)) } @@ -2253,10 +2253,10 @@ func (tpr *TpReader) GetLoadedIds(categ string) ([]string, error) { i++ } return keys, nil - case utils.ResourceConfigsPrefix: - keys := make([]string, len(tpr.resLimits)) + case utils.ResourceProfilesPrefix: + keys := make([]string, len(tpr.resProfiles)) i := 0 - for k := range tpr.resLimits { + for k := range tpr.resProfiles { keys[i] = k i++ } diff --git a/engine/version.go b/engine/version.go index 855f4976b..76554a292 100644 --- a/engine/version.go +++ b/engine/version.go @@ -56,48 +56,48 @@ func CheckVersion(dataDB DataDB) error { var ( CurrentVersion = &StructVersion{ - Destinations: "1", - RatingPlans: "1", - RatingProfiles: "1", - Lcrs: "1", - DerivedChargers: "1", - Actions: "1", - ActionPlans: "1", - ActionTriggers: "1", - SharedGroups: "1", - Accounts: "1", - CdrStats: "1", - Users: "1", - Alias: "1", - PubSubs: "1", - LoadHistory: "1", - Cdrs: "1", - SMCosts: "1", - ResourceConfigs: "1", - Timings: "1", + Destinations: "1", + RatingPlans: "1", + RatingProfiles: "1", + Lcrs: "1", + DerivedChargers: "1", + Actions: "1", + ActionPlans: "1", + ActionTriggers: "1", + SharedGroups: "1", + Accounts: "1", + CdrStats: "1", + Users: "1", + Alias: "1", + PubSubs: "1", + LoadHistory: "1", + Cdrs: "1", + SMCosts: "1", + ResourceProfiles: "1", + Timings: "1", } ) type StructVersion struct { - Destinations string - RatingPlans string - RatingProfiles string - Lcrs string - DerivedChargers string - Actions string - ActionPlans string - ActionTriggers string - SharedGroups string - Accounts string - CdrStats string - Users string - Alias string - PubSubs string - LoadHistory string - Cdrs string - SMCosts string - ResourceConfigs string - Timings string + Destinations string + RatingPlans string + RatingProfiles string + Lcrs string + DerivedChargers string + Actions string + ActionPlans string + ActionTriggers string + SharedGroups string + Accounts string + CdrStats string + Users string + Alias string + PubSubs string + LoadHistory string + Cdrs string + SMCosts string + ResourceProfiles string + Timings string } type MigrationInfo struct { @@ -228,11 +228,11 @@ func (sv *StructVersion) CompareAndMigrate(dbVer *StructVersion) []*MigrationInf CurrentVersion: CurrentVersion.SMCosts, }) } - if sv.ResourceConfigs != dbVer.ResourceConfigs { + if sv.ResourceProfiles != dbVer.ResourceProfiles { migrationInfoList = append(migrationInfoList, &MigrationInfo{ - Prefix: utils.ResourceConfigsPrefix, - DbVersion: dbVer.ResourceConfigs, - CurrentVersion: CurrentVersion.ResourceConfigs, + Prefix: utils.ResourceProfilesPrefix, + DbVersion: dbVer.ResourceProfiles, + CurrentVersion: CurrentVersion.ResourceProfiles, }) } return migrationInfoList diff --git a/general_tests/tut_smgeneric_it_test.go b/general_tests/tut_smgeneric_it_test.go index 2270edcdc..133c92035 100644 --- a/general_tests/tut_smgeneric_it_test.go +++ b/general_tests/tut_smgeneric_it_test.go @@ -100,7 +100,7 @@ func TestTutSMGCacheStats(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, ResourceProfiles: 3, Resources: 0} var args utils.AttrCacheStats if err := tutSMGRpc.Call("ApierV2.GetCacheStats", args, &rcvStats); err != nil { t.Error("Got error on ApierV2.GetCacheStats: ", err.Error()) diff --git a/general_tests/tutorial_it_test.go b/general_tests/tutorial_it_test.go index 235bc8526..1c21a5503 100644 --- a/general_tests/tutorial_it_test.go +++ b/general_tests/tutorial_it_test.go @@ -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, ResourcesConfig: 3, Resources: 0} + CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, ResourceProfiles: 3, Resources: 0} var args utils.AttrCacheStats if err := tutLocalRpc.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil { t.Error("Got error on ApierV1.GetCacheStats: ", err.Error()) diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 103681905..9ffe95795 100755 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -667,7 +667,7 @@ type ArgsCache struct { DerivedChargerIDs *[]string AliasIDs *[]string ReverseAliasIDs *[]string - ResourceConfigIDs *[]string + ResourceProfileIDs *[]string ResourceIDs *[]string StatsIDs *[]string ThresholdsIDs *[]string @@ -705,7 +705,7 @@ type CacheStats struct { Users int Aliases int ReverseAliases int - ResourceConfigs int + ResourceProfiles int Resources int //Stats int //thresholds int diff --git a/utils/consts.go b/utils/consts.go index 3c3d63be2..50fb98779 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -54,7 +54,7 @@ var ( CacheAliases: ALIASES_PREFIX, CacheReverseAliases: REVERSE_ALIASES_PREFIX, CacheDerivedChargers: DERIVEDCHARGERS_PREFIX, - CacheResourceConfigs: ResourceConfigsPrefix, + CacheResourceProfiles: ResourceProfilesPrefix, CacheResources: ResourcesPrefix, CacheTimings: TimingsPrefix, } @@ -236,8 +236,8 @@ const ( ALIASES_PREFIX = "als_" REVERSE_ALIASES_PREFIX = "rls_" ResourcesPrefix = "res_" - ResourcesIndex = "rsi_" - ResourceConfigsPrefix = "rcf_" + ResourceProfilesIndex = "rsi_" + ResourceProfilesPrefix = "rsp_" StatsPrefix = "sts_" StatsIndex = "sti_" ThresholdsPrefix = "ths_" @@ -427,7 +427,7 @@ const ( CacheReverseAliases = "reverse_aliases" CacheDerivedChargers = "derived_chargers" CacheResources = "resources" - CacheResourceConfigs = "resource_configs" + CacheResourceProfiles = "resource_profiles" CacheTimings = "timings" StatS = "stats" CostSource = "CostSource"