diff options
| -rw-r--r-- | internal/clients/healthclient.go | 3 | ||||
| -rw-r--r-- | internal/color/brush/brush.go | 11 | ||||
| -rw-r--r-- | internal/io/fs/readfile.go | 20 | ||||
| -rw-r--r-- | internal/mapr/logformat/default.go | 4 | ||||
| -rw-r--r-- | internal/protocol/protocol.go | 2 | ||||
| -rw-r--r-- | internal/server/handlers/serverhandler.go | 10 |
6 files changed, 26 insertions, 24 deletions
diff --git a/internal/clients/healthclient.go b/internal/clients/healthclient.go index e93f6be..692464c 100644 --- a/internal/clients/healthclient.go +++ b/internal/clients/healthclient.go @@ -11,6 +11,7 @@ import ( "github.com/mimecast/dtail/internal/clients/remote" "github.com/mimecast/dtail/internal/config" "github.com/mimecast/dtail/internal/omode" + "github.com/mimecast/dtail/internal/protocol" gossh "golang.org/x/crypto/ssh" ) @@ -57,7 +58,7 @@ func (c *HealthClient) Start(ctx context.Context) (status int) { select { case data := <-receive: // Parse recieved data. - s := strings.Split(data, "|") + s := strings.Split(data, protocol.FieldDelimiter) message := s[len(s)-1] if strings.HasPrefix(message, "done;") { return diff --git a/internal/color/brush/brush.go b/internal/color/brush/brush.go index c5efff6..87c02d0 100644 --- a/internal/color/brush/brush.go +++ b/internal/color/brush/brush.go @@ -6,11 +6,12 @@ import ( "github.com/mimecast/dtail/internal/color" "github.com/mimecast/dtail/internal/config" + "github.com/mimecast/dtail/internal/protocol" ) // Add some color to log lines received from remote servers. func paintRemote(line string) string { - splitted := strings.Split(line, "|") + splitted := strings.Split(line, protocol.FieldDelimiter) if splitted[2] == "100" { splitted[2] = color.Paint(splitted[2], config.Client.TermColors.RemoteStatsOkFg, @@ -21,8 +22,8 @@ func paintRemote(line string) string { config.Client.TermColors.RemoteStatsWarnBg) } - info := strings.Join(splitted[0:5], "|") - log := strings.Join(splitted[5:], "|") + info := strings.Join(splitted[0:5], protocol.FieldDelimiter) + log := strings.Join(splitted[5:], protocol.FieldDelimiter) switch { case strings.HasPrefix(log, "WARN"): @@ -67,8 +68,8 @@ func paintRemote(line string) string { // Add some color to stats generated by the client. func paintClientStats(line string) string { - splitted := strings.Split(line, "|") - first := strings.Join(splitted[0:4], "|") + splitted := strings.Split(line, protocol.FieldDelimiter) + first := strings.Join(splitted[0:4], protocol.FieldDelimiter) connected := color.PaintWithAttr(splitted[4], config.Client.TermColors.ClientStatsFg, config.Client.TermColors.ClientStatsBg, diff --git a/internal/io/fs/readfile.go b/internal/io/fs/readfile.go index e44f30e..f2f672a 100644 --- a/internal/io/fs/readfile.go +++ b/internal/io/fs/readfile.go @@ -157,22 +157,21 @@ func (f readFile) read(ctx context.Context, fd *os.File, rawLines chan *bytes.Bu message := pool.BytesBuffer.Get().(*bytes.Buffer) for { - select { - case <-ctx.Done(): - return nil - case <-truncate: - if isTruncated, err := f.truncated(fd); isTruncated { - return err - } - default: - } - b, err := reader.ReadByte() if err != nil { if err != io.EOF { return err } + select { + case <-truncate: + if isTruncated, err := f.truncated(fd); isTruncated { + return err + } + case <-ctx.Done(): + return nil + default: + } if !f.seekEOF { logger.Info(f.FilePath(), "End of file reached") return nil @@ -207,7 +206,6 @@ func (f readFile) read(ctx context.Context, fd *os.File, rawLines chan *bytes.Bu select { case rawLines <- message: message = pool.BytesBuffer.Get().(*bytes.Buffer) - //fmt.Printf("%d %d %p\n", message.Len(), message.Cap(), message) case <-ctx.Done(): return nil } diff --git a/internal/mapr/logformat/default.go b/internal/mapr/logformat/default.go index 44bf558..32a34bd 100644 --- a/internal/mapr/logformat/default.go +++ b/internal/mapr/logformat/default.go @@ -3,12 +3,14 @@ package logformat import ( "errors" "strings" + + "github.com/mimecast/dtail/internal/protocol" ) // MakeFieldsDEFAULT is the default log file mapreduce parser. func (p *Parser) MakeFieldsDEFAULT(maprLine string) (map[string]string, error) { fields := make(map[string]string, 20) - splitted := strings.Split(maprLine, "|") + splitted := strings.Split(maprLine, protocol.FieldDelimiter) fields["*"] = "*" fields["$line"] = maprLine diff --git a/internal/protocol/protocol.go b/internal/protocol/protocol.go index 43021a2..d3035e4 100644 --- a/internal/protocol/protocol.go +++ b/internal/protocol/protocol.go @@ -6,7 +6,7 @@ const ( // MessageDelimiter delimits separate messages. MessageDelimiter byte = '¬' // FieldDelimiter delimits aggregation fields. - FieldDelimiter byte = '|' + FieldDelimiter string = "|" // AggregateDelimiter delimits parts of an aggregation message. AggregateDelimiter string = "➔" ) diff --git a/internal/server/handlers/serverhandler.go b/internal/server/handlers/serverhandler.go index f5aefa2..14fc5d0 100644 --- a/internal/server/handlers/serverhandler.go +++ b/internal/server/handlers/serverhandler.go @@ -120,15 +120,15 @@ func (h *ServerHandler) Read(p []byte) (n int, err error) { case line := <-h.lines: buf := pool.BytesBuffer.Get().(*bytes.Buffer) buf.WriteString("REMOTE") - buf.WriteByte(protocol.FieldDelimiter) + buf.WriteString(protocol.FieldDelimiter) buf.WriteString(h.hostname) - buf.WriteByte(protocol.FieldDelimiter) + buf.WriteString(protocol.FieldDelimiter) buf.WriteString(fmt.Sprintf("%3d", line.TransmittedPerc)) - buf.WriteByte(protocol.FieldDelimiter) + buf.WriteString(protocol.FieldDelimiter) buf.WriteString(fmt.Sprintf("%v", line.Count)) - buf.WriteByte(protocol.FieldDelimiter) + buf.WriteString(protocol.FieldDelimiter) buf.WriteString(line.SourceID) - buf.WriteByte(protocol.FieldDelimiter) + buf.WriteString(protocol.FieldDelimiter) payload := append(buf.Bytes(), line.Content.Bytes()...) n = copy(p, payload) pool.RecycleBytesBuffer(buf) |
