diff --git a/.gitignore b/.gitignore index f4c81506b..029f8c7de 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ a.out docs/_* bin .idea +dean* diff --git a/cdrexporter/cdrexporter.go b/cdrexporter/cdrexporter.go new file mode 100644 index 000000000..1a0963e3c --- /dev/null +++ b/cdrexporter/cdrexporter.go @@ -0,0 +1,24 @@ +/* +Rating system designed to be used in VoIP Carriers World +Copyright (C) 2013 ITsysCOM + +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 cdrexporter + +type CdrWriter interface { + Write(cdr map[string]string) string + Close() +} diff --git a/cdrexporter/csv.go b/cdrexporter/csv.go new file mode 100644 index 000000000..38dd50a15 --- /dev/null +++ b/cdrexporter/csv.go @@ -0,0 +1,44 @@ +/* +Rating system designed to be used in VoIP Carriers World +Copyright (C) 2013 ITsysCOM + +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 cdrexporter + +import ( + "encoding/csv" + "io" +) + +type CsvCdrWriter struct { + writer *csv.Writer +} + +func NewCsvCdrWriter(writer io.Writer) *CsvCdrWriter { + return &CsvCdrWriter{csv.NewWriter(writer)} +} + +func (dcw *CsvCdrWriter) Write(cdr map[string]string) error { + var row []string + for _, v := range cdr { + row = append(row, v) + } + return dcw.writer.Write(row) +} + +func (dcw *CsvCdrWriter) Close() { + dcw.writer.Flush() +} diff --git a/cdrexporter/csv_test.go b/cdrexporter/csv_test.go new file mode 100644 index 000000000..d7181f477 --- /dev/null +++ b/cdrexporter/csv_test.go @@ -0,0 +1,37 @@ +/* +Rating system designed to be used in VoIP Carriers World +Copyright (C) 2013 ITsysCOM + +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 cdrexporter + +import ( + "bytes" + "strings" + "testing" +) + +func TestCsv(t *testing.T) { + writer := &bytes.Buffer{} + csvCdrWriter := NewCsvCdrWriter(writer) + csvCdrWriter.Write(map[string]string{"First": "test", "Second": "the", "Third": "cdr"}) + csvCdrWriter.Close() + expected := "test,the,cdr" + result := strings.TrimSpace(writer.String()) + if result != expected { + t.Errorf("Expected %s was %s.", expected, result) + } +} diff --git a/rater/calldesc.go b/rater/calldesc.go index 6342bc85d..598977c06 100644 --- a/rater/calldesc.go +++ b/rater/calldesc.go @@ -170,7 +170,7 @@ func (cd *CallDescriptor) getActivationPeriodsForPrefix(key string, recursionDep if err != nil { if rp.FallbackKey != "" { recursionDepth++ - for _, fbk := range strings.Split(rp.FallbackKey, "|") { + for _, fbk := range strings.Split(rp.FallbackKey, ";") { if destPrefix, values, err := cd.getActivationPeriodsForPrefix(fbk, recursionDepth); err == nil { return destPrefix, values, err }