Added reversedestinationshealth API

This commit is contained in:
Trial97
2021-06-29 17:14:52 +03:00
committed by Dan Christian Bogos
parent 1578e542ff
commit b77eb9fd00
5 changed files with 496 additions and 196 deletions

View File

@@ -592,8 +592,19 @@ func (apierSv1 *APIerSv1) ComputeFilterIndexIDs(args *utils.ArgsComputeFilterInd
return nil
}
func (apierSv1 *APIerSv1) GetAccountActionPlansIndexHealth(args *engine.IndexHealthArgs, reply *engine.IndexHealthReply) error {
rp, err := engine.GetAccountActionPlanIndexHealth(apierSv1.DataManager, args.ObjectCacheLimit, args.IndexCacheLimit,
func (apierSv1 *APIerSv1) GetAccountActionPlansIndexHealth(args *engine.IndexHealthArgs, reply *engine.AccountActionPlanIHReply) error {
rp, err := engine.GetAccountActionPlansIndexHealth(apierSv1.DataManager, args.ObjectCacheLimit, args.IndexCacheLimit,
args.ObjectCacheTTL, args.IndexCacheTTL,
args.ObjectCacheStaticTTL, args.IndexCacheStaticTTL)
if err != nil {
return err
}
*reply = *rp
return nil
}
func (apierSv1 *APIerSv1) GetReverseDestinationsIndexHealth(args *engine.IndexHealthArgs, reply *engine.ReverseDestinationsIHReply) error {
rp, err := engine.GetReverseDestinationsIndexHealth(apierSv1.DataManager, args.ObjectCacheLimit, args.IndexCacheLimit,
args.ObjectCacheTTL, args.IndexCacheTTL,
args.ObjectCacheStaticTTL, args.IndexCacheStaticTTL)
if err != nil {

View File

@@ -42,6 +42,7 @@ var (
testV1FIdxHRpcConn,
testV1FIdxHLoadFromFolder,
testV1FIdxHAccountActionPlansHealth,
testV1FIdxHReverseDestinationHealth,
testV1FIdxHStopEngine,
}
@@ -111,17 +112,33 @@ func testV1FIdxHLoadFromFolder(t *testing.T) {
}
func testV1FIdxHAccountActionPlansHealth(t *testing.T) {
var reply engine.IndexHealthReply
var reply engine.AccountActionPlanIHReply
if err := tFIdxHRpc.Call(utils.APIerSv1GetAccountActionPlansIndexHealth, engine.IndexHealthArgs{
IndexCacheLimit: -1,
ObjectCacheLimit: -1,
}, &reply); err != nil {
t.Error(err)
}
exp := engine.IndexHealthReply{
MissingObjects: []string{},
MissingIndexes: map[string][]string{},
BrokenReferences: map[string][]string{},
exp := engine.AccountActionPlanIHReply{
MissingAccountActionPlans: map[string][]string{},
BrokenReferences: map[string][]string{},
}
if !reflect.DeepEqual(exp, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(reply))
}
}
func testV1FIdxHReverseDestinationHealth(t *testing.T) {
var reply engine.ReverseDestinationsIHReply
if err := tFIdxHRpc.Call(utils.APIerSv1GetReverseDestinationsIndexHealth, engine.IndexHealthArgs{
IndexCacheLimit: -1,
ObjectCacheLimit: -1,
}, &reply); err != nil {
t.Error(err)
}
exp := engine.ReverseDestinationsIHReply{
MissingReverseDestinations: map[string][]string{},
BrokenReferences: map[string][]string{},
}
if !reflect.DeepEqual(exp, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(reply))

View File

@@ -845,9 +845,8 @@ type AccountActionPlanIHReply struct {
}
// add cache in args API
func GetAccountActionPlanIndexHealth(dm *DataManager, objLimit, indexLimit int, objTTL, indexTTL time.Duration, objStaticTTL, indexStaticTTL bool) (rply *AccountActionPlanIHReply, err error) {
func GetAccountActionPlansIndexHealth(dm *DataManager, objLimit, indexLimit int, objTTL, indexTTL time.Duration, objStaticTTL, indexStaticTTL bool) (rply *AccountActionPlanIHReply, err error) {
// posible errors
missingAP := utils.StringSet{} // the index are present but the action plans are not //missing actionplans
brokenRef := map[string][]string{} // the actionPlans match the index but they are missing the account // broken reference
missingIndex := map[string][]string{} // the indexes are not present but the action plans points to that account // misingAccounts
@@ -910,7 +909,7 @@ func GetAccountActionPlanIndexHealth(dm *DataManager, objLimit, indexLimit int,
return
}
err = nil
missingAP.Add(apID) // not found
brokenRef[apID] = nil
continue
}
@@ -941,23 +940,138 @@ func GetAccountActionPlanIndexHealth(dm *DataManager, objLimit, indexLimit int,
return
}
err = nil
missingIndex[apID] = append(missingIndex[apID], acntID)
missingIndex[acntID] = append(missingIndex[acntID], apID)
continue
}
if !utils.IsSliceMember(ids, apID) { // the index doesn't exits for this actionPlan
missingIndex[apID] = append(missingIndex[apID], acntID)
missingIndex[acntID] = append(missingIndex[acntID], apID)
}
}
}
rply = &AccountActionPlanIHReply{
MissingActionPlans: missingAP.AsSlice(),
MissingAccountActionPlans: missingIndex,
BrokenReferences: brokenRef,
}
return
}
type ReverseDestinationsIHReply struct {
MissingReverseDestinations map[string][]string // list of missing indexes for each object (the map has the key as the indexKey and a list of objects)
BrokenReferences map[string][]string // list of broken references (the map has the key as the objectID and a list of indexes)
}
// add cache in args API
func GetReverseDestinationsIndexHealth(dm *DataManager, objLimit, indexLimit int, objTTL, indexTTL time.Duration, objStaticTTL, indexStaticTTL bool) (rply *ReverseDestinationsIHReply, err error) {
// posible errors
brokenRef := map[string][]string{} // the actionPlans match the index but they are missing the account // broken reference
missingIndex := map[string][]string{} // the indexes are not present but the action plans points to that account // misingAccounts
// local cache
indexesCache := ltcache.NewCache(objLimit, objTTL, objStaticTTL, nil)
objectsCache := ltcache.NewCache(indexLimit, indexTTL, indexStaticTTL, nil)
getCachedIndex := func(prefix string) (dstIDs []string, err error) {
if x, ok := indexesCache.Get(prefix); ok {
if x == nil {
return nil, utils.ErrNotFound
}
return x.([]string), nil
}
if dstIDs, err = dm.GetReverseDestination(prefix, true, false, utils.NonTransactional); err != nil { // read from cache but do not write if not there
if err == utils.ErrNotFound {
indexesCache.Set(prefix, nil, nil)
}
return
}
indexesCache.Set(prefix, dstIDs, nil)
return
}
getCachedObject := func(dstID string) (obj *Destination, err error) {
if x, ok := objectsCache.Get(dstID); ok {
if x == nil {
return nil, utils.ErrNotFound
}
return x.(*Destination), nil
}
if obj, err = dm.GetDestination(dstID, true, false, utils.NonTransactional); err != nil { // read from cache but do not write if not there
if err == utils.ErrNotFound {
objectsCache.Set(dstID, nil, nil)
}
return
}
objectsCache.Set(dstID, obj, nil)
return
}
var prefixes []string // start with the indexes and check the references
if prefixes, err = dm.DataDB().GetKeysForPrefix(utils.ReverseDestinationPrefix); err != nil {
err = fmt.Errorf("error <%s> querying keys for reverseDestinations", err.Error())
return
}
for _, prefix := range prefixes {
prefix = strings.TrimPrefix(prefix, utils.ReverseDestinationPrefix) //
var dstIDs []string
if dstIDs, err = getCachedIndex(prefix); err != nil { // read from cache but do not write if not there
err = fmt.Errorf("error <%s> querying the reverseDestination: <%v>", err.Error(), prefix)
return
}
for _, dstID := range dstIDs {
var dst *Destination
if dst, err = getCachedObject(dstID); err != nil {
if err != utils.ErrNotFound {
err = fmt.Errorf("error <%s> querying the destination: <%v>", err.Error(), dstID)
return
}
err = nil
brokenRef[dstID] = nil
continue
}
if !utils.IsSliceMember(dst.Prefixes, prefix) { // the action plan exists but doesn't point towards the account we have index
brokenRef[dstID] = append(brokenRef[dstID], prefix)
}
}
}
var dstIDs []string // we have all the indexes in cache now do a reverse check
if dstIDs, err = dm.DataDB().GetKeysForPrefix(utils.DestinationPrefix); err != nil {
err = fmt.Errorf("error <%s> querying keys for destinations", err.Error())
return
}
for _, dstID := range dstIDs {
dstID = strings.TrimPrefix(dstID, utils.DestinationPrefix) //
var dst *Destination
if dst, err = getCachedObject(dstID); err != nil {
err = fmt.Errorf("error <%s> querying the destination: <%v>", err.Error(), dstID)
return
}
for _, prefix := range dst.Prefixes {
var ids []string
if ids, err = getCachedIndex(prefix); err != nil { // read from cache but do not write if not there
if err != utils.ErrNotFound {
err = fmt.Errorf("error <%s> querying the reverseDestination: <%v>", err.Error(), prefix)
return
}
err = nil
missingIndex[prefix] = append(missingIndex[prefix], dstID)
continue
}
if !utils.IsSliceMember(ids, dstID) { // the index doesn't exits for this actionPlan
missingIndex[prefix] = append(missingIndex[prefix], dstID)
}
}
}
rply = &ReverseDestinationsIHReply{
MissingReverseDestinations: missingIndex,
BrokenReferences: brokenRef,
}
return
}
func getFiltersAndContexts(dm *DataManager, indxType, tnt, id string) (filterIDs, contexts []string, err error) { // add contexts
switch indxType {
case utils.CacheResourceFilterIndexes:
@@ -1016,7 +1130,6 @@ type FilterIHReply struct {
MissingFilters map[string][]string // list of broken references (the map has the key as the filterID and a list of objectIDs)
}
/*
func GetFilterIndexHealth(dm *DataManager, indxType string,
objLimit, indexLimit int, objTTL, indexTTL time.Duration,
objStaticTTL, indexStaticTTL bool) (rply *FilterIHReply, err error) {
@@ -1074,7 +1187,39 @@ func GetFilterIndexHealth(dm *DataManager, indxType string,
return
}
for idxKey, idx := range indexes {
for itmID:=range idx{}
for itmID := range idx {
var filterIDs, contexts []string
if filterIDs, contexts, err = getFiltersAndContexts(dm, indxType, tnt, itmID); err != nil {
if err != utils.ErrNotFound {
return
}
rply.MissingObjects = append(rply.MissingObjects, utils.ConcatenatedKey(tnt, itmID))
continue
}
if ctx != nil && !utils.IsSliceMember(contexts, *ctx) {
key := utils.ConcatenatedKey(tntCtx, idxKey)
rply.MissingIndexes[key] = append(rply.MissingIndexes[key], itmID)
continue
}
for _, fltrID := range filterIDs {
var fltr *Filter
if fltr, err = dm.GetFilter(tnt, fltrID,
true, false, utils.NonTransactional); err != nil {
if err != utils.ErrNotFound {
return
}
rply.MissingFilters[fltrID] = append(rply.MissingFilters[fltrID], itmID)
}
indexes := map[string]utils.StringSet{}
if indexes, err = addFilterToIndexSet(dm, indxType, tntCtx, fltr, indexes); err != nil {
return
}
if idx, has := indexes[idxKey]; !has || !idx.Has(itmID) {
key := utils.ConcatenatedKey(tntCtx, idxKey)
rply.MissingIndexes[key] = append(rply.MissingIndexes[key], itmID)
}
}
}
}
}
return
@@ -1100,10 +1245,10 @@ func updateFilterIH(dm *DataManager, filterIDs []string, indxType, tnt, tntCtx,
}
for key, idx := range indexes {
if !idx.Has(itmID) {
rply.MissingIndexes[itmID] = append(rply.MissingIndexes[itmID], key)
key = utils.ConcatenatedKey(tntCtx, key)
rply.MissingIndexes[key] = append(rply.MissingIndexes[key], itmID)
}
}
}
return rply, nil
}
*/

View File

@@ -44,10 +44,10 @@ func TestHealthAccountAction(t *testing.T) {
}
exp := &AccountActionPlanIHReply{
MissingAccountActionPlans: map[string][]string{"1002": {"AP2"}}, // 1
BrokenReferences: map[string][]string{"AP2": {"1001"}, "AP1": nil}, // 2
MissingAccountActionPlans: map[string][]string{"1002": {"AP2"}},
BrokenReferences: map[string][]string{"AP2": {"1001"}, "AP1": nil},
}
if rply, err := GetAccountActionPlanIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
if rply, err := GetAccountActionPlansIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
@@ -72,11 +72,10 @@ func TestHealthAccountAction2(t *testing.T) {
}
exp := &AccountActionPlanIHReply{
MissingActionPlans: []string{"AP1"},
MissingAccountActionPlans: map[string][]string{},
BrokenReferences: map[string][]string{},
BrokenReferences: map[string][]string{"AP1": nil},
}
if rply, err := GetAccountActionPlanIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
if rply, err := GetAccountActionPlansIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
@@ -108,11 +107,10 @@ func TestHealthAccountAction3(t *testing.T) {
}
exp := &AccountActionPlanIHReply{
MissingActionPlans: []string{},
MissingAccountActionPlans: map[string][]string{"AP2": {"1002"}},
MissingAccountActionPlans: map[string][]string{"1002": {"AP2"}},
BrokenReferences: map[string][]string{},
}
if rply, err := GetAccountActionPlanIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
if rply, err := GetAccountActionPlansIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
@@ -147,11 +145,139 @@ func TestHealthAccountAction4(t *testing.T) {
}
exp := &AccountActionPlanIHReply{
MissingActionPlans: []string{},
MissingAccountActionPlans: map[string][]string{},
BrokenReferences: map[string][]string{"AP2": {"1002"}},
}
if rply, err := GetAccountActionPlanIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
if rply, err := GetAccountActionPlansIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
}
}
func TestHealthReverseDestination(t *testing.T) {
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
db := NewInternalDB(nil, nil, true)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
if err := dm.SetReverseDestination("DST1", []string{"1001", "1002"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetReverseDestination("DST2", []string{"1001"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST2",
Prefixes: []string{"1002"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
exp := &ReverseDestinationsIHReply{
MissingReverseDestinations: map[string][]string{"1002": {"DST2"}},
BrokenReferences: map[string][]string{"DST1": nil, "DST2": {"1001"}},
}
if rply, err := GetReverseDestinationsIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
}
}
func TestHealthReverseDestination2(t *testing.T) {
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
db := NewInternalDB(nil, nil, true)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
if err := dm.SetReverseDestination("DST1", []string{"1001"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetReverseDestination("DST2", []string{"1001"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST2",
Prefixes: []string{"1001"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
exp := &ReverseDestinationsIHReply{
MissingReverseDestinations: map[string][]string{},
BrokenReferences: map[string][]string{"DST1": nil},
}
if rply, err := GetReverseDestinationsIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
}
}
func TestHealthReverseDestination3(t *testing.T) {
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
db := NewInternalDB(nil, nil, true)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
if err := dm.SetReverseDestination("DST1", []string{"1002"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST1",
Prefixes: []string{"1002"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST2",
Prefixes: []string{"1002"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
exp := &ReverseDestinationsIHReply{
MissingReverseDestinations: map[string][]string{"1002": {"DST2"}},
BrokenReferences: map[string][]string{},
}
if rply, err := GetReverseDestinationsIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))
}
}
func TestHealthReverseDestination4(t *testing.T) {
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
db := NewInternalDB(nil, nil, true)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
if err := dm.SetReverseDestination("DST1", []string{"1002"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetReverseDestination("DST2", []string{"1001", "1002"}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST1",
Prefixes: []string{"1002"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
if err := dm.SetDestination(&Destination{
Id: "DST2",
Prefixes: []string{"1001"},
}, utils.NonTransactional); err != nil {
t.Fatal(err)
}
exp := &ReverseDestinationsIHReply{
MissingReverseDestinations: map[string][]string{},
BrokenReferences: map[string][]string{"DST2": {"1002"}},
}
if rply, err := GetReverseDestinationsIndexHealth(dm, -1, -1, -1, -1, false, false); err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(exp, rply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rply))

View File

@@ -1271,174 +1271,175 @@ const (
// APIerSv1 APIs
const (
ApierV1 = "ApierV1"
ApierV2 = "ApierV2"
APIerSv1 = "APIerSv1"
APIerSv1ComputeFilterIndexes = "APIerSv1.ComputeFilterIndexes"
APIerSv1ComputeFilterIndexIDs = "APIerSv1.ComputeFilterIndexIDs"
APIerSv1GetAccountActionPlansIndexHealth = "APIerSv1.GetAccountActionPlansIndexHealth"
APIerSv1Ping = "APIerSv1.Ping"
APIerSv1SetDispatcherProfile = "APIerSv1.SetDispatcherProfile"
APIerSv1GetDispatcherProfile = "APIerSv1.GetDispatcherProfile"
APIerSv1GetDispatcherProfileIDs = "APIerSv1.GetDispatcherProfileIDs"
APIerSv1RemoveDispatcherProfile = "APIerSv1.RemoveDispatcherProfile"
APIerSv1SetBalances = "APIerSv1.SetBalances"
APIerSv1SetDispatcherHost = "APIerSv1.SetDispatcherHost"
APIerSv1GetDispatcherHost = "APIerSv1.GetDispatcherHost"
APIerSv1GetDispatcherHostIDs = "APIerSv1.GetDispatcherHostIDs"
APIerSv1RemoveDispatcherHost = "APIerSv1.RemoveDispatcherHost"
APIerSv1GetEventCost = "APIerSv1.GetEventCost"
APIerSv1LoadTariffPlanFromFolder = "APIerSv1.LoadTariffPlanFromFolder"
APIerSv1ExportToFolder = "APIerSv1.ExportToFolder"
APIerSv1GetCost = "APIerSv1.GetCost"
APIerSv1SetBalance = "APIerSv1.SetBalance"
APIerSv1GetFilter = "APIerSv1.GetFilter"
APIerSv1GetFilterIndexes = "APIerSv1.GetFilterIndexes"
APIerSv1RemoveFilterIndexes = "APIerSv1.RemoveFilterIndexes"
APIerSv1RemoveFilter = "APIerSv1.RemoveFilter"
APIerSv1SetFilter = "APIerSv1.SetFilter"
APIerSv1GetFilterIDs = "APIerSv1.GetFilterIDs"
APIerSv1GetRatingProfile = "APIerSv1.GetRatingProfile"
APIerSv1RemoveRatingProfile = "APIerSv1.RemoveRatingProfile"
APIerSv1SetRatingProfile = "APIerSv1.SetRatingProfile"
APIerSv1GetRatingProfileIDs = "APIerSv1.GetRatingProfileIDs"
APIerSv1SetDataDBVersions = "APIerSv1.SetDataDBVersions"
APIerSv1SetStorDBVersions = "APIerSv1.SetStorDBVersions"
APIerSv1GetAccountActionPlan = "APIerSv1.GetAccountActionPlan"
APIerSv1ComputeActionPlanIndexes = "APIerSv1.ComputeActionPlanIndexes"
APIerSv1GetActions = "APIerSv1.GetActions"
APIerSv1GetActionPlan = "APIerSv1.GetActionPlan"
APIerSv1GetActionPlanIDs = "APIerSv1.GetActionPlanIDs"
APIerSv1GetRatingPlanIDs = "APIerSv1.GetRatingPlanIDs"
APIerSv1GetRatingPlan = "APIerSv1.GetRatingPlan"
APIerSv1RemoveRatingPlan = "APIerSv1.RemoveRatingPlan"
APIerSv1GetDestination = "APIerSv1.GetDestination"
APIerSv1RemoveDestination = "APIerSv1.RemoveDestination"
APIerSv1GetReverseDestination = "APIerSv1.GetReverseDestination"
APIerSv1AddBalance = "APIerSv1.AddBalance"
APIerSv1DebitBalance = "APIerSv1.DebitBalance"
APIerSv1SetAccount = "APIerSv1.SetAccount"
APIerSv1GetAccountsCount = "APIerSv1.GetAccountsCount"
APIerSv1GetDataDBVersions = "APIerSv1.GetDataDBVersions"
APIerSv1GetStorDBVersions = "APIerSv1.GetStorDBVersions"
APIerSv1GetCDRs = "APIerSv1.GetCDRs"
APIerSv1GetTPAccountActions = "APIerSv1.GetTPAccountActions"
APIerSv1SetTPAccountActions = "APIerSv1.SetTPAccountActions"
APIerSv1GetTPAccountActionsByLoadId = "APIerSv1.GetTPAccountActionsByLoadId"
APIerSv1GetTPAccountActionLoadIds = "APIerSv1.GetTPAccountActionLoadIds"
APIerSv1GetTPAccountActionIds = "APIerSv1.GetTPAccountActionIds"
APIerSv1RemoveTPAccountActions = "APIerSv1.RemoveTPAccountActions"
APIerSv1GetTPActionPlan = "APIerSv1.GetTPActionPlan"
APIerSv1SetTPActionPlan = "APIerSv1.SetTPActionPlan"
APIerSv1GetTPActionPlanIds = "APIerSv1.GetTPActionPlanIds"
APIerSv1SetTPActionTriggers = "APIerSv1.SetTPActionTriggers"
APIerSv1GetTPActionTriggers = "APIerSv1.GetTPActionTriggers"
APIerSv1RemoveTPActionTriggers = "APIerSv1.RemoveTPActionTriggers"
APIerSv1GetTPActionTriggerIds = "APIerSv1.GetTPActionTriggerIds"
APIerSv1GetTPActions = "APIerSv1.GetTPActions"
APIerSv1RemoveTPActionPlan = "APIerSv1.RemoveTPActionPlan"
APIerSv1GetTPAttributeProfile = "APIerSv1.GetTPAttributeProfile"
APIerSv1SetTPAttributeProfile = "APIerSv1.SetTPAttributeProfile"
APIerSv1GetTPAttributeProfileIds = "APIerSv1.GetTPAttributeProfileIds"
APIerSv1RemoveTPAttributeProfile = "APIerSv1.RemoveTPAttributeProfile"
APIerSv1GetTPCharger = "APIerSv1.GetTPCharger"
APIerSv1SetTPCharger = "APIerSv1.SetTPCharger"
APIerSv1RemoveTPCharger = "APIerSv1.RemoveTPCharger"
APIerSv1GetTPChargerIDs = "APIerSv1.GetTPChargerIDs"
APIerSv1SetTPFilterProfile = "APIerSv1.SetTPFilterProfile"
APIerSv1GetTPFilterProfile = "APIerSv1.GetTPFilterProfile"
APIerSv1GetTPFilterProfileIds = "APIerSv1.GetTPFilterProfileIds"
APIerSv1RemoveTPFilterProfile = "APIerSv1.RemoveTPFilterProfile"
APIerSv1GetTPDestination = "APIerSv1.GetTPDestination"
APIerSv1SetTPDestination = "APIerSv1.SetTPDestination"
APIerSv1GetTPDestinationIDs = "APIerSv1.GetTPDestinationIDs"
APIerSv1RemoveTPDestination = "APIerSv1.RemoveTPDestination"
APIerSv1GetTPResource = "APIerSv1.GetTPResource"
APIerSv1SetTPResource = "APIerSv1.SetTPResource"
APIerSv1RemoveTPResource = "APIerSv1.RemoveTPResource"
APIerSv1SetTPRate = "APIerSv1.SetTPRate"
APIerSv1GetTPRate = "APIerSv1.GetTPRate"
APIerSv1RemoveTPRate = "APIerSv1.RemoveTPRate"
APIerSv1GetTPRateIds = "APIerSv1.GetTPRateIds"
APIerSv1SetTPThreshold = "APIerSv1.SetTPThreshold"
APIerSv1GetTPThreshold = "APIerSv1.GetTPThreshold"
APIerSv1GetTPThresholdIDs = "APIerSv1.GetTPThresholdIDs"
APIerSv1RemoveTPThreshold = "APIerSv1.RemoveTPThreshold"
APIerSv1SetTPStat = "APIerSv1.SetTPStat"
APIerSv1GetTPStat = "APIerSv1.GetTPStat"
APIerSv1RemoveTPStat = "APIerSv1.RemoveTPStat"
APIerSv1GetTPDestinationRate = "APIerSv1.GetTPDestinationRate"
APIerSv1SetTPRouteProfile = "APIerSv1.SetTPRouteProfile"
APIerSv1GetTPRouteProfile = "APIerSv1.GetTPRouteProfile"
APIerSv1GetTPRouteProfileIDs = "APIerSv1.GetTPRouteProfileIDs"
APIerSv1RemoveTPRouteProfile = "APIerSv1.RemoveTPRouteProfile"
APIerSv1GetTPDispatcherProfile = "APIerSv1.GetTPDispatcherProfile"
APIerSv1SetTPDispatcherProfile = "APIerSv1.SetTPDispatcherProfile"
APIerSv1RemoveTPDispatcherProfile = "APIerSv1.RemoveTPDispatcherProfile"
APIerSv1GetTPDispatcherProfileIDs = "APIerSv1.GetTPDispatcherProfileIDs"
APIerSv1GetTPSharedGroups = "APIerSv1.GetTPSharedGroups"
APIerSv1SetTPSharedGroups = "APIerSv1.SetTPSharedGroups"
APIerSv1GetTPSharedGroupIds = "APIerSv1.GetTPSharedGroupIds"
APIerSv1RemoveTPSharedGroups = "APIerSv1.RemoveTPSharedGroups"
APIerSv1ExportCDRs = "APIerSv1.ExportCDRs"
APIerSv1GetTPRatingPlan = "APIerSv1.GetTPRatingPlan"
APIerSv1SetTPRatingPlan = "APIerSv1.SetTPRatingPlan"
APIerSv1GetTPRatingPlanIds = "APIerSv1.GetTPRatingPlanIds"
APIerSv1RemoveTPRatingPlan = "APIerSv1.RemoveTPRatingPlan"
APIerSv1SetTPActions = "APIerSv1.SetTPActions"
APIerSv1GetTPActionIds = "APIerSv1.GetTPActionIds"
APIerSv1RemoveTPActions = "APIerSv1.RemoveTPActions"
APIerSv1SetActionPlan = "APIerSv1.SetActionPlan"
APIerSv1ExecuteAction = "APIerSv1.ExecuteAction"
APIerSv1SetTPRatingProfile = "APIerSv1.SetTPRatingProfile"
APIerSv1GetTPRatingProfile = "APIerSv1.GetTPRatingProfile"
APIerSv1RemoveTPRatingProfile = "APIerSv1.RemoveTPRatingProfile"
APIerSv1SetTPDestinationRate = "APIerSv1.SetTPDestinationRate"
APIerSv1GetTPRatingProfileLoadIds = "APIerSv1.GetTPRatingProfileLoadIds"
APIerSv1GetTPRatingProfilesByLoadID = "APIerSv1.GetTPRatingProfilesByLoadID"
APIerSv1GetTPRatingProfileIds = "APIerSv1.GetTPRatingProfileIds"
APIerSv1GetTPDestinationRateIds = "APIerSv1.GetTPDestinationRateIds"
APIerSv1RemoveTPDestinationRate = "APIerSv1.RemoveTPDestinationRate"
APIerSv1ImportTariffPlanFromFolder = "APIerSv1.ImportTariffPlanFromFolder"
APIerSv1ExportTPToFolder = "APIerSv1.ExportTPToFolder"
APIerSv1LoadRatingPlan = "APIerSv1.LoadRatingPlan"
APIerSv1LoadRatingProfile = "APIerSv1.LoadRatingProfile"
APIerSv1LoadAccountActions = "APIerSv1.LoadAccountActions"
APIerSv1SetActions = "APIerSv1.SetActions"
APIerSv1AddTriggeredAction = "APIerSv1.AddTriggeredAction"
APIerSv1GetAccountActionTriggers = "APIerSv1.GetAccountActionTriggers"
APIerSv1AddAccountActionTriggers = "APIerSv1.AddAccountActionTriggers"
APIerSv1ResetAccountActionTriggers = "APIerSv1.ResetAccountActionTriggers"
APIerSv1SetAccountActionTriggers = "APIerSv1.SetAccountActionTriggers"
APIerSv1RemoveAccountActionTriggers = "APIerSv1.RemoveAccountActionTriggers"
APIerSv1GetScheduledActions = "APIerSv1.GetScheduledActions"
APIerSv1RemoveActionTiming = "APIerSv1.RemoveActionTiming"
APIerSv1ComputeReverseDestinations = "APIerSv1.ComputeReverseDestinations"
APIerSv1ComputeAccountActionPlans = "APIerSv1.ComputeAccountActionPlans"
APIerSv1SetDestination = "APIerSv1.SetDestination"
APIerSv1GetDataCost = "APIerSv1.GetDataCost"
APIerSv1ReplayFailedPosts = "APIerSv1.ReplayFailedPosts"
APIerSv1RemoveAccount = "APIerSv1.RemoveAccount"
APIerSv1DebitUsage = "APIerSv1.DebitUsage"
APIerSv1GetCacheStats = "APIerSv1.GetCacheStats"
APIerSv1ReloadCache = "APIerSv1.ReloadCache"
APIerSv1GetActionTriggers = "APIerSv1.GetActionTriggers"
APIerSv1SetActionTrigger = "APIerSv1.SetActionTrigger"
APIerSv1RemoveActionPlan = "APIerSv1.RemoveActionPlan"
APIerSv1RemoveActions = "APIerSv1.RemoveActions"
APIerSv1RemoveBalances = "APIerSv1.RemoveBalances"
APIerSv1GetLoadHistory = "APIerSv1.GetLoadHistory"
APIerSv1GetLoadIDs = "APIerSv1.GetLoadIDs"
APIerSv1GetLoadTimes = "APIerSv1.GetLoadTimes"
APIerSv1ExecuteScheduledActions = "APIerSv1.ExecuteScheduledActions"
APIerSv1GetSharedGroup = "APIerSv1.GetSharedGroup"
APIerSv1RemoveActionTrigger = "APIerSv1.RemoveActionTrigger"
APIerSv1GetAccount = "APIerSv1.GetAccount"
APIerSv1GetAttributeProfileCount = "APIerSv1.GetAttributeProfileCount"
APIerSv1GetMaxUsage = "APIerSv1.GetMaxUsage"
APIerSv1GetTiming = "APIerSv1.GetTiming"
APIerSv1SetTiming = "APIerSv1.SetTiming"
APIerSv1RemoveTiming = "APIerSv1.RemoveTiming"
ApierV1 = "ApierV1"
ApierV2 = "ApierV2"
APIerSv1 = "APIerSv1"
APIerSv1ComputeFilterIndexes = "APIerSv1.ComputeFilterIndexes"
APIerSv1ComputeFilterIndexIDs = "APIerSv1.ComputeFilterIndexIDs"
APIerSv1GetAccountActionPlansIndexHealth = "APIerSv1.GetAccountActionPlansIndexHealth"
APIerSv1GetReverseDestinationsIndexHealth = "APIerSv1.GetReverseDestinationsIndexHealth"
APIerSv1Ping = "APIerSv1.Ping"
APIerSv1SetDispatcherProfile = "APIerSv1.SetDispatcherProfile"
APIerSv1GetDispatcherProfile = "APIerSv1.GetDispatcherProfile"
APIerSv1GetDispatcherProfileIDs = "APIerSv1.GetDispatcherProfileIDs"
APIerSv1RemoveDispatcherProfile = "APIerSv1.RemoveDispatcherProfile"
APIerSv1SetBalances = "APIerSv1.SetBalances"
APIerSv1SetDispatcherHost = "APIerSv1.SetDispatcherHost"
APIerSv1GetDispatcherHost = "APIerSv1.GetDispatcherHost"
APIerSv1GetDispatcherHostIDs = "APIerSv1.GetDispatcherHostIDs"
APIerSv1RemoveDispatcherHost = "APIerSv1.RemoveDispatcherHost"
APIerSv1GetEventCost = "APIerSv1.GetEventCost"
APIerSv1LoadTariffPlanFromFolder = "APIerSv1.LoadTariffPlanFromFolder"
APIerSv1ExportToFolder = "APIerSv1.ExportToFolder"
APIerSv1GetCost = "APIerSv1.GetCost"
APIerSv1SetBalance = "APIerSv1.SetBalance"
APIerSv1GetFilter = "APIerSv1.GetFilter"
APIerSv1GetFilterIndexes = "APIerSv1.GetFilterIndexes"
APIerSv1RemoveFilterIndexes = "APIerSv1.RemoveFilterIndexes"
APIerSv1RemoveFilter = "APIerSv1.RemoveFilter"
APIerSv1SetFilter = "APIerSv1.SetFilter"
APIerSv1GetFilterIDs = "APIerSv1.GetFilterIDs"
APIerSv1GetRatingProfile = "APIerSv1.GetRatingProfile"
APIerSv1RemoveRatingProfile = "APIerSv1.RemoveRatingProfile"
APIerSv1SetRatingProfile = "APIerSv1.SetRatingProfile"
APIerSv1GetRatingProfileIDs = "APIerSv1.GetRatingProfileIDs"
APIerSv1SetDataDBVersions = "APIerSv1.SetDataDBVersions"
APIerSv1SetStorDBVersions = "APIerSv1.SetStorDBVersions"
APIerSv1GetAccountActionPlan = "APIerSv1.GetAccountActionPlan"
APIerSv1ComputeActionPlanIndexes = "APIerSv1.ComputeActionPlanIndexes"
APIerSv1GetActions = "APIerSv1.GetActions"
APIerSv1GetActionPlan = "APIerSv1.GetActionPlan"
APIerSv1GetActionPlanIDs = "APIerSv1.GetActionPlanIDs"
APIerSv1GetRatingPlanIDs = "APIerSv1.GetRatingPlanIDs"
APIerSv1GetRatingPlan = "APIerSv1.GetRatingPlan"
APIerSv1RemoveRatingPlan = "APIerSv1.RemoveRatingPlan"
APIerSv1GetDestination = "APIerSv1.GetDestination"
APIerSv1RemoveDestination = "APIerSv1.RemoveDestination"
APIerSv1GetReverseDestination = "APIerSv1.GetReverseDestination"
APIerSv1AddBalance = "APIerSv1.AddBalance"
APIerSv1DebitBalance = "APIerSv1.DebitBalance"
APIerSv1SetAccount = "APIerSv1.SetAccount"
APIerSv1GetAccountsCount = "APIerSv1.GetAccountsCount"
APIerSv1GetDataDBVersions = "APIerSv1.GetDataDBVersions"
APIerSv1GetStorDBVersions = "APIerSv1.GetStorDBVersions"
APIerSv1GetCDRs = "APIerSv1.GetCDRs"
APIerSv1GetTPAccountActions = "APIerSv1.GetTPAccountActions"
APIerSv1SetTPAccountActions = "APIerSv1.SetTPAccountActions"
APIerSv1GetTPAccountActionsByLoadId = "APIerSv1.GetTPAccountActionsByLoadId"
APIerSv1GetTPAccountActionLoadIds = "APIerSv1.GetTPAccountActionLoadIds"
APIerSv1GetTPAccountActionIds = "APIerSv1.GetTPAccountActionIds"
APIerSv1RemoveTPAccountActions = "APIerSv1.RemoveTPAccountActions"
APIerSv1GetTPActionPlan = "APIerSv1.GetTPActionPlan"
APIerSv1SetTPActionPlan = "APIerSv1.SetTPActionPlan"
APIerSv1GetTPActionPlanIds = "APIerSv1.GetTPActionPlanIds"
APIerSv1SetTPActionTriggers = "APIerSv1.SetTPActionTriggers"
APIerSv1GetTPActionTriggers = "APIerSv1.GetTPActionTriggers"
APIerSv1RemoveTPActionTriggers = "APIerSv1.RemoveTPActionTriggers"
APIerSv1GetTPActionTriggerIds = "APIerSv1.GetTPActionTriggerIds"
APIerSv1GetTPActions = "APIerSv1.GetTPActions"
APIerSv1RemoveTPActionPlan = "APIerSv1.RemoveTPActionPlan"
APIerSv1GetTPAttributeProfile = "APIerSv1.GetTPAttributeProfile"
APIerSv1SetTPAttributeProfile = "APIerSv1.SetTPAttributeProfile"
APIerSv1GetTPAttributeProfileIds = "APIerSv1.GetTPAttributeProfileIds"
APIerSv1RemoveTPAttributeProfile = "APIerSv1.RemoveTPAttributeProfile"
APIerSv1GetTPCharger = "APIerSv1.GetTPCharger"
APIerSv1SetTPCharger = "APIerSv1.SetTPCharger"
APIerSv1RemoveTPCharger = "APIerSv1.RemoveTPCharger"
APIerSv1GetTPChargerIDs = "APIerSv1.GetTPChargerIDs"
APIerSv1SetTPFilterProfile = "APIerSv1.SetTPFilterProfile"
APIerSv1GetTPFilterProfile = "APIerSv1.GetTPFilterProfile"
APIerSv1GetTPFilterProfileIds = "APIerSv1.GetTPFilterProfileIds"
APIerSv1RemoveTPFilterProfile = "APIerSv1.RemoveTPFilterProfile"
APIerSv1GetTPDestination = "APIerSv1.GetTPDestination"
APIerSv1SetTPDestination = "APIerSv1.SetTPDestination"
APIerSv1GetTPDestinationIDs = "APIerSv1.GetTPDestinationIDs"
APIerSv1RemoveTPDestination = "APIerSv1.RemoveTPDestination"
APIerSv1GetTPResource = "APIerSv1.GetTPResource"
APIerSv1SetTPResource = "APIerSv1.SetTPResource"
APIerSv1RemoveTPResource = "APIerSv1.RemoveTPResource"
APIerSv1SetTPRate = "APIerSv1.SetTPRate"
APIerSv1GetTPRate = "APIerSv1.GetTPRate"
APIerSv1RemoveTPRate = "APIerSv1.RemoveTPRate"
APIerSv1GetTPRateIds = "APIerSv1.GetTPRateIds"
APIerSv1SetTPThreshold = "APIerSv1.SetTPThreshold"
APIerSv1GetTPThreshold = "APIerSv1.GetTPThreshold"
APIerSv1GetTPThresholdIDs = "APIerSv1.GetTPThresholdIDs"
APIerSv1RemoveTPThreshold = "APIerSv1.RemoveTPThreshold"
APIerSv1SetTPStat = "APIerSv1.SetTPStat"
APIerSv1GetTPStat = "APIerSv1.GetTPStat"
APIerSv1RemoveTPStat = "APIerSv1.RemoveTPStat"
APIerSv1GetTPDestinationRate = "APIerSv1.GetTPDestinationRate"
APIerSv1SetTPRouteProfile = "APIerSv1.SetTPRouteProfile"
APIerSv1GetTPRouteProfile = "APIerSv1.GetTPRouteProfile"
APIerSv1GetTPRouteProfileIDs = "APIerSv1.GetTPRouteProfileIDs"
APIerSv1RemoveTPRouteProfile = "APIerSv1.RemoveTPRouteProfile"
APIerSv1GetTPDispatcherProfile = "APIerSv1.GetTPDispatcherProfile"
APIerSv1SetTPDispatcherProfile = "APIerSv1.SetTPDispatcherProfile"
APIerSv1RemoveTPDispatcherProfile = "APIerSv1.RemoveTPDispatcherProfile"
APIerSv1GetTPDispatcherProfileIDs = "APIerSv1.GetTPDispatcherProfileIDs"
APIerSv1GetTPSharedGroups = "APIerSv1.GetTPSharedGroups"
APIerSv1SetTPSharedGroups = "APIerSv1.SetTPSharedGroups"
APIerSv1GetTPSharedGroupIds = "APIerSv1.GetTPSharedGroupIds"
APIerSv1RemoveTPSharedGroups = "APIerSv1.RemoveTPSharedGroups"
APIerSv1ExportCDRs = "APIerSv1.ExportCDRs"
APIerSv1GetTPRatingPlan = "APIerSv1.GetTPRatingPlan"
APIerSv1SetTPRatingPlan = "APIerSv1.SetTPRatingPlan"
APIerSv1GetTPRatingPlanIds = "APIerSv1.GetTPRatingPlanIds"
APIerSv1RemoveTPRatingPlan = "APIerSv1.RemoveTPRatingPlan"
APIerSv1SetTPActions = "APIerSv1.SetTPActions"
APIerSv1GetTPActionIds = "APIerSv1.GetTPActionIds"
APIerSv1RemoveTPActions = "APIerSv1.RemoveTPActions"
APIerSv1SetActionPlan = "APIerSv1.SetActionPlan"
APIerSv1ExecuteAction = "APIerSv1.ExecuteAction"
APIerSv1SetTPRatingProfile = "APIerSv1.SetTPRatingProfile"
APIerSv1GetTPRatingProfile = "APIerSv1.GetTPRatingProfile"
APIerSv1RemoveTPRatingProfile = "APIerSv1.RemoveTPRatingProfile"
APIerSv1SetTPDestinationRate = "APIerSv1.SetTPDestinationRate"
APIerSv1GetTPRatingProfileLoadIds = "APIerSv1.GetTPRatingProfileLoadIds"
APIerSv1GetTPRatingProfilesByLoadID = "APIerSv1.GetTPRatingProfilesByLoadID"
APIerSv1GetTPRatingProfileIds = "APIerSv1.GetTPRatingProfileIds"
APIerSv1GetTPDestinationRateIds = "APIerSv1.GetTPDestinationRateIds"
APIerSv1RemoveTPDestinationRate = "APIerSv1.RemoveTPDestinationRate"
APIerSv1ImportTariffPlanFromFolder = "APIerSv1.ImportTariffPlanFromFolder"
APIerSv1ExportTPToFolder = "APIerSv1.ExportTPToFolder"
APIerSv1LoadRatingPlan = "APIerSv1.LoadRatingPlan"
APIerSv1LoadRatingProfile = "APIerSv1.LoadRatingProfile"
APIerSv1LoadAccountActions = "APIerSv1.LoadAccountActions"
APIerSv1SetActions = "APIerSv1.SetActions"
APIerSv1AddTriggeredAction = "APIerSv1.AddTriggeredAction"
APIerSv1GetAccountActionTriggers = "APIerSv1.GetAccountActionTriggers"
APIerSv1AddAccountActionTriggers = "APIerSv1.AddAccountActionTriggers"
APIerSv1ResetAccountActionTriggers = "APIerSv1.ResetAccountActionTriggers"
APIerSv1SetAccountActionTriggers = "APIerSv1.SetAccountActionTriggers"
APIerSv1RemoveAccountActionTriggers = "APIerSv1.RemoveAccountActionTriggers"
APIerSv1GetScheduledActions = "APIerSv1.GetScheduledActions"
APIerSv1RemoveActionTiming = "APIerSv1.RemoveActionTiming"
APIerSv1ComputeReverseDestinations = "APIerSv1.ComputeReverseDestinations"
APIerSv1ComputeAccountActionPlans = "APIerSv1.ComputeAccountActionPlans"
APIerSv1SetDestination = "APIerSv1.SetDestination"
APIerSv1GetDataCost = "APIerSv1.GetDataCost"
APIerSv1ReplayFailedPosts = "APIerSv1.ReplayFailedPosts"
APIerSv1RemoveAccount = "APIerSv1.RemoveAccount"
APIerSv1DebitUsage = "APIerSv1.DebitUsage"
APIerSv1GetCacheStats = "APIerSv1.GetCacheStats"
APIerSv1ReloadCache = "APIerSv1.ReloadCache"
APIerSv1GetActionTriggers = "APIerSv1.GetActionTriggers"
APIerSv1SetActionTrigger = "APIerSv1.SetActionTrigger"
APIerSv1RemoveActionPlan = "APIerSv1.RemoveActionPlan"
APIerSv1RemoveActions = "APIerSv1.RemoveActions"
APIerSv1RemoveBalances = "APIerSv1.RemoveBalances"
APIerSv1GetLoadHistory = "APIerSv1.GetLoadHistory"
APIerSv1GetLoadIDs = "APIerSv1.GetLoadIDs"
APIerSv1GetLoadTimes = "APIerSv1.GetLoadTimes"
APIerSv1ExecuteScheduledActions = "APIerSv1.ExecuteScheduledActions"
APIerSv1GetSharedGroup = "APIerSv1.GetSharedGroup"
APIerSv1RemoveActionTrigger = "APIerSv1.RemoveActionTrigger"
APIerSv1GetAccount = "APIerSv1.GetAccount"
APIerSv1GetAttributeProfileCount = "APIerSv1.GetAttributeProfileCount"
APIerSv1GetMaxUsage = "APIerSv1.GetMaxUsage"
APIerSv1GetTiming = "APIerSv1.GetTiming"
APIerSv1SetTiming = "APIerSv1.SetTiming"
APIerSv1RemoveTiming = "APIerSv1.RemoveTiming"
)
// APIerSv1 TP APIs