CdrExporter returns stats for successfuly and unsuccessfuly exported CDRs

This commit is contained in:
DanB
2014-03-25 16:00:33 +01:00
parent 6acfa22a04
commit 375bf8c0dd
3 changed files with 24 additions and 9 deletions

View File

@@ -1344,7 +1344,7 @@ func TestExportCdrsToFile(t *testing.T) {
t.Error("Failed to detect missing parameter")
}
req.CdrFormat = utils.CDRE_DRYRUN
expectReply := &utils.ExportedFileCdrs{NumberOfRecords: 2}
expectReply := &utils.ExportedFileCdrs{TotalRecords: 2}
if err := rater.Call("ApierV1.ExportCdrsToFile", req, &reply); err != nil {
t.Error(err.Error())
} else if !reflect.DeepEqual(reply, expectReply) {

View File

@@ -62,10 +62,16 @@ func (self *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.E
if err != nil {
return err
} else if len(cdrs) == 0 {
*reply = utils.ExportedFileCdrs{"", 0}
*reply = utils.ExportedFileCdrs{ExportedFilePath: ""}
return nil
}
switch cdrFormat {
case utils.CDRE_DRYRUN:
exportedIds := make([]string, len(cdrs))
for idxCdr, cdr := range cdrs {
exportedIds[idxCdr] = cdr.CgrId
}
*reply = utils.ExportedFileCdrs{ExportedFilePath: utils.CDRE_DRYRUN, TotalRecords: len(cdrs), ExportedCgrIds: exportedIds}
case utils.CDRE_CSV:
if len(fileName) == 0 {
fileName = fmt.Sprintf("cdre_%s.csv", exportId)
@@ -86,13 +92,17 @@ func (self *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.E
}
defer fileOut.Close()
csvWriter := cdre.NewCsvCdrWriter(fileOut, roundDecimals, exportedFields)
exportedIds := make([]string, 0)
unexportedIds := make(map[string]string)
for _, cdr := range cdrs {
if err := csvWriter.WriteCdr(cdr); err != nil {
os.Remove(filePath)
return err
unexportedIds[cdr.CgrId] = err.Error()
} else {
exportedIds = append(exportedIds, cdr.CgrId)
}
}
csvWriter.Close()
*reply = utils.ExportedFileCdrs{ExportedFilePath: filePath, TotalRecords: len(cdrs), ExportedCgrIds: exportedIds, UnexportedCgrIds: unexportedIds}
case utils.CDRE_FIXED_WIDTH:
if len(fileName) == 0 {
fileName = fmt.Sprintf("cdre_%s.fwv", exportId)
@@ -115,15 +125,18 @@ func (self *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.E
}
defer fileOut.Close()
fww, _ := cdre.NewFWCdrWriter(self.LogDb, fileOut, exportTemplate, exportId, roundDecimals)
exportedIds := make([]string, 0)
unexportedIds := make(map[string]string)
for _, cdr := range cdrs {
if err := fww.WriteCdr(cdr); err != nil {
os.Remove(filePath)
return err
unexportedIds[cdr.CgrId] = err.Error()
} else {
exportedIds = append(exportedIds, cdr.CgrId)
}
}
fww.Close()
*reply = utils.ExportedFileCdrs{ExportedFilePath: filePath, TotalRecords: len(cdrs), ExportedCgrIds: exportedIds, UnexportedCgrIds: unexportedIds}
}
*reply = utils.ExportedFileCdrs{fileName, len(cdrs)}
return nil
}

View File

@@ -343,8 +343,10 @@ type AttrRemCdrs struct {
}
type ExportedFileCdrs struct {
ExportedFilePath string // Full path to the newly generated export file
NumberOfRecords int // Number of CDRs in the export file
ExportedFilePath string // Full path to the newly generated export file
TotalRecords int // Number of CDRs to be exported
ExportedCgrIds []string // List of successfuly exported cgrids in the file
UnexportedCgrIds map[string]string // Map of errored CDRs, map key is cgrid, value will be the error string
}
type AttrRateCdrs struct {