From 029aaa6c6ce61aea1d6161f788dbf4420bdf1d63 Mon Sep 17 00:00:00 2001 From: adragusin Date: Fri, 21 Feb 2020 16:31:15 +0200 Subject: [PATCH] Added Replication APIs to dispatcher --- apier/v1/api_interfaces.go | 14 ++ apier/v1/dispatcher.go | 70 +++++++++ apier/v1/replicator.go | 44 +++--- dispatchers/replicator.go | 308 +++++++++++++++++++++++++++++++++++++ engine/datamanager.go | 151 ++++++++++++++---- utils/coreutils.go | 6 + 6 files changed, 542 insertions(+), 51 deletions(-) diff --git a/apier/v1/api_interfaces.go b/apier/v1/api_interfaces.go index 70cbd423a..a150099fe 100644 --- a/apier/v1/api_interfaces.go +++ b/apier/v1/api_interfaces.go @@ -203,6 +203,7 @@ type ReplicatorSv1Interface interface { SetThreshold(th *engine.ThresholdWithArgDispatcher, reply *string) error SetFilterIndexes(args *utils.SetFilterIndexesArgWithArgDispatcher, reply *string) error SetAccount(acc *engine.AccountWithArgDispatcher, reply *string) error + SetDestination(dst *engine.DestinationWithArgDispatcher, reply *string) error SetReverseDestination(dst *engine.DestinationWithArgDispatcher, reply *string) error SetStatQueue(ssq *engine.StoredStatQueueWithArgDispatcher, reply *string) error SetFilter(fltr *engine.FilterWithArgDispatcher, reply *string) error @@ -223,6 +224,7 @@ type ReplicatorSv1Interface interface { SetAccountActionPlans(args *engine.SetAccountActionPlansArgWithArgDispatcher, reply *string) error SetDispatcherHost(dpp *engine.DispatcherHostWithArgDispatcher, reply *string) error RemoveThreshold(args *utils.TenantIDWithArgDispatcher, reply *string) error + SetLoadIDs(args *utils.LoadIDsWithArgDispatcher, reply *string) error RemoveDestination(id *utils.StringWithApiKey, reply *string) error RemoveAccount(id *utils.StringWithApiKey, reply *string) error RemoveStatQueue(args *utils.TenantIDWithArgDispatcher, reply *string) error @@ -232,4 +234,16 @@ type ReplicatorSv1Interface interface { RemoveTiming(id *utils.StringWithApiKey, reply *string) error RemoveResource(args *utils.TenantIDWithArgDispatcher, reply *string) error RemoveResourceProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error + RemoveActionTriggers(id *utils.StringWithApiKey, reply *string) error + RemoveSharedGroup(id *utils.StringWithApiKey, reply *string) error + RemoveActions(id *utils.StringWithApiKey, reply *string) error + RemoveActionPlan(id *utils.StringWithApiKey, reply *string) error + RemAccountActionPlans(args *engine.RemAccountActionPlansArgsWithArgDispatcher, reply *string) error + RemoveRatingPlan(id *utils.StringWithApiKey, reply *string) error + RemoveRatingProfile(id *utils.StringWithApiKey, reply *string) error + RemoveSupplierProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error + RemoveAttributeProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error + RemoveChargerProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error + RemoveDispatcherProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error + RemoveDispatcherHost(args *utils.TenantIDWithArgDispatcher, reply *string) error } diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go index 70fa2b82a..1bd627beb 100755 --- a/apier/v1/dispatcher.go +++ b/apier/v1/dispatcher.go @@ -998,6 +998,11 @@ func (dS *DispatcherReplicatorSv1) SetFilterIndexes(args *utils.SetFilterIndexes return dS.dS.ReplicatorSv1SetFilterIndexes(args, reply) } +// SetDestination +func (dS *DispatcherReplicatorSv1) SetDestination(args *engine.DestinationWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1SetDestination(args, reply) +} + // SetAccount func (dS *DispatcherReplicatorSv1) SetAccount(args *engine.AccountWithArgDispatcher, reply *string) error { return dS.dS.ReplicatorSv1SetAccount(args, reply) @@ -1103,6 +1108,11 @@ func (dS *DispatcherReplicatorSv1) RemoveThreshold(args *utils.TenantIDWithArgDi return dS.dS.ReplicatorSv1RemoveThreshold(args, reply) } +// SetLoadIDs +func (dS *DispatcherReplicatorSv1) SetLoadIDs(args *utils.LoadIDsWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1SetLoadIDs(args, reply) +} + // RemoveDestination func (dS *DispatcherReplicatorSv1) RemoveDestination(args *utils.StringWithApiKey, reply *string) error { return dS.dS.ReplicatorSv1RemoveDestination(args, reply) @@ -1147,3 +1157,63 @@ func (dS *DispatcherReplicatorSv1) RemoveResource(args *utils.TenantIDWithArgDis func (dS *DispatcherReplicatorSv1) RemoveResourceProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { return dS.dS.ReplicatorSv1RemoveResourceProfile(args, reply) } + +// RemoveActionTriggers +func (dS *DispatcherReplicatorSv1) RemoveActionTriggers(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveActionTriggers(args, reply) +} + +// RemoveSharedGroup +func (dS *DispatcherReplicatorSv1) RemoveSharedGroup(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveSharedGroup(args, reply) +} + +// RemoveActions +func (dS *DispatcherReplicatorSv1) RemoveActions(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveActions(args, reply) +} + +// RemoveActionPlan +func (dS *DispatcherReplicatorSv1) RemoveActionPlan(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveActionPlan(args, reply) +} + +// RemAccountActionPlans +func (dS *DispatcherReplicatorSv1) RemAccountActionPlans(args *engine.RemAccountActionPlansArgsWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemAccountActionPlans(args, reply) +} + +// RemoveRatingPlan +func (dS *DispatcherReplicatorSv1) RemoveRatingPlan(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveRatingPlan(args, reply) +} + +// RemoveRatingProfile +func (dS *DispatcherReplicatorSv1) RemoveRatingProfile(args *utils.StringWithApiKey, reply *string) error { + return dS.dS.ReplicatorSv1RemoveRatingProfile(args, reply) +} + +// RemoveSupplierProfile +func (dS *DispatcherReplicatorSv1) RemoveSupplierProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemoveSupplierProfile(args, reply) +} + +// RemoveAttributeProfile +func (dS *DispatcherReplicatorSv1) RemoveAttributeProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemoveAttributeProfile(args, reply) +} + +// RemoveChargerProfile +func (dS *DispatcherReplicatorSv1) RemoveChargerProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemoveChargerProfile(args, reply) +} + +// RemoveDispatcherProfile +func (dS *DispatcherReplicatorSv1) RemoveDispatcherProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemoveDispatcherProfile(args, reply) +} + +// RemoveDispatcherHost +func (dS *DispatcherReplicatorSv1) RemoveDispatcherHost(args *utils.TenantIDWithArgDispatcher, reply *string) error { + return dS.dS.ReplicatorSv1RemoveDispatcherHost(args, reply) +} diff --git a/apier/v1/replicator.go b/apier/v1/replicator.go index a32eba134..5445d10c2 100644 --- a/apier/v1/replicator.go +++ b/apier/v1/replicator.go @@ -347,8 +347,8 @@ func (rplSv1 *ReplicatorSv1) SetAccount(acc *engine.AccountWithArgDispatcher, re } // SetDestination -func (rplSv1 *ReplicatorSv1) SetDestination(dst *engine.Destination, reply *string) error { - if err := rplSv1.dm.DataDB().SetDestinationDrv(dst, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) SetDestination(dst *engine.DestinationWithArgDispatcher, reply *string) error { + if err := rplSv1.dm.DataDB().SetDestinationDrv(dst.Destination, utils.NonTransactional); err != nil { return err } *reply = utils.OK @@ -536,8 +536,8 @@ func (rplSv1 *ReplicatorSv1) RemoveThreshold(args *utils.TenantIDWithArgDispatch } // SetLoadIDs -func (rplSv1 *ReplicatorSv1) SetLoadIDs(loadIDs map[string]int64, reply *string) error { - if err := rplSv1.dm.DataDB().SetLoadIDsDrv(loadIDs); err != nil { +func (rplSv1 *ReplicatorSv1) SetLoadIDs(args *utils.LoadIDsWithArgDispatcher, reply *string) error { + if err := rplSv1.dm.DataDB().SetLoadIDsDrv(args.LoadIDs); err != nil { return err } *reply = utils.OK @@ -625,39 +625,39 @@ func (rplSv1 *ReplicatorSv1) RemoveResourceProfile(args *utils.TenantIDWithArgDi return nil } -func (rplSv1 *ReplicatorSv1) RemoveActionTriggers(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveActionTriggersDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveActionTriggers(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveActionTriggersDrv(id.Arg); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemoveSharedGroup(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveSharedGroupDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveSharedGroup(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveSharedGroupDrv(id.Arg); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemoveActions(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveActionsDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveActions(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveActionsDrv(id.Arg); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemoveActionPlan(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveActionPlanDrv(id, utils.NonTransactional); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveActionPlan(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveActionPlanDrv(id.Arg, utils.NonTransactional); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemAccountActionPlans(args *engine.RemAccountActionPlansArgs, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemAccountActionPlans(args *engine.RemAccountActionPlansArgsWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemAccountActionPlansDrv(args.AcntID, args.ApIDs); err != nil { return err } @@ -665,23 +665,23 @@ func (rplSv1 *ReplicatorSv1) RemAccountActionPlans(args *engine.RemAccountAction return nil } -func (rplSv1 *ReplicatorSv1) RemoveRatingPlan(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveRatingPlanDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveRatingPlan(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveRatingPlanDrv(id.Arg); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemoveRatingProfile(id string, reply *string) error { - if err := rplSv1.dm.DataDB().RemoveRatingProfileDrv(id); err != nil { +func (rplSv1 *ReplicatorSv1) RemoveRatingProfile(id *utils.StringWithApiKey, reply *string) error { + if err := rplSv1.dm.DataDB().RemoveRatingProfileDrv(id.Arg); err != nil { return err } *reply = utils.OK return nil } -func (rplSv1 *ReplicatorSv1) RemoveSupplierProfile(args *utils.TenantID, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemoveSupplierProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemoveSupplierProfileDrv(args.Tenant, args.ID); err != nil { return err } @@ -689,7 +689,7 @@ func (rplSv1 *ReplicatorSv1) RemoveSupplierProfile(args *utils.TenantID, reply * return nil } -func (rplSv1 *ReplicatorSv1) RemoveAttributeProfile(args *utils.TenantID, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemoveAttributeProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemoveAttributeProfileDrv(args.Tenant, args.ID); err != nil { return err } @@ -697,7 +697,7 @@ func (rplSv1 *ReplicatorSv1) RemoveAttributeProfile(args *utils.TenantID, reply return nil } -func (rplSv1 *ReplicatorSv1) RemoveChargerProfile(args *utils.TenantID, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemoveChargerProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemoveChargerProfileDrv(args.Tenant, args.ID); err != nil { return err } @@ -705,7 +705,7 @@ func (rplSv1 *ReplicatorSv1) RemoveChargerProfile(args *utils.TenantID, reply *s return nil } -func (rplSv1 *ReplicatorSv1) RemoveDispatcherProfile(args *utils.TenantID, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemoveDispatcherProfile(args *utils.TenantIDWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemoveDispatcherProfileDrv(args.Tenant, args.ID); err != nil { return err } @@ -713,7 +713,7 @@ func (rplSv1 *ReplicatorSv1) RemoveDispatcherProfile(args *utils.TenantID, reply return nil } -func (rplSv1 *ReplicatorSv1) RemoveDispatcherHost(args *utils.TenantID, reply *string) error { +func (rplSv1 *ReplicatorSv1) RemoveDispatcherHost(args *utils.TenantIDWithArgDispatcher, reply *string) error { if err := rplSv1.dm.DataDB().RemoveDispatcherHostDrv(args.Tenant, args.ID); err != nil { return err } diff --git a/dispatchers/replicator.go b/dispatchers/replicator.go index 1be36b0de..e70c977ae 100644 --- a/dispatchers/replicator.go +++ b/dispatchers/replicator.go @@ -695,6 +695,28 @@ func (dS *DispatcherService) ReplicatorSv1SetFilterIndexes(args *utils.SetFilter utils.ReplicatorSv1SetFilterIndexes, args, rpl) } +func (dS *DispatcherService) ReplicatorSv1SetDestination(args *engine.DestinationWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &engine.DestinationWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1SetDestination, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1SetDestination, args, rpl) +} + func (dS *DispatcherService) ReplicatorSv1SetAccount(args *engine.AccountWithArgDispatcher, rpl *string) (err error) { if args == nil { args = &engine.AccountWithArgDispatcher{} @@ -1179,6 +1201,28 @@ func (dS *DispatcherService) ReplicatorSv1RemoveDestination(args *utils.StringWi utils.ReplicatorSv1RemoveDestination, args, rpl) } +func (dS *DispatcherService) ReplicatorSv1SetLoadIDs(args *utils.LoadIDsWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.LoadIDsWithArgDispatcher{} + } + 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.ReplicatorSv1SetLoadIDs, 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.ReplicatorSv1SetLoadIDs, args, rpl) +} + func (dS *DispatcherService) ReplicatorSv1RemoveAccount(args *utils.StringWithApiKey, rpl *string) (err error) { if args == nil { args = &utils.StringWithApiKey{} @@ -1354,3 +1398,267 @@ func (dS *DispatcherService) ReplicatorSv1RemoveResourceProfile(args *utils.Tena return dS.Dispatch(&utils.CGREvent{Tenant: args.Tenant}, utils.MetaReplicator, routeID, utils.ReplicatorSv1RemoveResourceProfile, args, rpl) } + +func (dS *DispatcherService) ReplicatorSv1RemoveActionTriggers(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveActionTriggers, 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.ReplicatorSv1RemoveActionTriggers, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveSharedGroup(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveSharedGroup, 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.ReplicatorSv1RemoveSharedGroup, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveActions(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveActions, 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.ReplicatorSv1RemoveActions, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveActionPlan(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveActionPlan, 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.ReplicatorSv1RemoveActionPlan, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemAccountActionPlans(args *engine.RemAccountActionPlansArgsWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &engine.RemAccountActionPlansArgsWithArgDispatcher{} + } + 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.ReplicatorSv1RemAccountActionPlans, 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.ReplicatorSv1RemAccountActionPlans, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveRatingPlan(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveRatingPlan, 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.ReplicatorSv1RemoveRatingPlan, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveRatingProfile(args *utils.StringWithApiKey, rpl *string) (err error) { + if args == nil { + args = &utils.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.ReplicatorSv1RemoveRatingProfile, 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.ReplicatorSv1RemoveRatingProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveSupplierProfile(args *utils.TenantIDWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.TenantIDWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1RemoveSupplierProfile, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1RemoveSupplierProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveAttributeProfile(args *utils.TenantIDWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.TenantIDWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1RemoveAttributeProfile, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1RemoveAttributeProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveChargerProfile(args *utils.TenantIDWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.TenantIDWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1RemoveChargerProfile, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1RemoveChargerProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveDispatcherProfile(args *utils.TenantIDWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.TenantIDWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1RemoveDispatcherProfile, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1RemoveDispatcherProfile, args, rpl) +} + +func (dS *DispatcherService) ReplicatorSv1RemoveDispatcherHost(args *utils.TenantIDWithArgDispatcher, rpl *string) (err error) { + if args == nil { + args = &utils.TenantIDWithArgDispatcher{} + } + args.Tenant = utils.FirstNonEmpty(args.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.ReplicatorSv1RemoveDispatcherHost, args.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.Tenant}, utils.MetaReplicator, routeID, + utils.ReplicatorSv1RemoveDispatcherHost, args, rpl) +} diff --git a/engine/datamanager.go b/engine/datamanager.go index 5b7eaa1c4..4ef8d605c 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -345,10 +345,17 @@ func (dm *DataManager) SetDestination(dest *Destination, transactionID string) ( if err = dm.dataDB.SetDestinationDrv(dest, transactionID); err != nil { return } - if config.CgrConfig().DataDbCfg().Items[utils.MetaDestinations].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaDestinations]; itm.Replicate { var reply string if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1SetDestination, dest, &reply); err != nil { + utils.ReplicatorSv1SetDestination, + &DestinationWithArgDispatcher{ + Destination: dest, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply); err != nil { err = utils.CastRPCErr(err) return } @@ -1307,10 +1314,17 @@ func (dm *DataManager) RemoveActionTriggers(id, transactionID string) (err error } Cache.Remove(utils.CacheActionTriggers, id, cacheCommit(transactionID), transactionID) - if config.CgrConfig().DataDbCfg().Items[utils.MetaActionTriggers].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaActionTriggers]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveActionTriggers, id, &reply) + utils.ReplicatorSv1RemoveActionTriggers, + &utils.StringWithApiKey{ + Arg: id, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1420,10 +1434,17 @@ func (dm *DataManager) RemoveSharedGroup(id, transactionID string) (err error) { } Cache.Remove(utils.CacheSharedGroups, id, cacheCommit(transactionID), transactionID) - if config.CgrConfig().DataDbCfg().Items[utils.MetaSharedGroups].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSharedGroups]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveSharedGroup, id, &reply) + utils.ReplicatorSv1RemoveSharedGroup, + &utils.StringWithApiKey{ + Arg: id, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1507,10 +1528,16 @@ func (dm *DataManager) RemoveActions(key, transactionID string) (err error) { } Cache.Remove(utils.CacheActions, key, cacheCommit(transactionID), transactionID) - if config.CgrConfig().DataDbCfg().Items[utils.MetaActions].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaActions]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveActions, key, &reply) + utils.ReplicatorSv1RemoveActions, &utils.StringWithApiKey{ + Arg: key, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1595,10 +1622,17 @@ func (dm *DataManager) RemoveActionPlan(key string, transactionID string) (err e if err = dm.dataDB.RemoveActionPlanDrv(key, transactionID); err != nil { return } - if config.CgrConfig().DataDbCfg().Items[utils.MetaActionPlans].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaActionPlans]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveActionPlan, key, &reply) + utils.ReplicatorSv1RemoveActionPlan, + &utils.StringWithApiKey{ + Arg: key, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1658,20 +1692,29 @@ func (dm *DataManager) SetAccountActionPlans(acntID string, aPlIDs []string, ove return } -type RemAccountActionPlansArgs struct { +// RemAccountActionPlansArgsWithArgDispatcher is used in replicatorV1 for dispatcher +type RemAccountActionPlansArgsWithArgDispatcher struct { AcntID string ApIDs []string + utils.TenantArg + *utils.ArgDispatcher } func (dm *DataManager) RemAccountActionPlans(acntID string, apIDs []string) (err error) { if err = dm.dataDB.RemAccountActionPlansDrv(acntID, apIDs); err != nil { return } - if config.CgrConfig().DataDbCfg().Items[utils.MetaAccountActionPlans].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaAccountActionPlans]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, utils.ReplicatorSv1RemAccountActionPlans, - &RemAccountActionPlansArgs{AcntID: acntID, ApIDs: apIDs}, &reply) + &RemAccountActionPlansArgsWithArgDispatcher{ + AcntID: acntID, ApIDs: apIDs, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1746,10 +1789,17 @@ func (dm *DataManager) RemoveRatingPlan(key string, transactionID string) (err e } Cache.Remove(utils.CacheRatingPlans, key, cacheCommit(transactionID), transactionID) - if config.CgrConfig().DataDbCfg().Items[utils.MetaRatingPlans].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRatingPlans]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveRatingPlan, key, &reply) + utils.ReplicatorSv1RemoveRatingPlan, + &utils.StringWithApiKey{ + Arg: key, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -1830,10 +1880,17 @@ func (dm *DataManager) RemoveRatingProfile(key string, } Cache.Remove(utils.CacheRatingProfiles, key, cacheCommit(transactionID), transactionID) - if config.CgrConfig().DataDbCfg().Items[utils.MetaRatingProfiles].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaRatingProfiles]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveRatingProfile, key, &reply) + utils.ReplicatorSv1RemoveRatingProfile, + &utils.StringWithApiKey{ + Arg: key, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2069,11 +2126,16 @@ func (dm *DataManager) RemoveSupplierProfile(tenant, id, transactionID string, w return } } - if config.CgrConfig().DataDbCfg().Items[utils.MetaSupplierProfiles].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaSupplierProfiles]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, utils.ReplicatorSv1RemoveSupplierProfile, - &utils.TenantID{Tenant: tenant, ID: id}, &reply) + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: tenant, ID: id}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2210,10 +2272,16 @@ func (dm *DataManager) RemoveAttributeProfile(tenant, id string, transactionID s } } } - if config.CgrConfig().DataDbCfg().Items[utils.MetaAttributeProfiles].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaAttributeProfiles]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveAttributeProfile, &utils.TenantID{Tenant: tenant, ID: id}, &reply) + utils.ReplicatorSv1RemoveAttributeProfile, + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: tenant, ID: id}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2323,10 +2391,16 @@ func (dm *DataManager) RemoveChargerProfile(tenant, id string, return } } - if config.CgrConfig().DataDbCfg().Items[utils.MetaChargerProfiles].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaChargerProfiles]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveChargerProfile, &utils.TenantID{Tenant: tenant, ID: id}, &reply) + utils.ReplicatorSv1RemoveChargerProfile, + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: tenant, ID: id}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2445,10 +2519,16 @@ func (dm *DataManager) RemoveDispatcherProfile(tenant, id string, } } } - if config.CgrConfig().DataDbCfg().Items[utils.MetaDispatcherProfiles].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaDispatcherProfiles]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveDispatcherProfile, &utils.TenantID{Tenant: tenant, ID: id}, &reply) + utils.ReplicatorSv1RemoveDispatcherProfile, + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: tenant, ID: id}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2538,10 +2618,16 @@ func (dm *DataManager) RemoveDispatcherHost(tenant, id string, if oldDpp == nil { return utils.ErrNotFound } - if config.CgrConfig().DataDbCfg().Items[utils.MetaDispatcherHosts].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaDispatcherHosts]; itm.Replicate { var reply string dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1RemoveDispatcherHost, &utils.TenantID{Tenant: tenant, ID: id}, &reply) + utils.ReplicatorSv1RemoveDispatcherHost, + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: tenant, ID: id}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply) } return } @@ -2588,10 +2674,17 @@ func (dm *DataManager) SetLoadIDs(loadIDs map[string]int64) (err error) { if err = dm.DataDB().SetLoadIDsDrv(loadIDs); err != nil { return } - if config.CgrConfig().DataDbCfg().Items[utils.MetaLoadIDs].Replicate { + if itm := config.CgrConfig().DataDbCfg().Items[utils.MetaLoadIDs]; itm.Replicate { var reply string if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RplConns, nil, - utils.ReplicatorSv1SetLoadIDs, loadIDs, &reply); err != nil { + utils.ReplicatorSv1SetLoadIDs, + &utils.LoadIDsWithArgDispatcher{ + LoadIDs: loadIDs, + TenantArg: utils.TenantArg{Tenant: config.CgrConfig().GeneralCfg().DefaultTenant}, + ArgDispatcher: &utils.ArgDispatcher{ + APIKey: utils.StringPointer(itm.APIKey), + RouteID: utils.StringPointer(itm.RouteID), + }}, &reply); err != nil { err = utils.CastRPCErr(err) return } diff --git a/utils/coreutils.go b/utils/coreutils.go index 618a064ce..45fef39aa 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -936,3 +936,9 @@ type SetFilterIndexesArgWithArgDispatcher struct { TenantArg *ArgDispatcher } + +type LoadIDsWithArgDispatcher struct { + LoadIDs map[string]int64 + TenantArg + *ArgDispatcher +}