mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-20 14:48:43 +05:00
Add ProcessRuns and ProfileRuns to opts struct in attributes
This commit is contained in:
committed by
Dan Christian Bogos
parent
d4f264c536
commit
1d168b196e
@@ -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,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user