summaryrefslogtreecommitdiff
path: root/internal/mapr/logformat/csv.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/mapr/logformat/csv.go')
-rw-r--r--internal/mapr/logformat/csv.go40
1 files changed, 25 insertions, 15 deletions
diff --git a/internal/mapr/logformat/csv.go b/internal/mapr/logformat/csv.go
index b8f565c..ecb1f8b 100644
--- a/internal/mapr/logformat/csv.go
+++ b/internal/mapr/logformat/csv.go
@@ -2,7 +2,6 @@ package logformat
import (
"fmt"
- "strings"
"github.com/mimecast/dtail/internal/protocol"
)
@@ -29,27 +28,38 @@ func (p *csvParser) MakeFields(maprLine string) (map[string]string, error) {
return nil, ErrIgnoreFields
}
- fields := make(map[string]string, 7+len(p.header))
- fields["*"] = "*"
- fields["$hostname"] = p.hostname
- fields["$server"] = p.hostname
- fields["$line"] = maprLine
- fields["$empty"] = ""
- fields["$timezone"] = p.timeZoneName
- fields["$timeoffset"] = p.timeZoneOffset
-
- splitted := strings.Split(maprLine, protocol.CSVDelimiter)
- for i, value := range splitted {
- if i >= len(p.header) {
+ fields := make(map[string]string, p.fieldsCapacity)
+ p.addDefaultFields(fields, maprLine)
+ start := 0
+ column := 0
+ delimiter := protocol.CSVDelimiter[0]
+
+ for {
+ value, next, done := scanDelimitedField(maprLine, start, delimiter)
+ if column >= len(p.header) {
return fields, fmt.Errorf("CSV file seems corrupted, more fields than header values?")
}
- fields[p.header[i]] = value
+ p.addDynamicField(fields, p.header[column], value)
+ column++
+ if done {
+ break
+ }
+ start = next
}
return fields, nil
}
func (p *csvParser) parseHeader(maprLine string) {
- p.header = strings.Split(maprLine, protocol.CSVDelimiter)
+ start := 0
+ delimiter := protocol.CSVDelimiter[0]
+ for {
+ header, next, done := scanDelimitedField(maprLine, start, delimiter)
+ p.header = append(p.header, header)
+ if done {
+ break
+ }
+ start = next
+ }
p.hasHeader = true
}