summaryrefslogtreecommitdiff
path: root/internal/mapr/logformat/csv.go
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2023-09-08 07:45:51 +0300
committerPaul Buetow <pbuetow@mimecast.com>2023-09-08 07:45:51 +0300
commit85780654df870dc4170b93a8ed5a5dbfa917fe5d (patch)
tree1d2843e212def6bcdead71ef8c814e8cf55f31a5 /internal/mapr/logformat/csv.go
parent51747cc62ae47af7d369e3e43d41f156835e9dfa (diff)
parentd6efc889f1dc9582ba8006633376c022c945a126 (diff)
Merge branch 'develop'
Diffstat (limited to 'internal/mapr/logformat/csv.go')
-rw-r--r--internal/mapr/logformat/csv.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/internal/mapr/logformat/csv.go b/internal/mapr/logformat/csv.go
new file mode 100644
index 0000000..ea85ca9
--- /dev/null
+++ b/internal/mapr/logformat/csv.go
@@ -0,0 +1,53 @@
+package logformat
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/mimecast/dtail/internal/protocol"
+)
+
+type csvParser struct {
+ defaultParser
+ header []string
+ hasHeader bool
+}
+
+func newCSVParser(hostname, timeZoneName string, timeZoneOffset int) (*csvParser, error) {
+ defaultParser, err := newDefaultParser(hostname, timeZoneName, timeZoneOffset)
+ if err != nil {
+ return &csvParser{}, err
+ }
+ return &csvParser{defaultParser: *defaultParser}, nil
+}
+
+func (p *csvParser) MakeFields(maprLine string) (map[string]string, error) {
+ if !p.hasHeader {
+ p.parseHeader(maprLine)
+ 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) {
+ return fields, fmt.Errorf("CSV file seems corrupted, more fields than header values?")
+ }
+ fields[p.header[i]] = value
+ }
+
+ return fields, nil
+}
+
+func (p *csvParser) parseHeader(maprLine string) {
+ p.header = strings.Split(maprLine, protocol.CSVDelimiter)
+ p.hasHeader = true
+}