diff --git a/apier/v1/api_interfaces.go b/apier/v1/api_interfaces.go
index b0e78ed42..1faa972a6 100644
--- a/apier/v1/api_interfaces.go
+++ b/apier/v1/api_interfaces.go
@@ -51,6 +51,7 @@ type ResourceSv1Interface interface {
AuthorizeResources(args utils.ArgRSv1ResourceUsage, reply *string) error
AllocateResources(args utils.ArgRSv1ResourceUsage, reply *string) error
ReleaseResources(args utils.ArgRSv1ResourceUsage, reply *string) error
+ GetResource(args *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error
Ping(ign *utils.CGREventWithArgDispatcher, reply *string) error
}
@@ -138,6 +139,9 @@ type CDRsV1Interface interface {
ProcessExternalCDR(cdr *engine.ExternalCDRWithArgDispatcher, reply *string) error
RateCDRs(arg *engine.ArgRateCDRs, reply *string) error
StoreSessionCost(attr *engine.AttrCDRSStoreSMCost, reply *string) error
+ GetCDRsCount(args *utils.RPCCDRsFilterWithArgDispatcher, reply *int64) error
+ GetCDRs(args utils.RPCCDRsFilterWithArgDispatcher, reply *[]*engine.CDR) error
+ Ping(ign *utils.CGREventWithArgDispatcher, reply *string) error
}
type ServiceManagerV1Interface interface {
diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go
index b07ca7581..070e9fc1f 100755
--- a/apier/v1/dispatcher.go
+++ b/apier/v1/dispatcher.go
@@ -303,6 +303,10 @@ func (dRs *DispatcherResourceSv1) GetResourcesForEvent(args utils.ArgRSv1Resourc
return dRs.dRs.ResourceSv1GetResourcesForEvent(args, reply)
}
+func (dRs *DispatcherResourceSv1) GetResource(args *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error {
+ return dRs.dRs.ResourceSv1GetResource(args, reply)
+}
+
func (dRs *DispatcherResourceSv1) AuthorizeResources(args utils.ArgRSv1ResourceUsage,
reply *string) error {
return dRs.dRs.ResourceSv1AuthorizeResources(args, reply)
diff --git a/apier/v1/dm_remote_it_test.go b/apier/v1/dm_remote_it_test.go
index f3837e602..5d6e8214c 100644
--- a/apier/v1/dm_remote_it_test.go
+++ b/apier/v1/dm_remote_it_test.go
@@ -308,7 +308,7 @@ func testInternalRemoteITGetResource(t *testing.T) {
Usages: map[string]*engine.ResourceUsage{},
}
if err := internalRPC.Call(utils.ResourceSv1GetResource,
- &utils.TenantID{Tenant: "cgrates.org", ID: "ResGroup1"}, &reply); err != nil {
+ &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "ResGroup1"}}, &reply); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(reply, expectedResources) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedResources), utils.ToJSON(reply))
diff --git a/apier/v1/resourcesv1.go b/apier/v1/resourcesv1.go
index ae7e2bd4b..f1e1f363b 100644
--- a/apier/v1/resourcesv1.go
+++ b/apier/v1/resourcesv1.go
@@ -60,7 +60,7 @@ func (rsv1 *ResourceSv1) ReleaseResources(args utils.ArgRSv1ResourceUsage, reply
}
// GetResource returns a resource configuration
-func (rsv1 *ResourceSv1) GetResource(args *utils.TenantID, reply *engine.Resource) error {
+func (rsv1 *ResourceSv1) GetResource(args *utils.TenantIDWithArgDispatcher, reply *engine.Resource) error {
return rsv1.rls.V1GetResource(args, reply)
}
diff --git a/console/resource.go b/console/resource.go
index 392d6cbee..4e9b1f864 100644
--- a/console/resource.go
+++ b/console/resource.go
@@ -27,7 +27,7 @@ func init() {
c := &CmdGetResource{
name: "resource",
rpcMethod: utils.ResourceSv1GetResource,
- rpcParams: &utils.TenantID{},
+ rpcParams: &utils.TenantIDWithArgDispatcher{},
}
commands[c.Name()] = c
c.CommandExecuter = &CommandExecuter{c}
@@ -37,7 +37,7 @@ func init() {
type CmdGetResource struct {
name string
rpcMethod string
- rpcParams *utils.TenantID
+ rpcParams *utils.TenantIDWithArgDispatcher
*CommandExecuter
}
@@ -51,7 +51,7 @@ func (self *CmdGetResource) RpcMethod() string {
func (self *CmdGetResource) RpcParams(reset bool) interface{} {
if reset || self.rpcParams == nil {
- self.rpcParams = &utils.TenantID{}
+ self.rpcParams = &utils.TenantIDWithArgDispatcher{}
}
return self.rpcParams
}
diff --git a/dispatchers/resources.go b/dispatchers/resources.go
index 57a887809..20551df72 100755
--- a/dispatchers/resources.go
+++ b/dispatchers/resources.go
@@ -19,6 +19,8 @@ along with this program. If not, see
package dispatchers
import (
+ "time"
+
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
)
@@ -140,3 +142,24 @@ func (dS *DispatcherService) ResourceSv1ReleaseResources(args utils.ArgRSv1Resou
return dS.Dispatch(args.CGREvent, utils.MetaResources, routeID,
utils.ResourceSv1ReleaseResources, args, reply)
}
+
+func (dS *DispatcherService) ResourceSv1GetResource(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.ResourceSv1GetResources, 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.MetaResources, routeID, utils.ResourceSv1GetResources, args, reply)
+}
diff --git a/engine/filters.go b/engine/filters.go
index 3eced14df..3dc2b10b9 100644
--- a/engine/filters.go
+++ b/engine/filters.go
@@ -458,8 +458,8 @@ func (fS *FilterS) getFieldNameDataProvider(initialDP config.DataProvider,
return nil, fmt.Errorf("invalid fieldname <%s>", fieldName)
}
var reply *Resource
- if err := fS.connMgr.Call(fS.cfg.FilterSCfg().ResourceSConns, nil, utils.ResourceSv1GetResource,
- &utils.TenantID{Tenant: tenant, ID: splitFldName[1]}, &reply); err != nil {
+ if err := fS.connMgr.Call(fS.cfg.FilterSCfg().ResourceSConns, nil, utils.ResourceSv1GetResource, &utils.TenantIDWithArgDispatcher{
+ TenantID: &utils.TenantID{Tenant: tenant, ID: splitFldName[1]}}, &reply); err != nil {
return nil, err
}
dp = config.NewObjectDP(reply, []string{utils.MetaResources, reply.ID})
@@ -535,7 +535,8 @@ func (fS *FilterS) getFieldValueDataProvider(initialDP config.DataProvider,
}
var reply *Resource
if err := fS.connMgr.Call(fS.cfg.FilterSCfg().ResourceSConns, nil, utils.ResourceSv1GetResource,
- &utils.TenantID{Tenant: tenant, ID: splitFldName[1]}, &reply); err != nil {
+ &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{
+ Tenant: tenant, ID: splitFldName[1]}}, &reply); err != nil {
return nil, err
}
dp = config.NewObjectDP(reply, []string{utils.MetaResources, reply.ID})
diff --git a/engine/resources.go b/engine/resources.go
index c6ffb9d47..1dd17a40c 100644
--- a/engine/resources.go
+++ b/engine/resources.go
@@ -749,7 +749,7 @@ func (rS *ResourceService) V1ReleaseResource(args utils.ArgRSv1ResourceUsage, re
}
// GetResource returns a resource configuration
-func (rS *ResourceService) V1GetResource(arg *utils.TenantID, reply *Resource) error {
+func (rS *ResourceService) V1GetResource(arg *utils.TenantIDWithArgDispatcher, reply *Resource) error {
if missing := utils.MissingStructFields(arg, []string{"Tenant", "ID"}); len(missing) != 0 { //Params missing
return utils.NewErrMandatoryIeMissing(missing...)
}
diff --git a/engine/suppliers.go b/engine/suppliers.go
index 2116a6c2e..3aca525a7 100644
--- a/engine/suppliers.go
+++ b/engine/suppliers.go
@@ -368,9 +368,9 @@ func (spS *SupplierService) resourceUsage(resIDs []string, tenant string) (tUsag
for _, resID := range resIDs {
var res Resource
if err = spS.connMgr.Call(spS.cgrcfg.SupplierSCfg().ResourceSConns, nil, utils.ResourceSv1GetResource,
- &utils.TenantID{Tenant: tenant, ID: resID}, &res); err != nil &&
- err.Error() != utils.ErrNotFound.Error() {
- utils.Logger.Warning(
+ &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{ Tenant: tenant, ID: resID}}, &res);
+ err != nil && err.Error() != utils.ErrNotFound.Error() {
+ utils.Logger.Warning(
fmt.Sprintf(" error: %s getting resource for ID : %s", err.Error(), resID))
continue
}
diff --git a/utils/consts.go b/utils/consts.go
index c95bfc6bc..ec8061304 100755
--- a/utils/consts.go
+++ b/utils/consts.go
@@ -1265,6 +1265,7 @@ const (
const (
ResourceSv1AuthorizeResources = "ResourceSv1.AuthorizeResources"
ResourceSv1GetResourcesForEvent = "ResourceSv1.GetResourcesForEvent"
+ ResourceSv1GetResources = "ResourceSv1.GetResources"
ResourceSv1AllocateResources = "ResourceSv1.AllocateResources"
ResourceSv1ReleaseResources = "ResourceSv1.ReleaseResources"
ResourceSv1Ping = "ResourceSv1.Ping"