mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
CacheDataFromDB with ActionTriggers support
This commit is contained in:
@@ -51,6 +51,7 @@ var sTestsOnStorIT = []func(t *testing.T){
|
||||
testOnStorITCacheRatingProfile,
|
||||
testOnStorITCacheActions,
|
||||
testOnStorITCacheActionPlan,
|
||||
testOnStorITCacheActionTriggers,
|
||||
testOnStorITCacheSharedGroup,
|
||||
testOnStorITCacheDerivedChargers,
|
||||
testOnStorITCacheLCR,
|
||||
@@ -454,6 +455,35 @@ func testOnStorITCacheActionPlan(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func testOnStorITCacheActionTriggers(t *testing.T) {
|
||||
ats := ActionTriggers{
|
||||
&ActionTrigger{
|
||||
ID: "testOnStorITCacheActionTrigger",
|
||||
Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Timings: make([]*RITiming, 0)},
|
||||
ThresholdValue: 2,
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
ActionsID: "TEST_ACTIONS",
|
||||
LastExecutionTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(),
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(),
|
||||
ActivationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local()},
|
||||
}
|
||||
atsID := ats[0].ID
|
||||
if err := onStor.SetActionTriggers(atsID, ats, utils.NonTransactional); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, hasIt := cache.Get(utils.ACTION_TRIGGER_PREFIX + atsID); hasIt {
|
||||
t.Error("Already in cache")
|
||||
}
|
||||
if err := onStor.CacheDataFromDB(utils.ACTION_TRIGGER_PREFIX, []string{atsID}, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if itm, hasIt := cache.Get(utils.ACTION_TRIGGER_PREFIX + atsID); !hasIt {
|
||||
t.Error("Did not cache")
|
||||
} else if rcv := itm.(ActionTriggers); !reflect.DeepEqual(ats, rcv) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", ats, rcv)
|
||||
}
|
||||
}
|
||||
|
||||
func testOnStorITCacheSharedGroup(t *testing.T) {
|
||||
sg := &SharedGroup{
|
||||
Id: "SG1",
|
||||
|
||||
@@ -447,6 +447,7 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
utils.RATING_PROFILE_PREFIX,
|
||||
utils.ACTION_PREFIX,
|
||||
utils.ACTION_PLAN_PREFIX,
|
||||
utils.ACTION_TRIGGER_PREFIX,
|
||||
utils.SHARED_GROUP_PREFIX,
|
||||
utils.DERIVEDCHARGERS_PREFIX,
|
||||
utils.LCR_PREFIX,
|
||||
@@ -491,6 +492,8 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
nrItems = ms.cacheCfg.Actions.Limit
|
||||
case utils.ACTION_PLAN_PREFIX:
|
||||
nrItems = ms.cacheCfg.ActionPlans.Limit
|
||||
case utils.ACTION_TRIGGER_PREFIX:
|
||||
nrItems = ms.cacheCfg.ActionTriggers.Limit
|
||||
case utils.SHARED_GROUP_PREFIX:
|
||||
nrItems = ms.cacheCfg.SharedGroups.Limit
|
||||
case utils.DERIVEDCHARGERS_PREFIX:
|
||||
@@ -527,6 +530,8 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
_, err = ms.GetActions(dataID, false, utils.NonTransactional)
|
||||
case utils.ACTION_PLAN_PREFIX:
|
||||
_, err = ms.GetActionPlan(dataID, false, utils.NonTransactional)
|
||||
case utils.ACTION_TRIGGER_PREFIX:
|
||||
_, err = ms.GetActionTriggers(dataID, true, utils.NonTransactional)
|
||||
case utils.SHARED_GROUP_PREFIX:
|
||||
_, err = ms.GetSharedGroup(dataID, false, utils.NonTransactional)
|
||||
case utils.DERIVEDCHARGERS_PREFIX:
|
||||
@@ -1425,8 +1430,9 @@ func (ms *MongoStorage) AddLoadHistory(ldInst *utils.LoadInstance, loadHistSize
|
||||
}
|
||||
|
||||
func (ms *MongoStorage) GetActionTriggers(key string, skipCache bool, transactionID string) (atrs ActionTriggers, err error) {
|
||||
cacheKey := utils.ACTION_TRIGGER_PREFIX + key
|
||||
if !skipCache {
|
||||
if x, ok := cache.Get(utils.ACTION_TRIGGER_PREFIX + key); ok {
|
||||
if x, ok := cache.Get(cacheKey); ok {
|
||||
if x != nil {
|
||||
return x.(ActionTriggers), nil
|
||||
}
|
||||
@@ -1440,11 +1446,15 @@ func (ms *MongoStorage) GetActionTriggers(key string, skipCache bool, transactio
|
||||
}
|
||||
session, col := ms.conn(colAtr)
|
||||
defer session.Close()
|
||||
err = col.Find(bson.M{"key": key}).One(&kv)
|
||||
if err == nil {
|
||||
atrs = kv.Value
|
||||
if err = col.Find(bson.M{"key": key}).One(&kv); err != nil {
|
||||
if err == mgo.ErrNotFound {
|
||||
cache.Set(cacheKey, nil, cacheCommit(transactionID), transactionID)
|
||||
err = utils.ErrNotFound
|
||||
}
|
||||
return
|
||||
}
|
||||
cache.Set(utils.ACTION_TRIGGER_PREFIX+key, atrs, cacheCommit(transactionID), transactionID)
|
||||
atrs = kv.Value
|
||||
cache.Set(cacheKey, atrs, cacheCommit(transactionID), transactionID)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1462,7 +1472,6 @@ func (ms *MongoStorage) SetActionTriggers(key string, atrs ActionTriggers, trans
|
||||
Key string
|
||||
Value ActionTriggers
|
||||
}{Key: key, Value: atrs})
|
||||
cache.RemKey(utils.ACTION_TRIGGER_PREFIX+key, cacheCommit(transactionID), transactionID)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -239,6 +239,7 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
utils.RATING_PROFILE_PREFIX,
|
||||
utils.ACTION_PREFIX,
|
||||
utils.ACTION_PLAN_PREFIX,
|
||||
utils.ACTION_TRIGGER_PREFIX,
|
||||
utils.SHARED_GROUP_PREFIX,
|
||||
utils.DERIVEDCHARGERS_PREFIX,
|
||||
utils.LCR_PREFIX,
|
||||
@@ -283,6 +284,8 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
nrItems = rs.cacheCfg.Actions.Limit
|
||||
case utils.ACTION_PLAN_PREFIX:
|
||||
nrItems = rs.cacheCfg.ActionPlans.Limit
|
||||
case utils.ACTION_TRIGGER_PREFIX:
|
||||
nrItems = rs.cacheCfg.ActionTriggers.Limit
|
||||
case utils.SHARED_GROUP_PREFIX:
|
||||
nrItems = rs.cacheCfg.SharedGroups.Limit
|
||||
case utils.DERIVEDCHARGERS_PREFIX:
|
||||
@@ -308,29 +311,31 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
|
||||
}
|
||||
switch prfx {
|
||||
case utils.DESTINATION_PREFIX:
|
||||
_, err = rs.GetDestination(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetDestination(dataID, true, utils.NonTransactional)
|
||||
case utils.REVERSE_DESTINATION_PREFIX:
|
||||
_, err = rs.GetReverseDestination(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetReverseDestination(dataID, true, utils.NonTransactional)
|
||||
case utils.RATING_PLAN_PREFIX:
|
||||
_, err = rs.GetRatingPlan(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetRatingPlan(dataID, true, utils.NonTransactional)
|
||||
case utils.RATING_PROFILE_PREFIX:
|
||||
_, err = rs.GetRatingProfile(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetRatingProfile(dataID, true, utils.NonTransactional)
|
||||
case utils.ACTION_PREFIX:
|
||||
_, err = rs.GetActions(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetActions(dataID, true, utils.NonTransactional)
|
||||
case utils.ACTION_PLAN_PREFIX:
|
||||
_, err = rs.GetActionPlan(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetActionPlan(dataID, true, utils.NonTransactional)
|
||||
case utils.ACTION_TRIGGER_PREFIX:
|
||||
_, err = rs.GetActionTriggers(dataID, true, utils.NonTransactional)
|
||||
case utils.SHARED_GROUP_PREFIX:
|
||||
_, err = rs.GetSharedGroup(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetSharedGroup(dataID, true, utils.NonTransactional)
|
||||
case utils.DERIVEDCHARGERS_PREFIX:
|
||||
_, err = rs.GetDerivedChargers(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetDerivedChargers(dataID, true, utils.NonTransactional)
|
||||
case utils.LCR_PREFIX:
|
||||
_, err = rs.GetLCR(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetLCR(dataID, true, utils.NonTransactional)
|
||||
case utils.ALIASES_PREFIX:
|
||||
_, err = rs.GetAlias(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetAlias(dataID, true, utils.NonTransactional)
|
||||
case utils.REVERSE_ALIASES_PREFIX:
|
||||
_, err = rs.GetReverseAlias(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetReverseAlias(dataID, true, utils.NonTransactional)
|
||||
case utils.ResourceLimitsPrefix:
|
||||
_, err = rs.GetResourceLimit(dataID, false, utils.NonTransactional)
|
||||
_, err = rs.GetResourceLimit(dataID, true, utils.NonTransactional)
|
||||
}
|
||||
if err != nil {
|
||||
return utils.NewCGRError(utils.REDIS,
|
||||
@@ -1069,15 +1074,22 @@ func (rs *RedisStorage) GetActionTriggers(key string, skipCache bool, transactio
|
||||
key = utils.ACTION_TRIGGER_PREFIX + key
|
||||
if !skipCache {
|
||||
if x, ok := cache.Get(key); ok {
|
||||
if x != nil {
|
||||
return x.(ActionTriggers), nil
|
||||
if x == nil {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return nil, utils.ErrNotFound
|
||||
return x.(ActionTriggers), nil
|
||||
}
|
||||
}
|
||||
var values []byte
|
||||
if values, err = rs.Cmd("GET", key).Bytes(); err == nil {
|
||||
err = rs.ms.Unmarshal(values, &atrs)
|
||||
if values, err = rs.Cmd("GET", key).Bytes(); err != nil {
|
||||
if err.Error() == "wrong type" { // did not find the destination
|
||||
cache.Set(key, nil, cacheCommit(transactionID), transactionID)
|
||||
err = utils.ErrNotFound
|
||||
}
|
||||
return
|
||||
}
|
||||
if err = rs.ms.Unmarshal(values, &atrs); err != nil {
|
||||
return
|
||||
}
|
||||
cache.Set(key, atrs, cacheCommit(transactionID), transactionID)
|
||||
return
|
||||
@@ -1088,12 +1100,13 @@ func (rs *RedisStorage) SetActionTriggers(key string, atrs ActionTriggers, trans
|
||||
// delete the key
|
||||
return rs.Cmd("DEL", utils.ACTION_TRIGGER_PREFIX+key).Err
|
||||
}
|
||||
result, err := rs.ms.Marshal(atrs)
|
||||
if err != nil {
|
||||
var result []byte
|
||||
if result, err = rs.ms.Marshal(atrs); err != nil {
|
||||
return err
|
||||
}
|
||||
err = rs.Cmd("SET", utils.ACTION_TRIGGER_PREFIX+key, result).Err
|
||||
cache.RemKey(utils.ACTION_TRIGGER_PREFIX+key, cacheCommit(transactionID), transactionID)
|
||||
if err = rs.Cmd("SET", utils.ACTION_TRIGGER_PREFIX+key, result).Err; err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user