From 9a0f3ebf802b25867b3ce9ea0f303cc8cb56fec0 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 5 May 2020 20:24:01 +0200 Subject: [PATCH] Skel of FileCSVee --- ees/ee.go | 14 +++++++++++--- ees/ees.go | 4 ++-- ees/filecsv.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 ees/filecsv.go diff --git a/ees/ee.go b/ees/ee.go index 384be4fb8..3ca76024c 100644 --- a/ees/ee.go +++ b/ees/ee.go @@ -19,15 +19,23 @@ along with this program. If not, see package ees import ( + "fmt" + "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" ) type EventExporter interface { - ExportEvent(cgrEv *utils.CGREvent) (err error) + ExportEvent(cgrEv *utils.CGREvent) (err error) // called on each event to be exported + OnEvicted(itmID string, value interface{}) // called when the exporter needs to terminate } // NewEventExporter produces exporters -func NewEventExporter(eeCfg *config.EventExporterCfg) (ee EventExporter, err error) { - return +func NewEventExporter(cgrCfg *config.CGRConfig, cfgIdx int) (ee EventExporter, err error) { + switch cgrCfg.EEsCfg().Exporters[cfgIdx].Type { + case utils.MetaFileCSV: + return NewFileCSVee(cgrCfg, cfgIdx) + default: + return nil, fmt.Errorf("unsupported exporter type: <%s>", cgrCfg.EEsCfg().Exporters[cfgIdx].Type) + } } diff --git a/ees/ees.go b/ees/ees.go index 17f4e578e..7735d6e55 100644 --- a/ees/ees.go +++ b/ees/ees.go @@ -82,7 +82,7 @@ func (eeS *EEService) V1ProcessEvent(cgrEv *utils.CGREventWithOpts) (err error) eeS.cfg.RLocks(config.EEsJson) defer eeS.cfg.RUnlocks(config.EEsJson) - for _, eeCfg := range eeS.cfg.EEsCfg().Exporters { + for cfgIdx, eeCfg := range eeS.cfg.EEsCfg().Exporters { if eeCfg.Flags.GetBool(utils.MetaAttributes) { var rplyEv engine.AttrSProcessEventReply @@ -114,7 +114,7 @@ func (eeS *EEService) V1ProcessEvent(cgrEv *utils.CGREventWithOpts) (err error) ee, has := eeS.ees[eeCfg.ID] eeS.eesMux.RUnlock() if !has { - if ee, err = NewEventExporter(eeCfg); err != nil { + if ee, err = NewEventExporter(eeS.cfg, cfgIdx); err != nil { return } eeS.ees[eeCfg.ID] = ee diff --git a/ees/filecsv.go b/ees/filecsv.go new file mode 100644 index 000000000..c143eb028 --- /dev/null +++ b/ees/filecsv.go @@ -0,0 +1,45 @@ +/* +Real-time Online/Offline Charging System (OerS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package ees + +import ( + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/utils" +) + +func NewFileCSVee(cgrCfg *config.CGRConfig, cfgIdx int) (fCsv *FileCSVee, err error) { + fCsv = &FileCSVee{cgrCfg: cgrCfg, cfgIdx: cfgIdx} + return +} + +// FileCSVee implements EventExporter interface for .csv files +type FileCSVee struct { + cgrCfg *config.CGRConfig + cfgIdx int // index of config instance within ERsCfg.Readers +} + +// OnEvicted implements EventExporter +func (fCsv *FileCSVee) OnEvicted(itmID string, value interface{}) { + return +} + +// ExportEvent implements EventExporter +func (fCsv *FileCSVee) ExportEvent(cgrEv *utils.CGREvent) (err error) { + return +}