Middlewares and some string util functions refactored. Added partial Documentation.

This commit is contained in:
Musab Gültekin
2019-06-16 10:38:03 +03:00
parent 40f673f2e2
commit 80383ebd6f
12 changed files with 219 additions and 152 deletions

View File

@ -3,37 +3,28 @@ package exporter
import (
"encoding/csv"
"fmt"
"github.com/geziyor/geziyor/internal"
"log"
"os"
"reflect"
"sync"
)
// CSVExporter exports response data as CSV streaming file
type CSVExporter struct {
FileName string
once sync.Once
writer *csv.Writer
}
// Export exports response data as CSV streaming file
func (e *CSVExporter) Export(exports chan interface{}) {
// Default filename
if e.FileName == "" {
e.FileName = "out.csv"
// Create file
newFile, err := os.OpenFile(internal.PreferFirst(e.FileName, "out.csv"), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Printf("output file creation error: %v", err)
return
}
// Create file
e.once.Do(func() {
newFile, err := os.OpenFile(e.FileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Fprintf(os.Stderr, "output file creation error: %v", err)
return
}
e.writer = csv.NewWriter(newFile)
})
writer := csv.NewWriter(newFile)
// Export data as responses came
for res := range exports {
@ -55,10 +46,9 @@ func (e *CSVExporter) Export(exports chan interface{}) {
// }
}
// Write to file
if err := e.writer.Write(values); err != nil {
if err := writer.Write(values); err != nil {
log.Printf("CSV writing error on exporter: %v\n", err)
}
}
e.writer.Flush()
writer.Flush()
}