diff --git a/config/attributescfg.go b/config/attributescfg.go
index 019c02552..e06339a5f 100644
--- a/config/attributescfg.go
+++ b/config/attributescfg.go
@@ -64,12 +64,25 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error)
}
func (alS *AttributeSCfg) AsMapInterface() map[string]interface{} {
-
+ stringIndexedFields := []string{}
+ if alS.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*alS.StringIndexedFields))
+ for i, item := range *alS.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if alS.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*alS.PrefixIndexedFields))
+ for i, item := range *alS.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: alS.Enabled,
utils.IndexedSelectsCfg: alS.IndexedSelects,
- utils.StringIndexedFieldsCfg: alS.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: alS.PrefixIndexedFields,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.ProcessRunsCfg: alS.ProcessRuns,
utils.NestedFieldsCfg: alS.NestedFields,
}
diff --git a/config/attributescfg_test.go b/config/attributescfg_test.go
index f4137d773..9ac471fd3 100644
--- a/config/attributescfg_test.go
+++ b/config/attributescfg_test.go
@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,31 @@ func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, attscfg)
}
}
+
+func TestAttributeSCfgAsMapInterface(t *testing.T) {
+ var attscfg AttributeSCfg
+ cfgJSONStr := `{
+"attributes": {
+ "enabled": true,
+ "prefix_indexed_fields": ["index1","index2"],
+ "process_runs": 3,
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": true,
+ "prefix_indexed_fields": []string{"index1", "index2"},
+ "process_runs": 3,
+ "indexed_selects": false,
+ "nested_fields": false,
+ "string_indexed_fields": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnAttSCfg, err := jsnCfg.AttributeServJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = attscfg.loadFromJsonCfg(jsnAttSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := attscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/cdrscfg.go b/config/cdrscfg.go
index e84542c3e..e48c10215 100644
--- a/config/cdrscfg.go
+++ b/config/cdrscfg.go
@@ -19,6 +19,8 @@ along with this program. If not, see
package config
import (
+ "strings"
+
"github.com/cgrates/cgrates/utils"
)
@@ -135,17 +137,80 @@ func (cdrscfg *CdrsCfg) AsMapInterface() map[string]interface{} {
for i, item := range cdrscfg.ExtraFields {
extraFields[i] = item.Rules
}
+ onlineCDRExports := make([]string, len(cdrscfg.OnlineCDRExports))
+ for i, item := range cdrscfg.OnlineCDRExports {
+ onlineCDRExports[i] = item
+ }
+
+ chargerSConns := make([]string, len(cdrscfg.ChargerSConns))
+ for i, item := range cdrscfg.ChargerSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)
+ if item == buf {
+ chargerSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaChargers, utils.EmptyString)
+ } else {
+ chargerSConns[i] = item
+ }
+ }
+ RALsConns := make([]string, len(cdrscfg.RaterConns))
+ for i, item := range cdrscfg.RaterConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)
+
+ if item == buf {
+ RALsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString)
+ } else {
+ RALsConns[i] = item
+ }
+ }
+
+ attributeSConns := make([]string, len(cdrscfg.AttributeSConns))
+ for i, item := range cdrscfg.AttributeSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
+ if item == buf {
+ attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
+ } else {
+ attributeSConns[i] = item
+ }
+ }
+
+ thresholdSConns := make([]string, len(cdrscfg.ThresholdSConns))
+ for i, item := range cdrscfg.ThresholdSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
+ if item == buf {
+ thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
+ } else {
+ thresholdSConns[i] = item
+ }
+ }
+ statSConns := make([]string, len(cdrscfg.StatSConns))
+ for i, item := range cdrscfg.StatSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS)
+ if item == buf {
+ statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString)
+ } else {
+ statSConns[i] = item
+ }
+ }
+ schedulerConns := make([]string, len(cdrscfg.SchedulerConns))
+ for i, item := range cdrscfg.SchedulerConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler)
+ if item == buf {
+ schedulerConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaScheduler, utils.EmptyString)
+ } else {
+ schedulerConns[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: cdrscfg.Enabled,
utils.ExtraFieldsCfg: extraFields,
utils.StoreCdrsCfg: cdrscfg.StoreCdrs,
utils.SMCostRetriesCfg: cdrscfg.SMCostRetries,
- utils.ChargerSConnsCfg: cdrscfg.ChargerSConns,
- utils.RALsConnsCfg: cdrscfg.RaterConns,
- utils.AttributeSConnsCfg: cdrscfg.AttributeSConns,
- utils.ThresholdSConnsCfg: cdrscfg.ThresholdSConns,
- utils.StatSConnsCfg: cdrscfg.StatSConns,
- utils.OnlineCDRExportsCfg: cdrscfg.OnlineCDRExports,
+ utils.ChargerSConnsCfg: chargerSConns,
+ utils.RALsConnsCfg: RALsConns,
+ utils.AttributeSConnsCfg: attributeSConns,
+ utils.ThresholdSConnsCfg: thresholdSConns,
+ utils.StatSConnsCfg: statSConns,
+ utils.OnlineCDRExportsCfg: onlineCDRExports,
+ utils.SchedulerConnsCfg: schedulerConns,
}
}
diff --git a/config/cdrscfg_test.go b/config/cdrscfg_test.go
index 30a573cba..ea7e176f7 100644
--- a/config/cdrscfg_test.go
+++ b/config/cdrscfg_test.go
@@ -92,3 +92,82 @@ func TestExtraFieldsinAsMapInterface(t *testing.T) {
t.Errorf("Expecting: '%+v', received: '%+v' ", expectedExtra, rcv[utils.ExtraFieldsCfg])
}
}
+
+func TestCdrsCfgAsMapInterface(t *testing.T) {
+ var cdrscfg CdrsCfg
+ cfgJSONStr := `{
+ "cdrs": {
+ "enabled": false,
+ "extra_fields": [],
+ "store_cdrs": true,
+ "session_cost_retries": 5,
+ "chargers_conns":["*localhost"],
+ "rals_conns": ["*internal"],
+ "attributes_conns": [],
+ "thresholds_conns": [],
+ "stats_conns": [],
+ "online_cdr_exports":[],
+ "scheduler_conns": [],
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "extra_fields": []string{},
+ "store_cdrs": true,
+ "session_cost_retries": 5,
+ "chargers_conns": []string{"*localhost"},
+ "rals_conns": []string{"*internal"},
+ "attributes_conns": []string{},
+ "thresholds_conns": []string{},
+ "stats_conns": []string{},
+ "online_cdr_exports": []string{},
+ "scheduler_conns": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnCdrsCfg, err := jsnCfg.CdrsJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = cdrscfg.loadFromJsonCfg(jsnCdrsCfg); err != nil {
+ t.Error(err)
+ } else if rcv := cdrscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "cdrs": {
+ "enabled": true,
+ "extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"],
+ "store_cdrs": true,
+ "session_cost_retries": 9,
+ "chargers_conns":["*internal"],
+ "rals_conns": ["*internal"],
+ "attributes_conns": ["*internal"],
+ "thresholds_conns": ["*internal"],
+ "stats_conns": ["*internal"],
+ "online_cdr_exports":["http_localhost", "amqp_localhost", "http_test_file", "amqp_test_file","aws_test_file","sqs_test_file","kafka_localhost","s3_test_file"],
+ "scheduler_conns": ["*internal"],
+ },
+ }`
+ eMap = map[string]interface{}{
+ "enabled": true,
+ "extra_fields": []string{"PayPalAccount", "LCRProfile", "ResourceID"},
+ "store_cdrs": true,
+ "session_cost_retries": 9,
+ "chargers_conns": []string{"*internal"},
+ "rals_conns": []string{"*internal"},
+ "attributes_conns": []string{"*internal"},
+ "thresholds_conns": []string{"*internal"},
+ "stats_conns": []string{"*internal"},
+ "online_cdr_exports": []string{"http_localhost", "amqp_localhost", "http_test_file", "amqp_test_file", "aws_test_file", "sqs_test_file", "kafka_localhost", "s3_test_file"},
+ "scheduler_conns": []string{"*internal"},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnCdrsCfg, err := jsnCfg.CdrsJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = cdrscfg.loadFromJsonCfg(jsnCdrsCfg); err != nil {
+ t.Error(err)
+ } else if rcv := cdrscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/chargerscfg.go b/config/chargerscfg.go
index 41146671c..fe55749cd 100644
--- a/config/chargerscfg.go
+++ b/config/chargerscfg.go
@@ -18,7 +18,11 @@ along with this program. If not, see
package config
-import "github.com/cgrates/cgrates/utils"
+import (
+ "strings"
+
+ "github.com/cgrates/cgrates/utils"
+)
// SupplierSCfg is the configuration of supplier service
type ChargerSCfg struct {
@@ -72,12 +76,35 @@ func (cS *ChargerSCfg) loadFromJsonCfg(jsnCfg *ChargerSJsonCfg) (err error) {
}
func (cS *ChargerSCfg) AsMapInterface() map[string]interface{} {
+ attributeSConns := make([]string, len(cS.AttributeSConns))
+ for i, item := range cS.AttributeSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
+ if item == buf {
+ attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
+ } else {
+ attributeSConns[i] = item
+ }
+ }
+ stringIndexedFields := []string{}
+ if cS.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*cS.StringIndexedFields))
+ for i, item := range *cS.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if cS.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*cS.PrefixIndexedFields))
+ for i, item := range *cS.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: cS.Enabled,
utils.IndexedSelectsCfg: cS.IndexedSelects,
- utils.AttributeSConnsCfg: cS.AttributeSConns,
- utils.StringIndexedFieldsCfg: cS.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: cS.PrefixIndexedFields,
+ utils.AttributeSConnsCfg: attributeSConns,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: cS.NestedFields,
}
}
diff --git a/config/chargerscfg_test.go b/config/chargerscfg_test.go
index 4d24d5936..ff9447e0e 100644
--- a/config/chargerscfg_test.go
+++ b/config/chargerscfg_test.go
@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestChargerSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,60 @@ func TestChargerSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, chgscfg)
}
}
+
+func TestChargerSCfgAsMapInterface(t *testing.T) {
+ var chgscfg ChargerSCfg
+ cfgJSONStr := `{
+ "chargers": {
+ "enabled": false,
+ "attributes_conns": [],
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "attributes_conns": []string{},
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{},
+ "nested_fields": false,
+ "string_indexed_fields": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnChgCfg, err := jsnCfg.ChargerServJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = chgscfg.loadFromJsonCfg(jsnChgCfg); err != nil {
+ t.Error(err)
+ } else if rcv := chgscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "chargers": {
+ "enabled": false,
+ "attributes_conns": ["*internal"],
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ },
+ }`
+ eMap = map[string]interface{}{
+ "enabled": false,
+ "attributes_conns": []string{"*internal"},
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{},
+ "nested_fields": false,
+ "string_indexed_fields": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnChgCfg, err := jsnCfg.ChargerServJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = chgscfg.loadFromJsonCfg(jsnChgCfg); err != nil {
+ t.Error(err)
+ } else if rcv := chgscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/config.go b/config/config.go
index a5f97c3eb..1cc757b21 100755
--- a/config/config.go
+++ b/config/config.go
@@ -1482,7 +1482,7 @@ func (cfg *CGRConfig) AsMapInterface(separator string) map[string]interface{} {
utils.StatsCfg: cfg.statsCfg.AsMapInterface(),
utils.ThresholdSCfg: cfg.thresholdSCfg.AsMapInterface(),
utils.SupplierSCfg: cfg.supplierSCfg.AsMapInterface(),
- utils.SureTaxCfg: cfg.sureTaxCfg.AsMapInterface(),
+ utils.SureTaxCfg: cfg.sureTaxCfg.AsMapInterface(separator),
utils.DispatcherSCfg: cfg.dispatcherSCfg.AsMapInterface(),
utils.LoaderCgrCfg: cfg.loaderCgrCfg.AsMapInterface(),
utils.MigratorCgrCfg: cfg.migratorCgrCfg.AsMapInterface(),
diff --git a/config/dnsagntcfg.go b/config/dnsagntcfg.go
index e1a61b94d..4f09f5fa9 100644
--- a/config/dnsagntcfg.go
+++ b/config/dnsagntcfg.go
@@ -165,7 +165,7 @@ func (rp *RequestProcessor) AsMapInterface(separator string) map[string]interfac
for i, item := range rp.Tenant {
values[i] = item.Rules
}
- tenant = strings.Join(values, utils.EmptyString)
+ tenant = strings.Join(values, separator)
}
flags := make(map[string][]string, len(rp.Flags))
diff --git a/config/httpcfg.go b/config/httpcfg.go
index 258f0fe21..d1e1ff9d3 100644
--- a/config/httpcfg.go
+++ b/config/httpcfg.go
@@ -58,7 +58,7 @@ func (httpcfg *HTTPCfg) loadFromJsonCfg(jsnHttpCfg *HTTPJsonCfg) (err error) {
}
func (httpcfg *HTTPCfg) AsMapInterface() map[string]interface{} {
- httpUsers := map[string]interface{}{}
+ httpUsers := make(map[string]interface{}, len(httpcfg.HTTPAuthUsers))
for key, item := range httpcfg.HTTPAuthUsers {
httpUsers[key] = item
}
diff --git a/config/resourcescfg.go b/config/resourcescfg.go
index 887ef9c91..070a94880 100644
--- a/config/resourcescfg.go
+++ b/config/resourcescfg.go
@@ -19,6 +19,7 @@ along with this program. If not, see
package config
import (
+ "strings"
"time"
"github.com/cgrates/cgrates/utils"
@@ -81,14 +82,40 @@ func (rlcfg *ResourceSConfig) loadFromJsonCfg(jsnCfg *ResourceSJsonCfg) (err err
}
func (rlcfg *ResourceSConfig) AsMapInterface() map[string]interface{} {
-
+ thresholdSConns := make([]string, len(rlcfg.ThresholdSConns))
+ for i, item := range rlcfg.ThresholdSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
+ if item == buf {
+ thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
+ } else {
+ thresholdSConns[i] = item
+ }
+ }
+ stringIndexedFields := []string{}
+ if rlcfg.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*rlcfg.StringIndexedFields))
+ for i, item := range *rlcfg.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if rlcfg.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*rlcfg.PrefixIndexedFields))
+ for i, item := range *rlcfg.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
+ var storeInterval string = ""
+ if rlcfg.StoreInterval != 0 {
+ storeInterval = rlcfg.StoreInterval.String()
+ }
return map[string]interface{}{
utils.EnabledCfg: rlcfg.Enabled,
utils.IndexedSelectsCfg: rlcfg.IndexedSelects,
- utils.ThresholdSConnsCfg: rlcfg.ThresholdSConns,
- utils.StoreIntervalCfg: rlcfg.StoreInterval,
- utils.StringIndexedFieldsCfg: rlcfg.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: rlcfg.PrefixIndexedFields,
+ utils.ThresholdSConnsCfg: thresholdSConns,
+ utils.StoreIntervalCfg: storeInterval,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: rlcfg.NestedFields,
}
diff --git a/config/resourcescfg_test.go b/config/resourcescfg_test.go
index 0e6ba68ff..48f90654b 100644
--- a/config/resourcescfg_test.go
+++ b/config/resourcescfg_test.go
@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestResourceSConfigloadFromJsonCfg(t *testing.T) {
@@ -60,3 +62,65 @@ func TestResourceSConfigloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, rlcfg)
}
}
+
+func TestResourceSConfigAsMapInterface(t *testing.T) {
+ var rlcfg ResourceSConfig
+
+ cfgJSONStr := `{
+ "resources": {
+ "enabled": false,
+ "store_interval": "",
+ "thresholds_conns": [],
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "store_interval": "",
+ "thresholds_conns": []string{},
+ "indexed_selects": true,
+ "string_indexed_fields": []string{},
+ "prefix_indexed_fields": []string{},
+ "nested_fields": false,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnRlcCfg, err := jsnCfg.ResourceSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = rlcfg.loadFromJsonCfg(jsnRlcCfg); err != nil {
+ t.Error(err)
+ } else if rcv := rlcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "resources": {
+ "enabled": false,
+ "store_interval": "7m",
+ "thresholds_conns": ["*internal"],
+ "indexed_selects":true,
+ "prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
+ "nested_fields": false,
+ },
+ }`
+ eMap = map[string]interface{}{
+ "enabled": false,
+ "store_interval": "7m0s",
+ "thresholds_conns": []string{"*internal"},
+ "indexed_selects": true,
+ "string_indexed_fields": []string{},
+ "prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
+ "nested_fields": false,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnRlcCfg, err := jsnCfg.ResourceSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = rlcfg.loadFromJsonCfg(jsnRlcCfg); err != nil {
+ t.Error(err)
+ } else if rcv := rlcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/schedulercfg_test.go b/config/schedulercfg_test.go
index 28f6de995..3e650fcdc 100644
--- a/config/schedulercfg_test.go
+++ b/config/schedulercfg_test.go
@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestSchedulerCfgloadFromJsonCfg(t *testing.T) {
@@ -54,3 +56,28 @@ func TestSchedulerCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, schdcfg)
}
}
+
+func TestSchedulerCfgAsMapInterface(t *testing.T) {
+ var schdcfg SchedulerCfg
+ cfgJSONStr := `{
+ "schedulers": {
+ "enabled": true,
+ "cdrs_conns": [],
+ "filters": [],
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": true,
+ "cdrs_conns": []string{},
+ "filters": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnSchCfg, err := jsnCfg.SchedulerJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = schdcfg.loadFromJsonCfg(jsnSchCfg); err != nil {
+ t.Error(err)
+ } else if rcv := schdcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/statscfg.go b/config/statscfg.go
index 8bc99fc8e..1cbe06513 100644
--- a/config/statscfg.go
+++ b/config/statscfg.go
@@ -19,6 +19,7 @@ along with this program. If not, see
package config
import (
+ "strings"
"time"
"github.com/cgrates/cgrates/utils"
@@ -85,15 +86,42 @@ func (st *StatSCfg) loadFromJsonCfg(jsnCfg *StatServJsonCfg) (err error) {
}
func (st *StatSCfg) AsMapInterface() map[string]interface{} {
+ var storeInterval string = ""
+ if st.StoreInterval != 0 {
+ storeInterval = st.StoreInterval.String()
+ }
+ stringIndexedFields := []string{}
+ if st.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*st.StringIndexedFields))
+ for i, item := range *st.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if st.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*st.PrefixIndexedFields))
+ for i, item := range *st.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
+ thresholdSConns := make([]string, len(st.ThresholdSConns))
+ for i, item := range st.ThresholdSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
+ if item == buf {
+ thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
+ } else {
+ thresholdSConns[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: st.Enabled,
utils.IndexedSelectsCfg: st.IndexedSelects,
- utils.StoreIntervalCfg: st.StoreInterval,
+ utils.StoreIntervalCfg: storeInterval,
utils.StoreUncompressedLimitCfg: st.StoreUncompressedLimit,
- utils.ThresholdSConnsCfg: st.ThresholdSConns,
- utils.StringIndexedFieldsCfg: st.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: st.PrefixIndexedFields,
+ utils.ThresholdSConnsCfg: thresholdSConns,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: st.NestedFields,
}
diff --git a/config/statscfg_test.go b/config/statscfg_test.go
index ca487c4d7..c2c56cb47 100644
--- a/config/statscfg_test.go
+++ b/config/statscfg_test.go
@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestStatSCfgloadFromJsonCfg(t *testing.T) {
@@ -59,3 +61,78 @@ func TestStatSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, statscfg)
}
}
+
+func TestStatSCfgAsMapInterface(t *testing.T) {
+ var statscfg, expected StatSCfg
+ if err := statscfg.loadFromJsonCfg(nil); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(statscfg, expected) {
+ t.Errorf("Expected: %+v ,recived: %+v", expected, statscfg)
+ }
+ if err := statscfg.loadFromJsonCfg(new(StatServJsonCfg)); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(statscfg, expected) {
+ t.Errorf("Expected: %+v ,recived: %+v", expected, statscfg)
+ }
+ cfgJSONStr := `{
+ "stats": {
+ "enabled": false,
+ "store_interval": "",
+ "store_uncompressed_limit": 0,
+ "thresholds_conns": [],
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ },
+ }`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "store_interval": "",
+ "store_uncompressed_limit": 0,
+ "thresholds_conns": []string{},
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{},
+ "nested_fields": false,
+ "string_indexed_fields": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnStatSCfg, err := jsnCfg.StatSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = statscfg.loadFromJsonCfg(jsnStatSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := statscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "stats": {
+ "enabled": false,
+ "store_interval": "72h",
+ "store_uncompressed_limit": 0,
+ "thresholds_conns": ["*internal"],
+ "indexed_selects":true,
+ "prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
+ "nested_fields": false,
+ },
+ }`
+ eMap = map[string]interface{}{
+ "enabled": false,
+ "store_interval": "72h0m0s",
+ "store_uncompressed_limit": 0,
+ "thresholds_conns": []string{"*internal"},
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
+ "nested_fields": false,
+ "string_indexed_fields": []string{},
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnStatSCfg, err := jsnCfg.StatSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = statscfg.loadFromJsonCfg(jsnStatSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := statscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/supplierscfg.go b/config/supplierscfg.go
index 6333060c5..f3d375ad8 100644
--- a/config/supplierscfg.go
+++ b/config/supplierscfg.go
@@ -18,7 +18,11 @@ along with this program. If not, see
package config
-import "github.com/cgrates/cgrates/utils"
+import (
+ "strings"
+
+ "github.com/cgrates/cgrates/utils"
+)
// SupplierSCfg is the configuration of supplier service
type SupplierSCfg struct {
@@ -112,16 +116,67 @@ func (spl *SupplierSCfg) loadFromJsonCfg(jsnCfg *SupplierSJsonCfg) (err error) {
}
func (spl *SupplierSCfg) AsMapInterface() map[string]interface{} {
+ stringIndexedFields := []string{}
+ if spl.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*spl.StringIndexedFields))
+ for i, item := range *spl.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if spl.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*spl.PrefixIndexedFields))
+ for i, item := range *spl.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
+ attributeSConns := make([]string, len(spl.AttributeSConns))
+ for i, item := range spl.AttributeSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
+ if item == buf {
+ attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
+ } else {
+ attributeSConns[i] = item
+ }
+ }
+ responderSConns := make([]string, len(spl.ResponderSConns))
+ for i, item := range spl.ResponderSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)
+
+ if item == buf {
+ responderSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString)
+ } else {
+ responderSConns[i] = item
+ }
+ }
+ resourceSConns := make([]string, len(spl.ResourceSConns))
+ for i, item := range spl.ResourceSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources)
+ if item == buf {
+ resourceSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResources, utils.EmptyString)
+ } else {
+ resourceSConns[i] = item
+ }
+ }
+ statSConns := make([]string, len(spl.StatSConns))
+ for i, item := range spl.StatSConns {
+ buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS)
+ if item == buf {
+ statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString)
+ } else {
+ statSConns[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: spl.Enabled,
utils.IndexedSelectsCfg: spl.IndexedSelects,
- utils.StringIndexedFieldsCfg: spl.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: spl.PrefixIndexedFields,
- utils.AttributeSConnsCfg: spl.AttributeSConns,
- utils.ResourceSConnsCfg: spl.ResourceSConns,
- utils.StatSConnsCfg: spl.StatSConns,
- utils.RALsConnsCfg: spl.ResponderSConns,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
+ utils.AttributeSConnsCfg: attributeSConns,
+ utils.ResourceSConnsCfg: resourceSConns,
+ utils.StatSConnsCfg: statSConns,
+ utils.RALsConnsCfg: responderSConns,
utils.DefaultRatioCfg: spl.DefaultRatio,
utils.NestedFieldsCfg: spl.NestedFields,
}
diff --git a/config/supplierscfg_test.go b/config/supplierscfg_test.go
index beebfd4da..0736b17ca 100644
--- a/config/supplierscfg_test.go
+++ b/config/supplierscfg_test.go
@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestSupplierSCfgloadFromJsonCfg(t *testing.T) {
@@ -62,3 +64,76 @@ func TestSupplierSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, supscfg)
}
}
+
+func TestSupplierSCfgAsMapInterface(t *testing.T) {
+ var supscfg SupplierSCfg
+ cfgJSONStr := `{
+ "suppliers": {
+ "enabled": false,
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ "attributes_conns": [],
+ "resources_conns": [],
+ "stats_conns": [],
+ "rals_conns": [],
+ "default_ratio":1
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{},
+ "string_indexed_fields": []string{},
+ "nested_fields": false,
+ "attributes_conns": []string{},
+ "resources_conns": []string{},
+ "stats_conns": []string{},
+ "rals_conns": []string{},
+ "default_ratio": 1,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnSupSCfg, err := jsnCfg.SupplierSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = supscfg.loadFromJsonCfg(jsnSupSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := supscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "suppliers": {
+ "enabled": false,
+ "indexed_selects":true,
+ "prefix_indexed_fields": ["prefix","indexed","fields"],
+ "nested_fields": false,
+ "attributes_conns": ["*internal"],
+ "resources_conns": ["*internal"],
+ "stats_conns": ["*internal"],
+ "rals_conns": ["*internal"],
+ "default_ratio":1
+ },
+ }`
+ eMap = map[string]interface{}{
+ "enabled": false,
+ "indexed_selects": true,
+ "prefix_indexed_fields": []string{"prefix", "indexed", "fields"},
+ "string_indexed_fields": []string{},
+ "nested_fields": false,
+ "attributes_conns": []string{"*internal"},
+ "resources_conns": []string{"*internal"},
+ "stats_conns": []string{"*internal"},
+ "rals_conns": []string{"*internal"},
+ "default_ratio": 1,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnSupSCfg, err := jsnCfg.SupplierSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = supscfg.loadFromJsonCfg(jsnSupSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := supscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/config/thresholdscfg.go b/config/thresholdscfg.go
index eb75360da..39fb52c54 100644
--- a/config/thresholdscfg.go
+++ b/config/thresholdscfg.go
@@ -69,12 +69,30 @@ func (t *ThresholdSCfg) loadFromJsonCfg(jsnCfg *ThresholdSJsonCfg) (err error) {
}
func (t *ThresholdSCfg) AsMapInterface() map[string]interface{} {
+ var storeInterval string = ""
+ if t.StoreInterval != 0 {
+ storeInterval = t.StoreInterval.String()
+ }
+ stringIndexedFields := []string{}
+ if t.StringIndexedFields != nil {
+ stringIndexedFields = make([]string, len(*t.StringIndexedFields))
+ for i, item := range *t.StringIndexedFields {
+ stringIndexedFields[i] = item
+ }
+ }
+ prefixIndexedFields := []string{}
+ if t.PrefixIndexedFields != nil {
+ prefixIndexedFields = make([]string, len(*t.PrefixIndexedFields))
+ for i, item := range *t.PrefixIndexedFields {
+ prefixIndexedFields[i] = item
+ }
+ }
return map[string]interface{}{
utils.EnabledCfg: t.Enabled,
utils.IndexedSelectsCfg: t.IndexedSelects,
- utils.StoreIntervalCfg: t.StoreInterval,
- utils.StringIndexedFieldsCfg: t.StringIndexedFields,
- utils.PrefixIndexedFieldsCfg: t.PrefixIndexedFields,
+ utils.StoreIntervalCfg: storeInterval,
+ utils.StringIndexedFieldsCfg: stringIndexedFields,
+ utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: t.NestedFields,
}
}
diff --git a/config/thresholdscfg_test.go b/config/thresholdscfg_test.go
index 9ae339c1f..b42984d4f 100644
--- a/config/thresholdscfg_test.go
+++ b/config/thresholdscfg_test.go
@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
+
+ "github.com/cgrates/cgrates/utils"
)
func TestThresholdSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,62 @@ func TestThresholdSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, thscfg)
}
}
+
+func TestThresholdSCfgAsMapInterface(t *testing.T) {
+ var thscfg ThresholdSCfg
+
+ cfgJSONStr := `{
+ "thresholds": {
+ "enabled": false,
+ "store_interval": "",
+ "indexed_selects":true,
+ "prefix_indexed_fields": [],
+ "nested_fields": false,
+ },
+}`
+ eMap := map[string]interface{}{
+ "enabled": false,
+ "store_interval": "",
+ "indexed_selects": true,
+ "string_indexed_fields": []string{},
+ "prefix_indexed_fields": []string{},
+ "nested_fields": false,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnThSCfg, err := jsnCfg.ThresholdSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = thscfg.loadFromJsonCfg(jsnThSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := thscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+
+ cfgJSONStr = `{
+ "thresholds": {
+ "enabled": true,
+ "store_interval": "96h",
+ "indexed_selects":true,
+ "string_indexed_fields": ["string","indexed","fields"],
+ "prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
+ "nested_fields": true,
+ },
+}`
+ eMap = map[string]interface{}{
+ "enabled": true,
+ "store_interval": "96h0m0s",
+ "indexed_selects": true,
+ "string_indexed_fields": []string{"string", "indexed", "fields"},
+ "prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
+ "nested_fields": true,
+ }
+ if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
+ t.Error(err)
+ } else if jsnThSCfg, err := jsnCfg.ThresholdSJsonCfg(); err != nil {
+ t.Error(err)
+ } else if err = thscfg.loadFromJsonCfg(jsnThSCfg); err != nil {
+ t.Error(err)
+ } else if rcv := thscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
+ t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
+ }
+}
diff --git a/utils/consts.go b/utils/consts.go
index 221512684..b57478706 100755
--- a/utils/consts.go
+++ b/utils/consts.go
@@ -1931,8 +1931,8 @@ const (
BillToNumberCfg = "bill_to_number"
ZipcodeCfg = "zipcode"
Plus4Cfg = "plus4"
- P2PZipcodeCfg = "p2PZipcode"
- P2PPlus4Cfg = "p2PPlus4"
+ P2PZipcodeCfg = "p2pzipcode"
+ P2PPlus4Cfg = "p2pplus4"
UnitsCfg = "units"
UnitTypeCfg = "unit_type"
TaxIncludedCfg = "tax_included"