From e614ec69420d59132cedf24c7ddfd9135abb1b5c Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 3 Sep 2019 09:37:24 -0400 Subject: [PATCH] Update config for ers in case we find the sameID --- config/erscfg.go | 43 ++++++++++++++++++++++++++++++++----------- config/erscfg_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 11 deletions(-) diff --git a/config/erscfg.go b/config/erscfg.go index 3fe1fb37a..93e322b7b 100644 --- a/config/erscfg.go +++ b/config/erscfg.go @@ -44,21 +44,42 @@ func (erS *ERsCfg) loadFromJsonCfg(jsnCfg *ERsJsonCfg, sep string, dfltRdrCfg *E erS.SessionSConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Readers != nil { - erS.Readers = make([]*EventReaderCfg, len(*jsnCfg.Readers)) - for idx, rdrs := range *jsnCfg.Readers { - 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.appendERsReaders(jsnCfg.Readers, sep, dfltRdrCfg); err != nil { + return err + } + return nil +} - if err = erS.Readers[idx].loadFromJsonCfg(rdrs, sep); err != nil { - return err +func (ers *ERsCfg) appendERsReaders(jsnReaders *[]*EventReaderJsonCfg, separator string, + dfltRdrCfg *EventReaderCfg) (err error) { + if jsnReaders == nil { + return nil + } + for _, jsnReader := range *jsnReaders { + rdr := new(EventReaderCfg) + if dfltRdrCfg != nil { + rdr = dfltRdrCfg.Clone() + } + var haveID bool + if jsnReader.Id != nil { + for _, reader := range ers.Readers { + if reader.ID == *jsnReader.Id { + rdr = reader + haveID = true + break + } } } + + if err := rdr.loadFromJsonCfg(jsnReader, separator); err != nil { + return err + } + if !haveID { + ers.Readers = append(ers.Readers, rdr) + } + } - return + return nil } // Clone itself into a new ERsCfg diff --git a/config/erscfg_test.go b/config/erscfg_test.go index 9dfe8faa1..211efafce 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -108,6 +108,47 @@ func TestEventReaderLoadFromJSON(t *testing.T) { }, }, Readers: []*EventReaderCfg{ + &EventReaderCfg{ + ID: utils.MetaDefault, + Type: utils.MetaFileCSV, + FieldSep: ",", + RunDelay: time.Duration(0), + ConcurrentReqs: 1024, + SourcePath: "/var/spool/cgrates/cdrc/in", + ProcessedPath: "/var/spool/cgrates/cdrc/out", + XmlRootPath: utils.EmptyString, + SourceID: "ers_csv", + Tenant: nil, + Timezone: utils.EmptyString, + Filters: []string{}, + 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), + }, &EventReaderCfg{ ID: "file_reader1", Type: utils.MetaFileCSV,