diff --git a/apier/v1/api_interfaces.go b/apier/v1/api_interfaces.go index 49470a657..e265d88e3 100644 --- a/apier/v1/api_interfaces.go +++ b/apier/v1/api_interfaces.go @@ -168,3 +168,33 @@ type CoreSv1Interface interface { Status(arg *utils.TenantWithArgDispatcher, reply *map[string]interface{}) error Ping(ign *utils.CGREventWithArgDispatcher, reply *string) error } + +type ReplicatorSv1Interface interface { + Ping(ign *utils.CGREventWithArgDispatcher, reply *string) error + GetAccount(args *dispatchers.StringWithApiKey, reply *engine.Account) error + GetDestination(key *dispatchers.StringWithApiKey, reply *engine.Destination) error + GetReverseDestination(key *dispatchers.StringWithApiKey, reply *[]string) error + GetStatQueue(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueue) error + GetFilter(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Filter) error + GetThreshold(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Threshold) error + GetThresholdProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ThresholdProfile) error + GetStatQueueProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueueProfile) error + GetTiming(id *dispatchers.StringWithApiKey, reply *utils.TPTiming) error + GetResource(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error + GetResourceProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ResourceProfile) error + GetActionTriggers(id *dispatchers.StringWithApiKey, reply *engine.ActionTriggers) error + GetShareGroup(id *dispatchers.StringWithApiKey, reply *engine.SharedGroup) error + GetActions(id *dispatchers.StringWithApiKey, reply *engine.Actions) error + GetActionPlan(id *dispatchers.StringWithApiKey, reply *engine.ActionPlan) error + GetAllActionPlans(_ *dispatchers.StringWithApiKey, reply *map[string]*engine.ActionPlan) error + GetAccountActionPlans(id *dispatchers.StringWithApiKey, reply *[]string) error + GetRatingPlan(id *dispatchers.StringWithApiKey, reply *engine.RatingPlan) error + GetRatingProfile(id *dispatchers.StringWithApiKey, reply *engine.RatingProfile) error + GetSupplierProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.SupplierProfile) error + GetAttributeProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.AttributeProfile) error + GetChargerProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ChargerProfile) error + GetDispatcherProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherProfile) error + GetDispatcherHost(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherHost) error + GetItemLoadIDs(itemID *dispatchers.StringWithApiKey, reply *map[string]int64) error + GetFilterIndexes(args *utils.GetFilterIndexesArgWithArgDispatcher, reply *map[string]utils.StringMap) error +} diff --git a/apier/v1/api_interfaces_test.go b/apier/v1/api_interfaces_test.go index 94bb61a0a..a924929ec 100644 --- a/apier/v1/api_interfaces_test.go +++ b/apier/v1/api_interfaces_test.go @@ -103,3 +103,8 @@ func TestCoreSv1Interface(t *testing.T) { _ = CoreSv1Interface(NewDispatcherCoreSv1(nil)) _ = CoreSv1Interface(NewCoreSv1(nil)) } + +func TestReplicatorSv1Interface(t *testing.T) { + _ = ReplicatorSv1Interface(NewDispatcherReplicatorSv1(nil)) + _ = ReplicatorSv1Interface(NewReplicatorSv1(nil)) +} diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go index bc545ac4d..3324e5671 100755 --- a/apier/v1/dispatcher.go +++ b/apier/v1/dispatcher.go @@ -826,3 +826,146 @@ func (dS *DispatcherRALsV1) GetRatingPlansCost(args *utils.RatingPlanCostArg, re func (dS *DispatcherRALsV1) Ping(args *utils.CGREventWithArgDispatcher, reply *string) error { return dS.dS.RALsV1Ping(args, reply) } + +type DispatcherReplicatorSv1 struct { + dS *dispatchers.DispatcherService +} + +func NewDispatcherReplicatorSv1(dps *dispatchers.DispatcherService) *DispatcherReplicatorSv1 { + return &DispatcherReplicatorSv1{dS: dps} +} + +// Ping used to detreminate if component is active +func (dS *DispatcherReplicatorSv1) Ping(args *utils.CGREventWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1Ping(args, reply) +} + +// GetAccount +func (dS *DispatcherReplicatorSv1) GetAccount(args *dispatchers.StringWithApiKey, reply *engine.Account) error { + return dS.dS.ReplicatorSv1GetAccount(args, reply) +} + +// GetDestination +func (dS *DispatcherReplicatorSv1) GetDestination(key *dispatchers.StringWithApiKey, reply *engine.Destination) error { + return dS.dS.ReplicatorSv1GetDestination(key, reply) +} + +// GetReverseDestination +func (dS *DispatcherReplicatorSv1) GetReverseDestination(key *dispatchers.StringWithApiKey, reply *[]string) error { + return dS.dS.ReplicatorSv1GetReverseDestination(key, reply) +} + +// GetStatQueue +func (dS *DispatcherReplicatorSv1) GetStatQueue(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueue) error { + return dS.dS.ReplicatorSv1GetStatQueue(tntID, reply) +} + +// GetFilter +func (dS *DispatcherReplicatorSv1) GetFilter(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Filter) error { + return dS.dS.ReplicatorSv1GetFilter(tntID, reply) +} + +// GetThreshold +func (dS *DispatcherReplicatorSv1) GetThreshold(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Threshold) error { + return dS.dS.ReplicatorSv1GetThreshold(tntID, reply) +} + +// GetThresholdProfile +func (dS *DispatcherReplicatorSv1) GetThresholdProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ThresholdProfile) error { + return dS.dS.ReplicatorSv1GetThresholdProfile(tntID, reply) +} + +// GetStatQueueProfile +func (dS *DispatcherReplicatorSv1) GetStatQueueProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueueProfile) error { + return dS.dS.ReplicatorSv1GetStatQueueProfile(tntID, reply) +} + +// GetTiming +func (dS *DispatcherReplicatorSv1) GetTiming(id *dispatchers.StringWithApiKey, reply *utils.TPTiming) error { + return dS.dS.ReplicatorSv1GetTiming(id, reply) +} + +// GetResource +func (dS *DispatcherReplicatorSv1) GetResource(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error { + return dS.dS.ReplicatorSv1GetResource(tntID, reply) +} + +// GetResourceProfile +func (dS *DispatcherReplicatorSv1) GetResourceProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ResourceProfile) error { + return dS.dS.ReplicatorSv1GetResourceProfile(tntID, reply) +} + +// GetActionTriggers +func (dS *DispatcherReplicatorSv1) GetActionTriggers(id *dispatchers.StringWithApiKey, reply *engine.ActionTriggers) error { + return dS.dS.ReplicatorSv1GetActionTriggers(id, reply) +} + +// GetShareGroup +func (dS *DispatcherReplicatorSv1) GetShareGroup(id *dispatchers.StringWithApiKey, reply *engine.SharedGroup) error { + return dS.dS.ReplicatorSv1GetShareGroup(id, reply) +} + +// GetActions +func (dS *DispatcherReplicatorSv1) GetActions(id *dispatchers.StringWithApiKey, reply *engine.Actions) error { + return dS.dS.ReplicatorSv1GetActions(id, reply) +} + +// GetActionPlan +func (dS *DispatcherReplicatorSv1) GetActionPlan(id *dispatchers.StringWithApiKey, reply *engine.ActionPlan) error { + return dS.dS.ReplicatorSv1GetActionPlan(id, reply) +} + +// GetAllActionPlans +func (dS *DispatcherReplicatorSv1) GetAllActionPlans(args *dispatchers.StringWithApiKey, reply *map[string]*engine.ActionPlan) error { + return dS.dS.ReplicatorSv1GetAllActionPlans(args, reply) +} + +// GetAccountActionPlans +func (dS *DispatcherReplicatorSv1) GetAccountActionPlans(id *dispatchers.StringWithApiKey, reply *[]string) error { + return dS.dS.ReplicatorSv1GetAccountActionPlans(id, reply) +} + +// GetRatingPlan +func (dS *DispatcherReplicatorSv1) GetRatingPlan(id *dispatchers.StringWithApiKey, reply *engine.RatingPlan) error { + return dS.dS.ReplicatorSv1GetRatingPlan(id, reply) +} + +// GetRatingProfile +func (dS *DispatcherReplicatorSv1) GetRatingProfile(id *dispatchers.StringWithApiKey, reply *engine.RatingProfile) error { + return dS.dS.ReplicatorSv1GetRatingProfile(id, reply) +} + +// GetSupplierProfile +func (dS *DispatcherReplicatorSv1) GetSupplierProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.SupplierProfile) error { + return dS.dS.ReplicatorSv1GetSupplierProfile(tntID, reply) +} + +// GetAttributeProfile +func (dS *DispatcherReplicatorSv1) GetAttributeProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.AttributeProfile) error { + return dS.dS.ReplicatorSv1GetAttributeProfile(tntID, reply) +} + +// GetChargerProfile +func (dS *DispatcherReplicatorSv1) GetChargerProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ChargerProfile) error { + return dS.dS.ReplicatorSv1GetChargerProfile(tntID, reply) +} + +// GetDispatcherProfile +func (dS *DispatcherReplicatorSv1) GetDispatcherProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherProfile) error { + return dS.dS.ReplicatorSv1GetDispatcherProfile(tntID, reply) +} + +// GetDispatcherHost +func (dS *DispatcherReplicatorSv1) GetDispatcherHost(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherHost) error { + return dS.dS.ReplicatorSv1GetDispatcherHost(tntID, reply) +} + +// GetItemLoadIDs +func (dS *DispatcherReplicatorSv1) GetItemLoadIDs(itemID *dispatchers.StringWithApiKey, reply *map[string]int64) error { + return dS.dS.ReplicatorSv1GetItemLoadIDs(itemID, reply) +} + +// GetFilterIndexes +func (dS *DispatcherReplicatorSv1) GetFilterIndexes(args *utils.GetFilterIndexesArgWithArgDispatcher, reply *map[string]utils.StringMap) error { + return dS.dS.ReplicatorSv1GetFilterIndexes(args, reply) +} diff --git a/apier/v1/replicator.go b/apier/v1/replicator.go index c256cea88..13f67b17a 100644 --- a/apier/v1/replicator.go +++ b/apier/v1/replicator.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/cgrates/dispatchers" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -38,8 +39,8 @@ func (rplSv1 *ReplicatorSv1) Call(serviceMethod string, args interface{}, reply } //GetAccount -func (rplSv1 *ReplicatorSv1) GetAccount(id string, reply *engine.Account) error { - if rcv, err := rplSv1.dm.GetAccount(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetAccount(args *dispatchers.StringWithApiKey, reply *engine.Account) error { + if rcv, err := rplSv1.dm.GetAccount(args.Arg); err != nil { return err } else { *reply = *rcv @@ -48,8 +49,8 @@ func (rplSv1 *ReplicatorSv1) GetAccount(id string, reply *engine.Account) error } //GetDestination -func (rplSv1 *ReplicatorSv1) GetDestination(key string, reply *engine.Destination) error { - if rcv, err := rplSv1.dm.DataDB().GetDestinationDrv(key, true, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) GetDestination(key *dispatchers.StringWithApiKey, reply *engine.Destination) error { + if rcv, err := rplSv1.dm.DataDB().GetDestinationDrv(key.Arg, true, utils.NonTransactional); err != nil { return err } else { *reply = *rcv @@ -58,8 +59,8 @@ func (rplSv1 *ReplicatorSv1) GetDestination(key string, reply *engine.Destinatio } //GetDestination -func (rplSv1 *ReplicatorSv1) GetReverseDestination(key string, reply *[]string) error { - if rcv, err := rplSv1.dm.DataDB().GetReverseDestinationDrv(key, true, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) GetReverseDestination(key *dispatchers.StringWithApiKey, reply *[]string) error { + if rcv, err := rplSv1.dm.DataDB().GetReverseDestinationDrv(key.Arg, true, utils.NonTransactional); err != nil { return err } else { *reply = rcv @@ -68,7 +69,7 @@ func (rplSv1 *ReplicatorSv1) GetReverseDestination(key string, reply *[]string) } //GetStatQueue -func (rplSv1 *ReplicatorSv1) GetStatQueue(tntID *utils.TenantID, reply *engine.StatQueue) error { +func (rplSv1 *ReplicatorSv1) GetStatQueue(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueue) error { if rcv, err := rplSv1.dm.DataDB().GetStatQueueDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -78,7 +79,7 @@ func (rplSv1 *ReplicatorSv1) GetStatQueue(tntID *utils.TenantID, reply *engine.S } //GetFilter -func (rplSv1 *ReplicatorSv1) GetFilter(tntID *utils.TenantID, reply *engine.Filter) error { +func (rplSv1 *ReplicatorSv1) GetFilter(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Filter) error { if rcv, err := rplSv1.dm.DataDB().GetFilterDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -88,7 +89,7 @@ func (rplSv1 *ReplicatorSv1) GetFilter(tntID *utils.TenantID, reply *engine.Filt } //GetThreshold -func (rplSv1 *ReplicatorSv1) GetThreshold(tntID *utils.TenantID, reply *engine.Threshold) error { +func (rplSv1 *ReplicatorSv1) GetThreshold(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Threshold) error { if rcv, err := rplSv1.dm.DataDB().GetThresholdDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -98,7 +99,7 @@ func (rplSv1 *ReplicatorSv1) GetThreshold(tntID *utils.TenantID, reply *engine.T } //GetThresholdProfile -func (rplSv1 *ReplicatorSv1) GetThresholdProfile(tntID *utils.TenantID, reply *engine.ThresholdProfile) error { +func (rplSv1 *ReplicatorSv1) GetThresholdProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ThresholdProfile) error { if rcv, err := rplSv1.dm.DataDB().GetThresholdProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -108,7 +109,7 @@ func (rplSv1 *ReplicatorSv1) GetThresholdProfile(tntID *utils.TenantID, reply *e } //GetStatQueueProfile -func (rplSv1 *ReplicatorSv1) GetStatQueueProfile(tntID *utils.TenantID, reply *engine.StatQueueProfile) error { +func (rplSv1 *ReplicatorSv1) GetStatQueueProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.StatQueueProfile) error { if rcv, err := rplSv1.dm.DataDB().GetStatQueueProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -118,8 +119,8 @@ func (rplSv1 *ReplicatorSv1) GetStatQueueProfile(tntID *utils.TenantID, reply *e } //GetTiming -func (rplSv1 *ReplicatorSv1) GetTiming(id string, reply *utils.TPTiming) error { - if rcv, err := rplSv1.dm.DataDB().GetTimingDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetTiming(id *dispatchers.StringWithApiKey, reply *utils.TPTiming) error { + if rcv, err := rplSv1.dm.DataDB().GetTimingDrv(id.Arg); err != nil { return err } else { *reply = *rcv @@ -128,7 +129,7 @@ func (rplSv1 *ReplicatorSv1) GetTiming(id string, reply *utils.TPTiming) error { } //GetResource -func (rplSv1 *ReplicatorSv1) GetResource(tntID *utils.TenantID, reply *engine.Resource) error { +func (rplSv1 *ReplicatorSv1) GetResource(tntID *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error { if rcv, err := rplSv1.dm.DataDB().GetResourceDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -138,7 +139,7 @@ func (rplSv1 *ReplicatorSv1) GetResource(tntID *utils.TenantID, reply *engine.Re } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetResourceProfile(tntID *utils.TenantID, reply *engine.ResourceProfile) error { +func (rplSv1 *ReplicatorSv1) GetResourceProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ResourceProfile) error { if rcv, err := rplSv1.dm.DataDB().GetResourceProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -148,18 +149,18 @@ func (rplSv1 *ReplicatorSv1) GetResourceProfile(tntID *utils.TenantID, reply *en } //GetActionTriggers -func (rplSv1 *ReplicatorSv1) GetActionTriggers(id string, reply engine.ActionTriggers) error { - if rcv, err := rplSv1.dm.DataDB().GetActionTriggersDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetActionTriggers(id *dispatchers.StringWithApiKey, reply *engine.ActionTriggers) error { + if rcv, err := rplSv1.dm.DataDB().GetActionTriggersDrv(id.Arg); err != nil { return err } else { - reply = rcv + *reply = rcv } return nil } //GetShareGroup -func (rplSv1 *ReplicatorSv1) GetShareGroup(id string, reply *engine.SharedGroup) error { - if rcv, err := rplSv1.dm.DataDB().GetSharedGroupDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetShareGroup(id *dispatchers.StringWithApiKey, reply *engine.SharedGroup) error { + if rcv, err := rplSv1.dm.DataDB().GetSharedGroupDrv(id.Arg); err != nil { return err } else { *reply = *rcv @@ -168,8 +169,8 @@ func (rplSv1 *ReplicatorSv1) GetShareGroup(id string, reply *engine.SharedGroup) } //GetActions -func (rplSv1 *ReplicatorSv1) GetActions(id string, reply *engine.Actions) error { - if rcv, err := rplSv1.dm.DataDB().GetActionsDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetActions(id *dispatchers.StringWithApiKey, reply *engine.Actions) error { + if rcv, err := rplSv1.dm.DataDB().GetActionsDrv(id.Arg); err != nil { return err } else { *reply = rcv @@ -178,8 +179,8 @@ func (rplSv1 *ReplicatorSv1) GetActions(id string, reply *engine.Actions) error } //GetActions -func (rplSv1 *ReplicatorSv1) GetActionPlan(id string, reply *engine.ActionPlan) error { - if rcv, err := rplSv1.dm.DataDB().GetActionPlanDrv(id, true, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) GetActionPlan(id *dispatchers.StringWithApiKey, reply *engine.ActionPlan) error { + if rcv, err := rplSv1.dm.DataDB().GetActionPlanDrv(id.Arg, true, utils.NonTransactional); err != nil { return err } else { *reply = *rcv @@ -188,7 +189,7 @@ func (rplSv1 *ReplicatorSv1) GetActionPlan(id string, reply *engine.ActionPlan) } //GetAllActionPlans -func (rplSv1 *ReplicatorSv1) GetAllActionPlans(_ string, reply *map[string]*engine.ActionPlan) error { +func (rplSv1 *ReplicatorSv1) GetAllActionPlans(_ *dispatchers.StringWithApiKey, reply *map[string]*engine.ActionPlan) error { if rcv, err := rplSv1.dm.DataDB().GetAllActionPlansDrv(); err != nil { return err } else { @@ -198,8 +199,8 @@ func (rplSv1 *ReplicatorSv1) GetAllActionPlans(_ string, reply *map[string]*engi } //GetAccountActionPlans -func (rplSv1 *ReplicatorSv1) GetAccountActionPlans(id string, reply *[]string) error { - if rcv, err := rplSv1.dm.DataDB().GetAccountActionPlansDrv(id, false, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) GetAccountActionPlans(id *dispatchers.StringWithApiKey, reply *[]string) error { + if rcv, err := rplSv1.dm.DataDB().GetAccountActionPlansDrv(id.Arg, false, utils.NonTransactional); err != nil { return err } else { *reply = rcv @@ -208,8 +209,8 @@ func (rplSv1 *ReplicatorSv1) GetAccountActionPlans(id string, reply *[]string) e } //GetAllActionPlans -func (rplSv1 *ReplicatorSv1) GetRatingPlan(id string, reply *engine.RatingPlan) error { - if rcv, err := rplSv1.dm.DataDB().GetRatingPlanDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetRatingPlan(id *dispatchers.StringWithApiKey, reply *engine.RatingPlan) error { + if rcv, err := rplSv1.dm.DataDB().GetRatingPlanDrv(id.Arg); err != nil { return err } else { *reply = *rcv @@ -218,8 +219,8 @@ func (rplSv1 *ReplicatorSv1) GetRatingPlan(id string, reply *engine.RatingPlan) } //GetAllActionPlans -func (rplSv1 *ReplicatorSv1) GetRatingProfile(id string, reply *engine.RatingProfile) error { - if rcv, err := rplSv1.dm.DataDB().GetRatingProfileDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) GetRatingProfile(id *dispatchers.StringWithApiKey, reply *engine.RatingProfile) error { + if rcv, err := rplSv1.dm.DataDB().GetRatingProfileDrv(id.Arg); err != nil { return err } else { *reply = *rcv @@ -228,7 +229,7 @@ func (rplSv1 *ReplicatorSv1) GetRatingProfile(id string, reply *engine.RatingPro } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetSupplierProfile(tntID *utils.TenantID, reply *engine.SupplierProfile) error { +func (rplSv1 *ReplicatorSv1) GetSupplierProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.SupplierProfile) error { if rcv, err := rplSv1.dm.DataDB().GetSupplierProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -238,7 +239,7 @@ func (rplSv1 *ReplicatorSv1) GetSupplierProfile(tntID *utils.TenantID, reply *en } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetAttributeProfile(tntID *utils.TenantID, reply *engine.AttributeProfile) error { +func (rplSv1 *ReplicatorSv1) GetAttributeProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.AttributeProfile) error { if rcv, err := rplSv1.dm.DataDB().GetAttributeProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -248,7 +249,7 @@ func (rplSv1 *ReplicatorSv1) GetAttributeProfile(tntID *utils.TenantID, reply *e } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetChargerProfile(tntID *utils.TenantID, reply *engine.ChargerProfile) error { +func (rplSv1 *ReplicatorSv1) GetChargerProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.ChargerProfile) error { if rcv, err := rplSv1.dm.DataDB().GetChargerProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -258,7 +259,7 @@ func (rplSv1 *ReplicatorSv1) GetChargerProfile(tntID *utils.TenantID, reply *eng } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetDispatcherProfile(tntID *utils.TenantID, reply *engine.DispatcherProfile) error { +func (rplSv1 *ReplicatorSv1) GetDispatcherProfile(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherProfile) error { if rcv, err := rplSv1.dm.DataDB().GetDispatcherProfileDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -268,7 +269,7 @@ func (rplSv1 *ReplicatorSv1) GetDispatcherProfile(tntID *utils.TenantID, reply * } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetDispatcherHost(tntID *utils.TenantID, reply *engine.DispatcherHost) error { +func (rplSv1 *ReplicatorSv1) GetDispatcherHost(tntID *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherHost) error { if rcv, err := rplSv1.dm.DataDB().GetDispatcherHostDrv(tntID.Tenant, tntID.ID); err != nil { return err } else { @@ -278,8 +279,8 @@ func (rplSv1 *ReplicatorSv1) GetDispatcherHost(tntID *utils.TenantID, reply *eng } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetItemLoadIDs(itemID string, reply *map[string]int64) error { - if rcv, err := rplSv1.dm.DataDB().GetItemLoadIDsDrv(itemID); err != nil { +func (rplSv1 *ReplicatorSv1) GetItemLoadIDs(itemID *dispatchers.StringWithApiKey, reply *map[string]int64) error { + if rcv, err := rplSv1.dm.DataDB().GetItemLoadIDsDrv(itemID.Arg); err != nil { return err } else { *reply = rcv @@ -288,7 +289,7 @@ func (rplSv1 *ReplicatorSv1) GetItemLoadIDs(itemID string, reply *map[string]int } //GetResourceProfile -func (rplSv1 *ReplicatorSv1) GetFilterIndexes(args *utils.GetFilterIndexesArg, reply *map[string]utils.StringMap) error { +func (rplSv1 *ReplicatorSv1) GetFilterIndexes(args *utils.GetFilterIndexesArgWithArgDispatcher, reply *map[string]utils.StringMap) error { if rcv, err := rplSv1.dm.DataDB().GetFilterIndexesDrv(args.CacheID, args.ItemIDPrefix, args.FilterType, args.FldNameVal); err != nil { return err diff --git a/config/datadbcfg.go b/config/datadbcfg.go index 824c23b7b..9fb61b444 100644 --- a/config/datadbcfg.go +++ b/config/datadbcfg.go @@ -130,6 +130,9 @@ type ItemOpt struct { Remote bool Replicate bool TTL time.Duration + // used for ArgDispatcher in case we send this to a dispatcer engine + RouteID string + APIKey string } func (itm *ItemOpt) loadFromJsonCfg(jsonItm *ItemOptJson) (err error) { @@ -147,5 +150,11 @@ func (itm *ItemOpt) loadFromJsonCfg(jsonItm *ItemOptJson) (err error) { return err } } + if jsonItm.Route_id != nil { + itm.RouteID = *jsonItm.Route_id + } + if jsonItm.Api_key != nil { + itm.APIKey = *jsonItm.Api_key + } return } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 0bfb80e39..31552788e 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -101,6 +101,9 @@ type ItemOptJson struct { Remote *bool Replicate *bool Ttl *string + // used for ArgDispatcher in case we send this to a dispatcer engine + Route_id *string + Api_key *string } // Filters config diff --git a/dispatchers/rals.go b/dispatchers/rals.go index 553ea4183..cd42495f6 100644 --- a/dispatchers/rals.go +++ b/dispatchers/rals.go @@ -19,6 +19,8 @@ along with this program. If not, see package dispatchers import ( + "time" + "github.com/cgrates/cgrates/utils" ) @@ -52,7 +54,7 @@ func (dS *DispatcherService) RALsV1GetRatingPlansCost(args *utils.RatingPlanCost } if err = dS.authorize(utils.RALsV1GetRatingPlansCost, tenant, - args.APIKey, &nowTime); err != nil { + args.APIKey, utils.TimePointer(time.Now())); err != nil { return } } diff --git a/dispatchers/replicator.go b/dispatchers/replicator.go new file mode 100644 index 000000000..13c2c7829 --- /dev/null +++ b/dispatchers/replicator.go @@ -0,0 +1,608 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package dispatchers + +import ( + "time" + + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func (dS *DispatcherService) ReplicatorSv1Ping(args *utils.CGREventWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = utils.NewCGREventWithArgDispatcher() + } + args.CGREvent.Tenant = utils.FirstNonEmpty(args.CGREvent.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1Ping, args.CGREvent.Tenant, + args.APIKey, args.CGREvent.Time); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(args.CGREvent, utils.MetaReplicator, routeID, + utils.ReplicatorSv1Ping, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetAccount(args *StringWithApiKey, rpl *engine.Account) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetAccount, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetAccount, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetDestination(args *StringWithApiKey, rpl *engine.Destination) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetDestination, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetDestination, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetReverseDestination(args *StringWithApiKey, rpl *[]string) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetReverseDestination, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetReverseDestination, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetStatQueue(args *utils.TenantIDWithArgDispatcher, reply *engine.StatQueue) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetStatQueue, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetStatQueue, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetFilter(args *utils.TenantIDWithArgDispatcher, reply *engine.Filter) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetFilter, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetFilter, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetThreshold(args *utils.TenantIDWithArgDispatcher, reply *engine.Threshold) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetThreshold, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetThreshold, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetThresholdProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.ThresholdProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetThresholdProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetThresholdProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetStatQueueProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.StatQueueProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetStatQueueProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetStatQueueProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetTiming(args *StringWithApiKey, rpl *utils.TPTiming) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetTiming, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetTiming, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetResource(args *utils.TenantIDWithArgDispatcher, reply *engine.Resource) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetResource, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetResource, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetResourceProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.ResourceProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetResourceProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetResourceProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetActionTriggers(args *StringWithApiKey, rpl *engine.ActionTriggers) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetActionTriggers, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetActionTriggers, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetShareGroup(args *StringWithApiKey, rpl *engine.SharedGroup) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetShareGroup, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetShareGroup, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetActions(args *StringWithApiKey, rpl *engine.Actions) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetActions, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetActions, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetActionPlan(args *StringWithApiKey, rpl *engine.ActionPlan) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetActionPlan, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetActionPlan, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetAllActionPlans(args *StringWithApiKey, rpl *map[string]*engine.ActionPlan) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetAllActionPlans, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetAllActionPlans, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetAccountActionPlans(args *StringWithApiKey, rpl *[]string) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetAccountActionPlans, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetAccountActionPlans, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetRatingPlan(args *StringWithApiKey, rpl *engine.RatingPlan) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetRatingPlan, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetRatingPlan, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetRatingProfile(args *StringWithApiKey, rpl *engine.RatingProfile) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetRatingProfile, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetRatingProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetSupplierProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.SupplierProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetSupplierProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetSupplierProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetAttributeProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.AttributeProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetAttributeProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetAttributeProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetChargerProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.ChargerProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetChargerProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetChargerProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetDispatcherProfile(args *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherProfile) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetDispatcherProfile, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetDispatcherProfile, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetDispatcherHost(args *utils.TenantIDWithArgDispatcher, reply *engine.DispatcherHost) (err error) { + tnt := dS.cfg.GeneralCfg().DefaultTenant + if args.TenantID != nil && args.TenantID.Tenant != utils.EmptyString { + tnt = args.TenantID.Tenant + } + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if err = dS.authorize(utils.ReplicatorSv1GetDispatcherHost, tnt, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + routeID := args.ArgDispatcher.RouteID + return dS.Dispatch(&utils.CGREvent{ + Tenant: tnt, + ID: args.ID, + }, utils.MetaReplicator, routeID, utils.ReplicatorSv1GetDispatcherHost, args, reply) +} + +func (dS *DispatcherService) ReplicatorSv1GetItemLoadIDs(args *StringWithApiKey, rpl *map[string]int64) (err error) { + if args == nil { + args = &StringWithApiKey{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetItemLoadIDs, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetItemLoadIDs, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1GetFilterIndexes(args *utils.GetFilterIndexesArgWithArgDispatcher, rpl *map[string]utils.StringMap) (err error) { + if args == nil { + args = &utils.GetFilterIndexesArgWithArgDispatcher{} + } + args.TenantArg.Tenant = utils.FirstNonEmpty(args.TenantArg.Tenant, dS.cfg.GeneralCfg().DefaultTenant) + if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { + if args.ArgDispatcher == nil { + return utils.NewErrMandatoryIeMissing(utils.ArgDispatcherField) + } + if err = dS.authorize(utils.ReplicatorSv1GetFilterIndexes, args.TenantArg.Tenant, + args.APIKey, utils.TimePointer(time.Now())); err != nil { + return + } + } + var routeID *string + if args.ArgDispatcher != nil { + routeID = args.ArgDispatcher.RouteID + } + return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1GetFilterIndexes, args, rpl) +} diff --git a/utils/consts.go b/utils/consts.go index c95bfc6bc..5b3f8bd1f 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -361,6 +361,7 @@ const ( MetaScheduler = "*scheduler" MetaSessionsCosts = "*sessions_costs" MetaRALs = "*rals" + MetaReplicator = "*replicator" MetaRerate = "*rerate" MetaRefund = "*refund" MetaStats = "*stats" diff --git a/utils/coreutils.go b/utils/coreutils.go index a6c7e7771..2052550df 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -912,3 +912,9 @@ func GetPathIndex(spath string) (opath string, idx *int) { } return opath, &idxVal } + +type GetFilterIndexesArgWithArgDispatcher struct { + *GetFilterIndexesArg + TenantArg + *ArgDispatcher +}