Added ResourceSv1.GetResource to dispatcher

This commit is contained in:
adragusin
2020-02-17 15:08:53 +02:00
committed by Dan Christian Bogos
parent 9e42e0562e
commit 7ad109d7bc
10 changed files with 45 additions and 12 deletions

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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))

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
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)
}

View File

@@ -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})

View File

@@ -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...)
}

View File

@@ -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("<SupplierS> error: %s getting resource for ID : %s", err.Error(), resID))
continue
}

View File

@@ -1265,6 +1265,7 @@ const (
const (
ResourceSv1AuthorizeResources = "ResourceSv1.AuthorizeResources"
ResourceSv1GetResourcesForEvent = "ResourceSv1.GetResourcesForEvent"
ResourceSv1GetResources = "ResourceSv1.GetResources"
ResourceSv1AllocateResources = "ResourceSv1.AllocateResources"
ResourceSv1ReleaseResources = "ResourceSv1.ReleaseResources"
ResourceSv1Ping = "ResourceSv1.Ping"