mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
Update loding config for EventReader
This commit is contained in:
committed by
Dan Christian Bogos
parent
1a4ab527f4
commit
32ec2bdc6f
@@ -881,7 +881,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := self.diameterAgentCfg.loadFromJsonCfg(jsnDACfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := self.diameterAgentCfg.loadFromJsonCfg(jsnDACfg, self.generalCfg.RSRSep); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -889,7 +889,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := self.radiusAgentCfg.loadFromJsonCfg(jsnRACfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := self.radiusAgentCfg.loadFromJsonCfg(jsnRACfg, self.generalCfg.RSRSep); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -897,7 +897,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := self.dnsAgentCfg.loadFromJsonCfg(jsnDNSCfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := self.dnsAgentCfg.loadFromJsonCfg(jsnDNSCfg, self.generalCfg.RSRSep); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -905,7 +905,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := self.httpAgentCfg.loadFromJsonCfg(jsnHttpAgntCfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := self.httpAgentCfg.loadFromJsonCfg(jsnHttpAgntCfg, self.generalCfg.RSRSep); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1029,7 +1029,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if err := self.ersCfg.loadFromJsonCfg(jsnERsCfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := self.ersCfg.loadFromJsonCfg(jsnERsCfg, self.generalCfg.RSRSep, self.dfltEvRdr); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1041,7 +1041,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
self.CdreProfiles[profileName] = self.dfltCdreProfile.Clone() // Clone default so we do not inherit pointers
|
||||
}
|
||||
}
|
||||
if err = self.CdreProfiles[profileName].loadFromJsonCfg(jsnCdre1Cfg, self.generalCfg.RsrSepatarot); err != nil { // Update the existing profile with content from json config
|
||||
if err = self.CdreProfiles[profileName].loadFromJsonCfg(jsnCdre1Cfg, self.generalCfg.RSRSep); err != nil { // Update the existing profile with content from json config
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -1051,7 +1051,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
// self.loaderCfg = make([]*LoaderSCfg, len(jsnLoaderCfg))
|
||||
for _, profile := range jsnLoaderCfg {
|
||||
loadSCfgp := NewDfltLoaderSCfg()
|
||||
loadSCfgp.loadFromJsonCfg(profile, self.generalCfg.RsrSepatarot)
|
||||
loadSCfgp.loadFromJsonCfg(profile, self.generalCfg.RSRSep)
|
||||
self.loaderCfg = append(self.loaderCfg, loadSCfgp) // use apend so the loaderS profile to be loaded from multiple files
|
||||
}
|
||||
}
|
||||
@@ -1082,7 +1082,7 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
if cdrcInstCfg == nil {
|
||||
cdrcInstCfg = self.dfltCdrcProfile.Clone()
|
||||
}
|
||||
if err := cdrcInstCfg.loadFromJsonCfg(jsnCrc1Cfg, self.generalCfg.RsrSepatarot); err != nil {
|
||||
if err := cdrcInstCfg.loadFromJsonCfg(jsnCrc1Cfg, self.generalCfg.RSRSep); err != nil {
|
||||
return err
|
||||
}
|
||||
if cdrcInstCfg.CDRInPath == "" {
|
||||
|
||||
@@ -30,7 +30,7 @@ type ERsCfg struct {
|
||||
Readers []*EventReaderCfg
|
||||
}
|
||||
|
||||
func (erS *ERsCfg) loadFromJsonCfg(jsnCfg *ERsJsonCfg, sep string) (err error) {
|
||||
func (erS *ERsCfg) loadFromJsonCfg(jsnCfg *ERsJsonCfg, sep string, dfltRdrCfg *EventReaderCfg) (err error) {
|
||||
if jsnCfg == nil {
|
||||
return
|
||||
}
|
||||
@@ -47,7 +47,12 @@ func (erS *ERsCfg) loadFromJsonCfg(jsnCfg *ERsJsonCfg, sep string) (err error) {
|
||||
if jsnCfg.Readers != nil {
|
||||
erS.Readers = make([]*EventReaderCfg, len(*jsnCfg.Readers))
|
||||
for idx, rdrs := range *jsnCfg.Readers {
|
||||
erS.Readers[idx] = new(EventReaderCfg)
|
||||
if dfltRdrCfg == nil { // when loading defaults dfltRdrCfg is nil ( e.g line 195)
|
||||
erS.Readers[idx] = new(EventReaderCfg)
|
||||
} else {
|
||||
erS.Readers[idx] = dfltRdrCfg.Clone()
|
||||
}
|
||||
|
||||
if err = erS.Readers[idx].loadFromJsonCfg(rdrs, sep); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package config
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
@@ -97,3 +98,79 @@ func TestEventRedearClone(t *testing.T) {
|
||||
t.Errorf("expected: %s \n,received: %s", utils.ToJSON(initialOrig), utils.ToJSON(cloned))
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventReaderLoadFromJSON(t *testing.T) {
|
||||
expectedERsCfg := &ERsCfg{
|
||||
Enabled: true,
|
||||
SessionSConns: []*RemoteHost{
|
||||
{
|
||||
Address: utils.MetaInternal,
|
||||
},
|
||||
},
|
||||
Readers: []*EventReaderCfg{
|
||||
&EventReaderCfg{
|
||||
ID: "file_reader1",
|
||||
Type: utils.MetaFileCSV,
|
||||
FieldSep: ",",
|
||||
RunDelay: time.Duration(-1),
|
||||
ConcurrentReqs: 1024,
|
||||
SourcePath: "/tmp/ers/in",
|
||||
ProcessedPath: "/tmp/ers/out",
|
||||
XmlRootPath: utils.EmptyString,
|
||||
SourceID: "ers_csv",
|
||||
Tenant: nil,
|
||||
Timezone: utils.EmptyString,
|
||||
Filters: nil,
|
||||
Flags: utils.FlagsWithParams{},
|
||||
Header_fields: make([]*FCTemplate, 0),
|
||||
Content_fields: []*FCTemplate{
|
||||
{Tag: "TOR", FieldId: "ToR", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "OriginID", FieldId: "OriginID", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "RequestType", FieldId: "RequestType", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Category", FieldId: "Category", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Account", FieldId: "Account", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Subject", FieldId: "Subject", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Destination", FieldId: "Destination", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "SetupTime", FieldId: "SetupTime", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "AnswerTime", FieldId: "AnswerTime", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
{Tag: "Usage", FieldId: "Usage", Type: utils.META_COMPOSED,
|
||||
Value: NewRSRParsersMustCompile("~13", true, utils.INFIELD_SEP), Mandatory: true},
|
||||
},
|
||||
Trailer_fields: make([]*FCTemplate, 0),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cfgJSONStr := `{
|
||||
"ers": {
|
||||
"enabled": true,
|
||||
"readers": [
|
||||
{
|
||||
"id": "file_reader1",
|
||||
"run_delay": -1,
|
||||
"type": "*file_csv",
|
||||
"source_path": "/tmp/ers/in",
|
||||
"processed_path": "/tmp/ers/out",
|
||||
},
|
||||
],
|
||||
}
|
||||
}`
|
||||
|
||||
if cfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expectedERsCfg, cfg.ersCfg) {
|
||||
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(expectedERsCfg), utils.ToJSON(cfg.ersCfg))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ type GeneralCfg struct {
|
||||
LockingTimeout time.Duration // locking mechanism timeout to avoid deadlocks
|
||||
DigestSeparator string //
|
||||
DigestEqual string //
|
||||
RsrSepatarot string // separator used to split RSRParser (by degault is used ";")
|
||||
RSRSep string // separator used to split RSRParser (by degault is used ";")
|
||||
}
|
||||
|
||||
//loadFromJsonCfg loads General config from JsonCfg
|
||||
@@ -127,7 +127,7 @@ func (gencfg *GeneralCfg) loadFromJsonCfg(jsnGeneralCfg *GeneralJsonCfg) (err er
|
||||
gencfg.DigestEqual = *jsnGeneralCfg.Digest_equal
|
||||
}
|
||||
if jsnGeneralCfg.Rsr_separator != nil {
|
||||
gencfg.RsrSepatarot = *jsnGeneralCfg.Rsr_separator
|
||||
gencfg.RSRSep = *jsnGeneralCfg.Rsr_separator
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -114,7 +114,7 @@ func TestMfEnvReaderITRead(t *testing.T) {
|
||||
LockingTimeout: time.Duration(0),
|
||||
DigestSeparator: ",",
|
||||
DigestEqual: ":",
|
||||
RsrSepatarot: ";",
|
||||
RSRSep: ";",
|
||||
}
|
||||
if !reflect.DeepEqual(expected, *mfCgrCfg.generalCfg) {
|
||||
t.Errorf("Expected: %+v\n, recived: %+v", utils.ToJSON(expected), utils.ToJSON(*mfCgrCfg.generalCfg))
|
||||
|
||||
@@ -139,7 +139,7 @@ func cdrLogAction(acc *Account, a *Action, acs Actions, extraData interface{}) (
|
||||
}
|
||||
for field, rsr := range template {
|
||||
if defaultTemplate[field], err = config.NewRSRParsers(rsr,
|
||||
true, config.CgrConfig().GeneralCfg().RsrSepatarot); err != nil {
|
||||
true, config.CgrConfig().GeneralCfg().RSRSep); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -148,7 +148,7 @@ func cdrLogAction(acc *Account, a *Action, acs Actions, extraData interface{}) (
|
||||
mapExtraData, _ := extraData.(map[string]interface{})
|
||||
for key, val := range mapExtraData {
|
||||
if defaultTemplate[key], err = config.NewRSRParsers(utils.IfaceAsString(val),
|
||||
true, config.CgrConfig().GeneralCfg().RsrSepatarot); err != nil {
|
||||
true, config.CgrConfig().GeneralCfg().RSRSep); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2160,7 +2160,7 @@ func APItoAttributeProfile(tpAttr *utils.TPAttributeProfile, timezone string) (a
|
||||
attrPrf.Contexts[i] = context
|
||||
}
|
||||
for i, reqAttr := range tpAttr.Attributes {
|
||||
sbstPrsr, err := config.NewRSRParsers(reqAttr.Value, true, config.CgrConfig().GeneralCfg().RsrSepatarot)
|
||||
sbstPrsr, err := config.NewRSRParsers(reqAttr.Value, true, config.CgrConfig().GeneralCfg().RSRSep)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ func (v1AttrPrf v1AttributeProfile) AsAttributeProfile() (attrPrf *engine.Attrib
|
||||
if attr.Initial != utils.META_ANY {
|
||||
filterIDs = append(filterIDs, utils.MetaString+":"+attr.FieldName+":"+attr.Initial)
|
||||
}
|
||||
sbstPrsr, err := config.NewRSRParsers(attr.Substitute, true, config.CgrConfig().GeneralCfg().RsrSepatarot)
|
||||
sbstPrsr, err := config.NewRSRParsers(attr.Substitute, true, config.CgrConfig().GeneralCfg().RSRSep)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user