Add ProcessRuns and ProfileRuns to opts struct in attributes

This commit is contained in:
ionutboangiu
2021-09-09 10:30:00 +03:00
committed by Dan Christian Bogos
parent d4f264c536
commit 1d168b196e
13 changed files with 151 additions and 111 deletions

View File

@@ -154,7 +154,7 @@ func testCfgGetConfig(t *testing.T) {
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 1,
},
},
}
@@ -190,7 +190,7 @@ func testCfgSetGetConfig(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: 2,
utils.MetaProcessRunsCfg: 2,
},
},
},
@@ -213,7 +213,7 @@ func testCfgSetGetConfig(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
utils.MetaProcessRunsCfg: 2,
},
},
}
@@ -430,7 +430,7 @@ func testCfgGetConfigStore(t *testing.T) {
Prefix_indexed_fields: nil,
Suffix_indexed_fields: nil,
Nested_fields: nil,
Opts: make(map[string]interface{}),
Opts: &config.AttributesOptsJson{},
}
if !reflect.DeepEqual(attr, expected) {
t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ToJSON(expected), utils.ToJSON(attr))
@@ -455,7 +455,7 @@ func testCfgSetGetConfigStore(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: 2,
utils.MetaProcessRunsCfg: 2,
},
},
},
@@ -478,7 +478,7 @@ func testCfgSetGetConfigStore(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: 2,
utils.MetaProcessRunsCfg: 2,
},
},
}
@@ -512,8 +512,8 @@ func testCfgGetConfigStoreAgain(t *testing.T) {
Prefix_indexed_fields: nil,
Suffix_indexed_fields: nil,
Nested_fields: nil,
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
Opts: &config.AttributesOptsJson{
ProcessRuns: utils.IntPointer(2),
},
}
if !reflect.DeepEqual(attr, expected) {
@@ -532,8 +532,8 @@ func testCfgMdfSectConfigStore(t *testing.T) {
Prefix_indexed_fields: nil,
Suffix_indexed_fields: nil,
Nested_fields: nil,
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
Opts: &config.AttributesOptsJson{
ProcessRuns: utils.IntPointer(2),
},
}
err := connDb.SetSection(context.Background(), "attributes", attrSect)
@@ -572,7 +572,7 @@ func testCfgGetAfterReloadStore(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: 2,
utils.MetaProcessRunsCfg: 2,
},
},
}

View File

@@ -74,9 +74,9 @@ func TestConfigSetGetConfig(t *testing.T) {
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 1,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
},
}
if err != nil {
@@ -110,7 +110,7 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: 2,
utils.MetaProcessRunsCfg: 2,
},
},
},
@@ -141,16 +141,17 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 2,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
},
}
if errGet != nil {
t.Errorf("Expected <%+v>, \nReceived <%+v>", nil, errGet)
}
if !reflect.DeepEqual(expectedGet, replyGet) {
t.Errorf("Expected <%+v>, \nReceived <%+v>", expectedGet, replyGet)
t.Errorf("Expected <%+v>, \nReceived <%+v>",
utils.ToJSON(expectedGet), utils.ToJSON(replyGet))
}
argsRld := &config.ReloadArgs{
DryRun: true,
@@ -182,16 +183,16 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 2,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
},
}
if errGetRld != nil {
t.Errorf("Expected <%+v>, \nReceived <%+v>", nil, errGetRld)
}
if !reflect.DeepEqual(expectedGetRld, replyGetRld) {
t.Errorf("Expected <%+v>, \nReceived <%+v>", expectedGetRld, replyGetRld)
t.Errorf("Expected <%+v>, \nReceived <%+v>", utils.ToJSON(expectedGetRld), utils.ToJSON(replyGetRld))
}
}
@@ -227,7 +228,7 @@ func TestConfigGetSetConfigFromJSONErr(t *testing.T) {
}
var replyGet string
errGet := rlcCfg.GetConfigAsJSON(context.Background(), argsGet, &replyGet)
expectedGet := `{"attributes":{"accounts_conns":["*localhost"],"enabled":true,"indexed_selects":true,"nested_fields":false,"opts":{"*processRuns":1},"prefix_indexed_fields":[],"profile_runs":0,"resources_conns":["*localhost"],"stats_conns":["*localhost"],"suffix_indexed_fields":[]}}`
expectedGet := `{"attributes":{"accounts_conns":["*localhost"],"enabled":true,"indexed_selects":true,"nested_fields":false,"opts":{"*processRuns":2},"prefix_indexed_fields":[],"profile_runs":0,"resources_conns":["*localhost"],"stats_conns":["*localhost"],"suffix_indexed_fields":[]}}`
if err != nil {
t.Errorf("Expected <%+v>, \nReceived <%+v>", nil, errGet)
}

View File

@@ -20,6 +20,11 @@ package config
import "github.com/cgrates/cgrates/utils"
type AttributesOpts struct {
ProcessRuns int
ProfileRuns int
}
// AttributeSCfg is the configuration of attribute service
type AttributeSCfg struct {
Enabled bool
@@ -31,8 +36,21 @@ type AttributeSCfg struct {
PrefixIndexedFields *[]string
SuffixIndexedFields *[]string
NestedFields bool
ProfileRuns int
DefaultOpts map[string]interface{}
Opts *AttributesOpts
}
func (attrOpts *AttributesOpts) loadFromJSONCfg(jsnCfg *AttributesOptsJson) (err error) {
if jsnCfg == nil {
return nil
}
if jsnCfg.ProcessRuns != nil {
attrOpts.ProcessRuns = *jsnCfg.ProcessRuns
}
if jsnCfg.ProfileRuns != nil {
attrOpts.ProfileRuns = *jsnCfg.ProfileRuns
}
return nil
}
func (alS *AttributeSCfg) loadFromJSONCfg(jsnCfg *AttributeSJsonCfg) (err error) {
@@ -63,26 +81,26 @@ func (alS *AttributeSCfg) loadFromJSONCfg(jsnCfg *AttributeSJsonCfg) (err error)
if jsnCfg.Suffix_indexed_fields != nil {
alS.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields))
}
if jsnCfg.Profile_runs != nil {
alS.ProfileRuns = *jsnCfg.Profile_runs
}
if jsnCfg.Nested_fields != nil {
alS.NestedFields = *jsnCfg.Nested_fields
}
if jsnCfg.Opts != nil {
alS.DefaultOpts = jsnCfg.Opts
alS.Opts.loadFromJSONCfg(jsnCfg.Opts)
}
return
}
// AsMapInterface returns the config as a map[string]interface{}
func (alS *AttributeSCfg) AsMapInterface() (initialMP map[string]interface{}) {
opts := map[string]interface{}{
utils.MetaProcessRunsCfg: alS.Opts.ProcessRuns,
utils.MetaProfileRunsCfg: alS.Opts.ProfileRuns,
}
initialMP = map[string]interface{}{
utils.EnabledCfg: alS.Enabled,
utils.IndexedSelectsCfg: alS.IndexedSelects,
utils.ProfileRunsCfg: alS.ProfileRuns,
utils.NestedFieldsCfg: alS.NestedFields,
utils.OptsCfg: alS.DefaultOpts,
utils.OptsCfg: opts,
}
if alS.StringIndexedFields != nil {
initialMP[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*alS.StringIndexedFields)
@@ -112,8 +130,7 @@ func (alS AttributeSCfg) Clone() (cln *AttributeSCfg) {
Enabled: alS.Enabled,
IndexedSelects: alS.IndexedSelects,
NestedFields: alS.NestedFields,
DefaultOpts: alS.DefaultOpts,
ProfileRuns: alS.ProfileRuns,
Opts: alS.Opts,
}
if alS.ResourceSConns != nil {
cln.ResourceSConns = utils.CloneStringSlice(alS.ResourceSConns)
@@ -137,6 +154,11 @@ func (alS AttributeSCfg) Clone() (cln *AttributeSCfg) {
return
}
type AttributesOptsJson struct {
ProcessRuns *int `json:"*processRuns"`
ProfileRuns *int `json:"*profileRuns"`
}
// Attribute service config section
type AttributeSJsonCfg struct {
Enabled *bool
@@ -148,8 +170,20 @@ type AttributeSJsonCfg struct {
Prefix_indexed_fields *[]string
Suffix_indexed_fields *[]string
Nested_fields *bool // applies when indexed fields is not defined
Profile_runs *int
Opts map[string]interface{}
Opts *AttributesOptsJson
}
func diffAttributesOptsJsonCfg(d *AttributesOptsJson, v1, v2 *AttributesOpts) *AttributesOptsJson {
if d == nil {
d = new(AttributesOptsJson)
}
if v1.ProcessRuns != v2.ProcessRuns {
d.ProcessRuns = utils.IntPointer(v2.ProcessRuns)
}
if v1.ProfileRuns != v2.ProfileRuns {
d.ProfileRuns = utils.IntPointer(v2.ProfileRuns)
}
return d
}
func diffAttributeSJsonCfg(d *AttributeSJsonCfg, v1, v2 *AttributeSCfg) *AttributeSJsonCfg {
@@ -177,7 +211,7 @@ func diffAttributeSJsonCfg(d *AttributeSJsonCfg, v1, v2 *AttributeSCfg) *Attribu
if v1.NestedFields != v2.NestedFields {
d.Nested_fields = utils.BoolPointer(v2.NestedFields)
}
d.Opts = diffMap(d.Opts, v1.DefaultOpts, v2.DefaultOpts)
d.Opts = diffAttributesOptsJsonCfg(d.Opts, v1.Opts, v2.Opts)
return d
}

View File

@@ -46,8 +46,8 @@ func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
Opts: &AttributesOpts{
ProcessRuns: 1,
},
}
jsnCfg := NewDefaultCGRConfig()
@@ -79,12 +79,12 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) {
utils.AccountSConnsCfg: []string{utils.MetaInternal},
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.ProfileRunsCfg: 0,
utils.IndexedSelectsCfg: true,
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{},
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(3),
utils.MetaProcessRunsCfg: 3,
utils.MetaProfileRunsCfg: 0,
},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
@@ -115,9 +115,9 @@ func TestAttributeSCfgAsMapInterface2(t *testing.T) {
utils.SuffixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NestedFieldsCfg: true,
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(7),
utils.MetaProcessRunsCfg: 7,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -142,9 +142,9 @@ func TestAttributeSCfgAsMapInterface3(t *testing.T) {
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 1,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
}
if conv, err := NewCGRConfigFromJSONStringWithDefaults(myJSONStr); err != nil {
t.Error(err)
@@ -202,8 +202,8 @@ func TestDiffAttributeSJsonCfg(t *testing.T) {
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: true,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
Opts: &AttributesOpts{
ProcessRuns: 1,
},
}
@@ -217,8 +217,8 @@ func TestDiffAttributeSJsonCfg(t *testing.T) {
PrefixIndexedFields: nil,
SuffixIndexedFields: nil,
NestedFields: false,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
Opts: &AttributesOpts{
ProcessRuns: 1,
},
}
@@ -232,7 +232,7 @@ func TestDiffAttributeSJsonCfg(t *testing.T) {
Prefix_indexed_fields: nil,
Suffix_indexed_fields: nil,
Nested_fields: utils.BoolPointer(false),
Opts: map[string]interface{}{},
Opts: &AttributesOptsJson{},
}
rcv := diffAttributeSJsonCfg(d, v1, v2)
@@ -242,7 +242,7 @@ func TestDiffAttributeSJsonCfg(t *testing.T) {
v2_2 := v1
expected2 := &AttributeSJsonCfg{
Opts: map[string]interface{}{},
Opts: &AttributesOptsJson{},
}
rcv = diffAttributeSJsonCfg(d, v1, v2_2)
if !reflect.DeepEqual(rcv, expected2) {

View File

@@ -142,6 +142,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) {
cfg.radiusAgentCfg.ClientSecrets = make(map[string]string)
cfg.dnsAgentCfg = new(DNSAgentCfg)
cfg.attributeSCfg = new(AttributeSCfg)
cfg.AttributeSCfg().Opts = &AttributesOpts{}
cfg.chargerSCfg = new(ChargerSCfg)
cfg.resourceSCfg = new(ResourceSConfig)
cfg.statsCfg = new(StatSCfg)

View File

@@ -155,8 +155,8 @@ func testCGRConfigReloadAttributeS(t *testing.T) {
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
IndexedSelects: true,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: 1.,
Opts: &AttributesOpts{
ProcessRuns: 1.,
},
}
if !reflect.DeepEqual(expAttr, cfg.AttributeSCfg()) {
@@ -193,8 +193,8 @@ func testCGRConfigReloadAttributeSWithDB(t *testing.T) {
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
IndexedSelects: true,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: 1.,
Opts: &AttributesOpts{
ProcessRuns: 1.,
},
}
if !reflect.DeepEqual(expAttr, cfg.AttributeSCfg()) {

View File

@@ -753,10 +753,10 @@ func TestDfAttributeServJsonCfg(t *testing.T) {
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
Opts: &AttributesOptsJson{
ProcessRuns: utils.IntPointer(1),
ProfileRuns: utils.IntPointer(0),
},
Profile_runs: utils.IntPointer(0),
}
dfCgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(CGRATES_CFG_JSON))
if err != nil {

View File

@@ -1849,8 +1849,8 @@ func TestAttributeSConfig(t *testing.T) {
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
Opts: &AttributesOpts{
ProcessRuns: 1,
},
}
cgrConfig := NewDefaultCGRConfig()
@@ -4157,9 +4157,9 @@ func TestV1GetConfigAttribute(t *testing.T) {
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.OptsCfg: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(1),
utils.MetaProcessRunsCfg: 1,
utils.MetaProfileRunsCfg: 0,
},
utils.ProfileRunsCfg: 0,
},
}
cfgCgr := NewDefaultCGRConfig()
@@ -5939,8 +5939,8 @@ func TestSetCfgInDb(t *testing.T) {
StringIndexedFields: &[]string{"field1"},
SuffixIndexedFields: &[]string{"field1"},
PrefixIndexedFields: &[]string{"field1"},
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
Opts: &AttributesOpts{
ProcessRuns: 2,
},
NestedFields: true,
}
@@ -5957,8 +5957,8 @@ func TestSetCfgInDb(t *testing.T) {
String_indexed_fields: &[]string{"field2"},
Suffix_indexed_fields: &[]string{"field2"},
Prefix_indexed_fields: &[]string{"field2"},
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(3),
Opts: &AttributesOptsJson{
ProcessRuns: utils.IntPointer(3),
},
Nested_fields: utils.BoolPointer(false),
},
@@ -5973,8 +5973,8 @@ func TestSetCfgInDb(t *testing.T) {
String_indexed_fields: &[]string{"field2"},
Suffix_indexed_fields: &[]string{"field2"},
Prefix_indexed_fields: &[]string{"field2"},
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(3),
Opts: &AttributesOptsJson{
ProcessRuns: utils.IntPointer(3),
},
Nested_fields: utils.BoolPointer(false),
}
@@ -5988,7 +5988,7 @@ func TestSetCfgInDb(t *testing.T) {
t.Error(err)
}
if !reflect.DeepEqual(expected, rcv) {
t.Errorf("Expected %v \n but received \n %v", expected, rcv)
t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(expected), utils.ToJSON(rcv))
}
}
@@ -6005,8 +6005,8 @@ func TestSetNilCfgInDb(t *testing.T) {
StringIndexedFields: &[]string{"field1"},
SuffixIndexedFields: &[]string{"field1"},
PrefixIndexedFields: &[]string{"field1"},
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
Opts: &AttributesOpts{
ProcessRuns: 2,
},
NestedFields: true,
}
@@ -6019,7 +6019,7 @@ func TestSetNilCfgInDb(t *testing.T) {
},
}
expected := &AttributeSJsonCfg{
Opts: make(map[string]interface{}),
Opts: &AttributesOptsJson{},
}
var reply string
if err := cfg.V1SetConfig(context.Background(), args, &reply); err != nil {
@@ -6048,8 +6048,8 @@ func TestReloadCfgInDb(t *testing.T) {
StringIndexedFields: &[]string{"field1"},
SuffixIndexedFields: &[]string{"field1"},
PrefixIndexedFields: &[]string{"field1"},
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(2),
Opts: &AttributesOpts{
ProcessRuns: 2,
},
NestedFields: true,
}
@@ -6066,8 +6066,8 @@ func TestReloadCfgInDb(t *testing.T) {
String_indexed_fields: &[]string{"field2"},
Suffix_indexed_fields: &[]string{"field2"},
Prefix_indexed_fields: &[]string{"field2"},
Opts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(3),
Opts: &AttributesOptsJson{
ProcessRuns: utils.IntPointer(3),
},
Nested_fields: utils.BoolPointer(false),
}
@@ -6081,8 +6081,8 @@ func TestReloadCfgInDb(t *testing.T) {
StringIndexedFields: &[]string{"field2"},
SuffixIndexedFields: &[]string{"field2"},
PrefixIndexedFields: &[]string{"field2"},
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(3),
Opts: &AttributesOpts{
ProcessRuns: 3,
},
NestedFields: false,
}

View File

@@ -544,10 +544,7 @@ func (cfg *CGRConfig) checkConfigSanity() error {
}
if cfg.attributeSCfg.Enabled {
processRuns, err := utils.IfaceAsTInt64(cfg.attributeSCfg.DefaultOpts[utils.OptsAttributesProcessRuns])
if err != nil {
return fmt.Errorf("<%s> invalid type", utils.AttributeS)
}
processRuns := cfg.attributeSCfg.Opts.ProcessRuns
if processRuns < 1 {
return fmt.Errorf("<%s> processRuns needs to be bigger than 0", utils.AttributeS)
}

View File

@@ -987,8 +987,8 @@ func TestConfigSanityAttributesCfg(t *testing.T) {
cfg.attributeSCfg = &AttributeSCfg{
Enabled: true,
DefaultOpts: map[string]interface{}{
utils.OptsAttributesProcessRuns: float64(0),
Opts: &AttributesOpts{
ProcessRuns: 0,
},
}
expected := "<AttributeS> processRuns needs to be bigger than 0"

View File

@@ -232,6 +232,31 @@ type RouteSJsonCfg struct {
Opts *RoutesOptsJson
}
func diffRoutesOptsJsonCfg(d *RoutesOptsJson, v1, v2 *RoutesOpts) *RoutesOptsJson {
if d == nil {
d = new(RoutesOptsJson)
}
if v1.Context != v2.Context {
d.Context = utils.StringPointer(v2.Context)
}
if v1.Limit != v2.Limit {
d.Limit = v2.Limit
}
if v1.Offset != v2.Offset {
d.Offset = v2.Offset
}
if v1.MaxCost != v2.MaxCost {
d.MaxCost = &v2.MaxCost
}
if v1.IgnoreErrors != v2.IgnoreErrors {
d.IgnoreErrors = utils.BoolPointer(v2.IgnoreErrors)
}
if v1.ProfileCount != v2.ProfileCount {
d.ProfileCount = utils.Float64Pointer(v2.ProfileCount)
}
return d
}
func diffRouteSJsonCfg(d *RouteSJsonCfg, v1, v2 *RouteSCfg) *RouteSJsonCfg {
if d == nil {
d = new(RouteSJsonCfg)
@@ -266,24 +291,6 @@ func diffRouteSJsonCfg(d *RouteSJsonCfg, v1, v2 *RouteSCfg) *RouteSJsonCfg {
if v1.DefaultRatio != v2.DefaultRatio {
d.Default_ratio = utils.IntPointer(v2.DefaultRatio)
}
d.Opts = &RoutesOptsJson{}
if v1.Opts.Context != v2.Opts.Context {
d.Opts.Context = utils.StringPointer(v2.Opts.Context)
}
if v1.Opts.Limit != v2.Opts.Limit {
d.Opts.Limit = v2.Opts.Limit
}
if v1.Opts.Offset != v2.Opts.Offset {
d.Opts.Offset = v2.Opts.Offset
}
if v1.Opts.MaxCost != v2.Opts.MaxCost {
d.Opts.MaxCost = &v2.Opts.MaxCost
}
if v1.Opts.IgnoreErrors != v2.Opts.IgnoreErrors {
d.Opts.IgnoreErrors = utils.BoolPointer(v2.Opts.IgnoreErrors)
}
if v1.Opts.ProfileCount != v2.Opts.ProfileCount {
d.Opts.ProfileCount = utils.Float64Pointer(v2.Opts.ProfileCount)
}
d.Opts = diffRoutesOptsJsonCfg(d.Opts, v1.Opts, v2.Opts)
return d
}

View File

@@ -265,16 +265,14 @@ func (alS *AttributeService) V1ProcessEvent(ctx *context.Context, args *AttrArgs
tnt = alS.cgrcfg.GeneralCfg().DefaultTenant
}
var processRuns int64
processRuns := int64(alS.cgrcfg.AttributeSCfg().Opts.ProcessRuns)
if v, has := args.APIOpts[utils.OptsAttributesProcessRuns]; has {
if processRuns, err = utils.IfaceAsTInt64(v); err != nil {
return
}
} else if processRuns, err = utils.IfaceAsTInt64(alS.cgrcfg.AttributeSCfg().DefaultOpts[utils.OptsAttributesProcessRuns]); err != nil {
return
}
profileRuns := alS.cgrcfg.AttributeSCfg().ProfileRuns
profileRuns := alS.cgrcfg.AttributeSCfg().Opts.ProfileRuns
if opt, has := args.APIOpts[utils.OptsAttributesProfileRuns]; has {
var val int64
if val, err = utils.IfaceAsTInt64(opt); err != nil {
@@ -287,8 +285,8 @@ func (alS *AttributeService) V1ProcessEvent(ctx *context.Context, args *AttrArgs
processedPrfNo := make(map[string]int)
eNV := utils.MapStorage{
utils.MetaVars: utils.MapStorage{
utils.OptsAttributesProcessRuns: 0,
utils.MetaProcessedProfileIDs: processedPrf,
utils.MetaProcessRunsCfg: 0,
utils.MetaProcessedProfileIDs: processedPrf,
},
utils.MetaTenant: tnt,
}
@@ -305,7 +303,7 @@ func (alS *AttributeService) V1ProcessEvent(ctx *context.Context, args *AttrArgs
dynDP := newDynamicDP(ctx, alS.cgrcfg.AttributeSCfg().ResourceSConns,
alS.cgrcfg.AttributeSCfg().StatSConns, alS.cgrcfg.AttributeSCfg().AccountSConns, args.Tenant, eNV)
for i := int64(0); i < processRuns; i++ {
(eNV[utils.MetaVars].(utils.MapStorage))[utils.OptsAttributesProcessRuns] = i + 1
(eNV[utils.MetaVars].(utils.MapStorage))[utils.MetaProcessRunsCfg] = i + 1
var evRply *AttrSProcessEventReply
evRply, err = alS.processEvent(ctx, tnt, args, eNV, dynDP, lastID, processedPrfNo, profileRuns)
if err != nil {

View File

@@ -1869,9 +1869,11 @@ const (
ClientDictionariesCfg = "client_dictionaries"
// AttributeSCfg
IndexedSelectsCfg = "indexed_selects"
ProfileRunsCfg = "profile_runs"
NestedFieldsCfg = "nested_fields"
IndexedSelectsCfg = "indexed_selects"
ProfileRunsCfg = "profile_runs"
NestedFieldsCfg = "nested_fields"
MetaProcessRunsCfg = "*processRuns"
MetaProfileRunsCfg = "*profileRuns"
// ChargerSCfg
StoreIntervalCfg = "store_interval"
@@ -2184,8 +2186,8 @@ const (
OptsContext = "*context"
Subsys = "*subsys"
MetaMethod = "*reqMethod"
OptsAttributesProcessRuns = "*processRuns"
OptsAttributesProfileRuns = "*profileRuns"
OptsAttributesProcessRuns = "*attrProcessRuns"
MetaEventType = "*eventType"
EventType = "EventType"
SchedulerInit = "SchedulerInit"