Add GetActions in DataManager

This commit is contained in:
TeoV
2017-10-20 17:54:56 +03:00
committed by Dan Christian Bogos
parent d159bf48a6
commit 9f68b27b27
12 changed files with 43 additions and 59 deletions

View File

@@ -570,7 +570,7 @@ func (self *ApierV1) GetActions(actsId string, reply *[]*utils.TPAction) error {
return fmt.Errorf("%s ActionsId: %s", utils.ErrMandatoryIeMissing.Error(), actsId)
}
acts := make([]*utils.TPAction, 0)
engActs, err := self.DataManager.DataDB().GetActions(actsId, false, utils.NonTransactional)
engActs, err := self.DataManager.GetActions(actsId, false, utils.NonTransactional)
if err != nil {
return utils.NewErrServerError(err)
}

View File

@@ -267,7 +267,7 @@ func (self *ApierV2) GetActions(attr AttrGetActions, reply *map[string]engine.Ac
retActions := make(map[string]engine.Actions)
for _, accKey := range limitedActions {
key := accKey[len(utils.ACTION_PREFIX):]
acts, err := self.DataManager.DataDB().GetActions(key, false, utils.NonTransactional)
acts, err := self.DataManager.GetActions(key, false, utils.NonTransactional)
if err != nil {
return utils.NewErrServerError(err)
}

View File

@@ -277,7 +277,7 @@ func (at *ActionTiming) GetActionPlanID() string {
func (at *ActionTiming) getActions() (as []*Action, err error) {
if at.actions == nil {
at.actions, err = dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional)
at.actions, err = dm.GetActions(at.ActionsID, false, utils.NonTransactional)
}
at.actions.Sort()
return at.actions, err

View File

@@ -57,7 +57,7 @@ func (at *ActionTrigger) Execute(ub *Account, sq *CDRStatsQueueTriggered) (err e
}
// does NOT need to Lock() because it is triggered from a method that took the Lock
var aac Actions
aac, err = dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional)
aac, err = dm.GetActions(at.ActionsID, false, utils.NonTransactional)
if err != nil {
utils.Logger.Err(fmt.Sprintf("Failed to get actions: %v", err))
return

View File

@@ -1130,7 +1130,7 @@ func TestActionTriggerLogging(t *testing.T) {
Weight: 10.0,
ActionsID: "TEST_ACTIONS",
}
as, err := dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional)
as, err := dm.GetActions(at.ActionsID, false, utils.NonTransactional)
if err != nil {
t.Error("Error getting actions for the action timing: ", as, err)
}
@@ -2137,7 +2137,7 @@ func TestActionSetBalance(t *testing.T) {
}
func TestActionCSVFilter(t *testing.T) {
act, err := dm.DataDB().GetActions("FILTER", false, utils.NonTransactional)
act, err := dm.GetActions("FILTER", false, utils.NonTransactional)
if err != nil {
t.Error("error getting actions: ", err)
}
@@ -2147,7 +2147,7 @@ func TestActionCSVFilter(t *testing.T) {
}
func TestActionExpirationTime(t *testing.T) {
a, err := dm.DataDB().GetActions("EXP", false, utils.NonTransactional)
a, err := dm.GetActions("EXP", false, utils.NonTransactional)
if err != nil || a == nil {
t.Error("Error getting actions: ", err)
}
@@ -2167,11 +2167,11 @@ func TestActionExpirationTime(t *testing.T) {
}
func TestActionExpNoExp(t *testing.T) {
exp, err := dm.DataDB().GetActions("EXP", false, utils.NonTransactional)
exp, err := dm.GetActions("EXP", false, utils.NonTransactional)
if err != nil || exp == nil {
t.Error("Error getting actions: ", err)
}
noexp, err := dm.DataDB().GetActions("NOEXP", false, utils.NonTransactional)
noexp, err := dm.GetActions("NOEXP", false, utils.NonTransactional)
if err != nil || noexp == nil {
t.Error("Error getting actions: ", err)
}

View File

@@ -169,7 +169,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b
case utils.RATING_PROFILE_PREFIX:
_, err = dm.DataDB().GetRatingProfile(dataID, true, utils.NonTransactional)
case utils.ACTION_PREFIX:
_, err = dm.DataDB().GetActions(dataID, true, utils.NonTransactional)
_, err = dm.GetActions(dataID, true, utils.NonTransactional)
case utils.ACTION_PLAN_PREFIX:
_, err = dm.DataDB().GetActionPlan(dataID, true, utils.NonTransactional)
case utils.AccountActionPlansPrefix:
@@ -620,3 +620,28 @@ func (dm *DataManager) GetDerivedChargers(key string, skipCache bool, transactio
cache.Set(cacheKey, dcs, cacheCommit(transactionID), transactionID)
return
}
func (dm *DataManager) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) {
cachekey := utils.ACTION_PREFIX + key
if !skipCache {
if x, err := cache.GetCloned(cachekey); err != nil {
if err.Error() != utils.ItemNotFound {
return nil, err
}
} else if x == nil {
return nil, utils.ErrNotFound
} else {
return x.(Actions), nil
}
}
as, err = dm.DataDB().GetActionsDrv(key)
if err != nil {
if err == utils.ErrNotFound {
cache.Set(cachekey, nil, cacheCommit(transactionID), transactionID)
}
return nil, err
}
cache.Set(cachekey, as, cacheCommit(transactionID), transactionID)
return
}

View File

@@ -171,7 +171,7 @@ func TestLoaderITLoadFromCSV(t *testing.T) {
func TestLoaderITWriteToDatabase(t *testing.T) {
for k, as := range loader.actions {
rcv, err := loader.dataStorage.GetActions(k, true, utils.NonTransactional)
rcv, err := loader.dm.GetActions(k, true, utils.NonTransactional)
if err != nil {
t.Error("Failed GetActions: ", err.Error())
}

View File

@@ -1307,13 +1307,13 @@ func testOnStorITCRUDActions(t *testing.T) {
},
},
}
if _, rcvErr := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound {
if _, rcvErr := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound {
t.Error(rcvErr)
}
if err := onStor.DataDB().SetActions(acts[0].Id, acts, utils.NonTransactional); err != nil {
t.Error(err)
}
if rcv, err := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); err != nil {
if rcv, err := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(acts[0], rcv[0]) {
t.Errorf("Expecting: %v, received: %v", acts[0], rcv[0])
@@ -1338,7 +1338,7 @@ func testOnStorITCRUDActions(t *testing.T) {
if err := onStor.DataDB().RemoveActions(acts[0].Id, utils.NonTransactional); err != nil {
t.Error(err)
}
if _, rcvErr := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound {
if _, rcvErr := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound {
t.Error(rcvErr)
}

View File

@@ -66,7 +66,7 @@ type DataDB interface {
GetAllCdrStats() ([]*CdrStats, error)
GetDerivedChargersDrv(string) (*utils.DerivedChargers, error)
SetDerivedChargers(string, *utils.DerivedChargers, string) error
GetActions(string, bool, string) (Actions, error)
GetActionsDrv(string) (Actions, error)
SetActions(string, Actions, string) error
RemoveActions(string, string) error
GetSharedGroupDrv(string) (*SharedGroup, error)

View File

@@ -471,29 +471,15 @@ func (ms *MapStorage) UpdateReverseDestination(oldDest, newDest *Destination, tr
return err
}
func (ms *MapStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) {
func (ms *MapStorage) GetActionsDrv(key string) (as Actions, err error) {
ms.mu.RLock()
defer ms.mu.RUnlock()
cCommit := cacheCommit(transactionID)
cachekey := utils.ACTION_PREFIX + key
if !skipCache {
if x, err := cache.GetCloned(cachekey); err != nil {
if err.Error() != utils.ItemNotFound {
return nil, err
}
} else if x == nil {
return nil, utils.ErrNotFound
} else {
return x.(Actions), nil
}
}
if values, ok := ms.dict[cachekey]; ok {
err = ms.ms.Unmarshal(values, &as)
} else {
cache.Set(cachekey, nil, cCommit, transactionID)
return nil, utils.ErrNotFound
}
cache.Set(cachekey, as, cCommit, transactionID)
return
}

View File

@@ -957,19 +957,7 @@ func (ms *MongoStorage) UpdateReverseDestination(oldDest, newDest *Destination,
return nil
}
func (ms *MongoStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) {
cacheKey := utils.ACTION_PREFIX + key
if !skipCache {
if x, err := cache.GetCloned(cacheKey); err != nil {
if err.Error() != utils.ItemNotFound {
return nil, err
}
} else if x == nil {
return nil, utils.ErrNotFound
} else {
return x.(Actions), nil
}
}
func (ms *MongoStorage) GetActionsDrv(key string) (as Actions, err error) {
var result struct {
Key string
Value Actions
@@ -978,13 +966,11 @@ func (ms *MongoStorage) GetActions(key string, skipCache bool, transactionID str
defer session.Close()
if err = col.Find(bson.M{"key": key}).One(&result); err != nil {
if err == mgo.ErrNotFound {
cache.Set(cacheKey, nil, cacheCommit(transactionID), transactionID)
err = utils.ErrNotFound
}
return nil, err
}
as = result.Value
cache.Set(utils.ACTION_PREFIX+key, as, cacheCommit(transactionID), transactionID)
return
}

View File

@@ -519,23 +519,11 @@ func (rs *RedisStorage) UpdateReverseDestination(oldDest, newDest *Destination,
return nil
}
func (rs *RedisStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) {
func (rs *RedisStorage) GetActionsDrv(key string) (as Actions, err error) {
key = utils.ACTION_PREFIX + key
if !skipCache {
if x, err := cache.GetCloned(key); err != nil {
if err.Error() != utils.ItemNotFound {
return nil, err
}
} else if x == nil {
return nil, utils.ErrNotFound
} else {
return x.(Actions), nil
}
}
var values []byte
if values, err = rs.Cmd("GET", key).Bytes(); err != nil {
if err == redis.ErrRespNil { // did not find the destination
cache.Set(key, nil, cacheCommit(transactionID), transactionID)
err = utils.ErrNotFound
}
return
@@ -543,7 +531,6 @@ func (rs *RedisStorage) GetActions(key string, skipCache bool, transactionID str
if err = rs.ms.Unmarshal(values, &as); err != nil {
return
}
cache.Set(key, as, cacheCommit(transactionID), transactionID)
return
}