summaryrefslogtreecommitdiff
path: root/internal/mapr/logformat/generickv.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/mapr/logformat/generickv.go')
-rw-r--r--internal/mapr/logformat/generickv.go36
1 files changed, 15 insertions, 21 deletions
diff --git a/internal/mapr/logformat/generickv.go b/internal/mapr/logformat/generickv.go
index 9c3de92..5a0595d 100644
--- a/internal/mapr/logformat/generickv.go
+++ b/internal/mapr/logformat/generickv.go
@@ -1,15 +1,13 @@
package logformat
-import (
- "strings"
-
- "github.com/mimecast/dtail/internal/protocol"
-)
+import "github.com/mimecast/dtail/internal/protocol"
type genericKVParser struct {
defaultParser
}
+var _ Parser = (*genericKVParser)(nil)
+
func newGenericKVParser(hostname, timeZoneName string, timeZoneOffset int) (*genericKVParser, error) {
defaultParser, err := newDefaultParser(hostname, timeZoneName, timeZoneOffset)
if err != nil {
@@ -18,25 +16,21 @@ func newGenericKVParser(hostname, timeZoneName string, timeZoneOffset int) (*gen
return &genericKVParser{defaultParser: *defaultParser}, nil
}
-func (p *genericKVParser) MakeFields(maprLine string) (map[string]string, error) {
- splitted := strings.Split(maprLine, protocol.FieldDelimiter)
- fields := make(map[string]string, len(splitted))
+func (p *genericKVParser) MakeFields(maprLine, _ string) (map[string]string, error) {
+ fields := make(map[string]string, p.fieldsCapacity)
+ p.addDefaultFields(fields, maprLine)
+ start := 0
+ delimiter := protocol.FieldDelimiter[0]
- fields["*"] = "*"
- fields["$line"] = maprLine
- fields["$empty"] = ""
- fields["$hostname"] = p.hostname
- fields["$server"] = p.hostname
- fields["$timezone"] = p.timeZoneName
- fields["$timeoffset"] = p.timeZoneOffset
-
- for _, kv := range splitted[0:] {
- keyAndValue := strings.SplitN(kv, "=", 2)
- if len(keyAndValue) != 2 {
- //dlog.Common.Debug("Unable to parse key-value token, ignoring it", kv)
+ for {
+ token, next, done := scanDelimitedField(maprLine, start, delimiter)
+ if err := p.addKeyValueField(fields, token); err != nil {
continue
}
- fields[keyAndValue[0]] = keyAndValue[1]
+ if done {
+ break
+ }
+ start = next
}
return fields, nil