Updated parseFlags for agents

This commit is contained in:
Trial97
2019-07-15 12:58:46 +03:00
committed by Dan Christian Bogos
parent f025f1b002
commit 05cdc494e7
5 changed files with 131 additions and 300 deletions

View File

@@ -285,42 +285,7 @@ func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs)
utils.AsteriskAgent))
return
}
for _, subsystem := range strings.Split(smaEv.Subsystems(), utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.GetMaxUsage = true
case subsystem == utils.MetaResources:
args.AuthorizeResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(smaEv.Subsystems())
return
}
@@ -335,35 +300,7 @@ func (smaEv *SMAsteriskEvent) V1InitSessionArgs(cgrEvDisp utils.CGREventWithArgD
utils.AsteriskAgent, utils.ToJSON(cgrEvDisp.CGREvent), utils.CGRFlags))
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.InitSession = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEvDisp.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -378,28 +315,6 @@ func (smaEv *SMAsteriskEvent) V1TerminateSessionArgs(cgrEvDisp utils.CGREventWit
utils.AsteriskAgent, utils.ToJSON(cgrEvDisp.CGREvent), utils.CGRFlags))
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.TerminateSession = true
case subsystem == utils.MetaResources:
args.ReleaseResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEvDisp.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}

View File

@@ -419,42 +419,7 @@ func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) {
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.GetMaxUsage = true
case subsystem == utils.MetaResources:
args.AuthorizeResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -472,35 +437,7 @@ func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) {
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.InitSession = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -518,29 +455,7 @@ func (fsev FSEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionA
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.TerminateSession = true
case subsystem == utils.MetaResources:
args.ReleaseResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}

View File

@@ -212,42 +212,7 @@ func (kev KamEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) {
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.GetMaxUsage = true
case subsystem == utils.MetaResources:
args.AuthorizeResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
tdIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &tdIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -306,35 +271,7 @@ func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) {
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.InitSession = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -351,42 +288,7 @@ func (kev KamEvent) V1ProcessEventArgs() (args *sessions.V1ProcessEventArgs) {
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.Debit = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
if attrWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(attrWithIDs) > 1 {
attrIDs := strings.Split(attrWithIDs[1], utils.INFIELD_SEP)
args.AttributeIDs = &attrIDs
}
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
tdIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &tdIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}
@@ -493,29 +395,7 @@ func (kev KamEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionA
if !has {
return
}
for _, subsystem := range strings.Split(subsystems, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.TerminateSession = true
case subsystem == utils.MetaResources:
args.ReleaseResources = true
case subsystem == utils.MetaDispatchers:
cgrArgs := cgrEv.ConsumeArgs(true, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
if thdWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(thdWithIDs) > 1 {
thIDs := strings.Split(thdWithIDs[1], utils.INFIELD_SEP)
args.ThresholdIDs = &thIDs
}
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
if stsWithIDs := strings.Split(subsystem, utils.InInFieldSep); len(stsWithIDs) > 1 {
stsIDs := strings.Split(stsWithIDs[1], utils.INFIELD_SEP)
args.StatIDs = &stsIDs
}
}
}
args.ParseFlags(subsystems)
return
}

View File

@@ -243,6 +243,7 @@ func isHidden(fileName string) bool {
}
return strings.HasPrefix(fileName, ".")
}
func loadConfigFromFolder(cfg *CGRConfig, cfgDir string) (*CGRConfig, error) {
jsonFilesFound := false
err := filepath.Walk(cfgDir, func(path string, info os.FileInfo, err error) error {

View File

@@ -1709,6 +1709,15 @@ func NewV1AuthorizeArgs(attrs bool, attributeIDs []string,
return
}
func getFlagIDs(flag string) *[]string {
flagWithIDs := strings.Split(flag, utils.InInFieldSep)
if len(flagWithIDs) <= 1 {
return nil
}
IDs := strings.Split(flagWithIDs[1], utils.INFIELD_SEP)
return &IDs
}
// V1AuthorizeArgs are options available in auth request
type V1AuthorizeArgs struct {
GetAttributes bool
@@ -1727,6 +1736,38 @@ type V1AuthorizeArgs struct {
*utils.ArgDispatcher
}
func (args *V1AuthorizeArgs) ParseFlags(flags string) {
dispatcherFlag := false
for _, subsystem := range strings.Split(flags, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.GetMaxUsage = true
case subsystem == utils.MetaResources:
args.AuthorizeResources = true
case subsystem == utils.MetaDispatchers:
dispatcherFlag = true
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.HasPrefix(subsystem, utils.MetaAttributes):
args.GetAttributes = true
args.AttributeIDs = getFlagIDs(subsystem)
case strings.HasPrefix(subsystem, utils.MetaThresholds):
args.ProcessThresholds = true
args.ThresholdIDs = getFlagIDs(subsystem)
case strings.HasPrefix(subsystem, utils.MetaStats):
args.ProcessStats = true
args.StatIDs = getFlagIDs(subsystem)
}
}
cgrArgs := args.CGREvent.ConsumeArgs(dispatcherFlag, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
}
// V1AuthorizeReply are options available in auth reply
type V1AuthorizeReply struct {
Attributes *engine.AttrSProcessEventReply
@@ -2010,6 +2051,31 @@ type V1InitSessionArgs struct {
*utils.ArgDispatcher
}
func (args *V1InitSessionArgs) ParseFlags(flags string) {
dispatcherFlag := false
for _, subsystem := range strings.Split(flags, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.InitSession = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
dispatcherFlag = true
case strings.HasPrefix(subsystem, utils.MetaAttributes):
args.GetAttributes = true
args.AttributeIDs = getFlagIDs(subsystem)
case strings.HasPrefix(subsystem, utils.MetaThresholds):
args.ProcessThresholds = true
args.ThresholdIDs = getFlagIDs(subsystem)
case strings.HasPrefix(subsystem, utils.MetaStats):
args.ProcessStats = true
args.StatIDs = getFlagIDs(subsystem)
}
}
cgrArgs := args.CGREvent.ConsumeArgs(dispatcherFlag, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
}
// V1InitSessionReply are options for initialization reply
type V1InitSessionReply struct {
Attributes *engine.AttrSProcessEventReply
@@ -2416,6 +2482,28 @@ type V1TerminateSessionArgs struct {
*utils.ArgDispatcher
}
func (args *V1TerminateSessionArgs) ParseFlags(flags string) {
dispatcherFlag := false
for _, subsystem := range strings.Split(flags, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.TerminateSession = true
case subsystem == utils.MetaResources:
args.ReleaseResources = true
case subsystem == utils.MetaDispatchers:
dispatcherFlag = true
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
args.ThresholdIDs = getFlagIDs(subsystem)
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
args.StatIDs = getFlagIDs(subsystem)
}
}
cgrArgs := args.CGREvent.ConsumeArgs(dispatcherFlag, false)
args.ArgDispatcher = cgrArgs.ArgDispatcher
}
// BiRPCV1TerminateSession will stop debit loops as well as release any used resources
func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.RpcClientConnection,
args *V1TerminateSessionArgs, rply *string) (err error) {
@@ -2693,6 +2781,38 @@ type V1ProcessEventArgs struct {
*utils.ArgDispatcher
}
func (args V1ProcessEventArgs) ParseFlags(flags string) {
dispatcherFlag := false
for _, subsystem := range strings.Split(flags, utils.FIELDS_SEP) {
switch {
case subsystem == utils.MetaAccounts:
args.Debit = true
case subsystem == utils.MetaResources:
args.AllocateResources = true
case subsystem == utils.MetaDispatchers:
dispatcherFlag = true
case subsystem == utils.MetaSuppliers:
args.GetSuppliers = true
case subsystem == utils.MetaSuppliersIgnoreErrors:
args.SuppliersIgnoreErrors = true
case subsystem == utils.MetaSuppliersEventCost:
args.SuppliersMaxCost = utils.MetaEventCost
case strings.Index(subsystem, utils.MetaAttributes) != -1:
args.GetAttributes = true
args.AttributeIDs = getFlagIDs(subsystem)
case strings.Index(subsystem, utils.MetaThresholds) != -1:
args.ProcessThresholds = true
args.ThresholdIDs = getFlagIDs(subsystem)
case strings.Index(subsystem, utils.MetaStats) != -1:
args.ProcessStats = true
args.StatIDs = getFlagIDs(subsystem)
}
}
cgrArgs := args.CGREvent.ConsumeArgs(dispatcherFlag, true)
args.ArgDispatcher = cgrArgs.ArgDispatcher
args.Paginator = *cgrArgs.SupplierPaginator
}
// V1ProcessEventReply is the reply for the ProcessEvent API
type V1ProcessEventReply struct {
MaxUsage *time.Duration