summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2021-08-28 20:10:54 +0100
committerPaul Buetow <paul@buetow.org>2021-08-28 20:10:54 +0100
commit8c2e94030d0e31289c35fcfb56499707fd4a7ccd (patch)
tree9655b6caf48e998d6a2a2ed5f4b70437b9235d29
parent6d727b9bdbc387c8a5c34406a2c4de9140face38 (diff)
make use of more buffers on server side
-rw-r--r--internal/protocol/protocol.go2
-rw-r--r--internal/server/handlers/serverhandler.go40
2 files changed, 29 insertions, 13 deletions
diff --git a/internal/protocol/protocol.go b/internal/protocol/protocol.go
index 2a570cd..43021a2 100644
--- a/internal/protocol/protocol.go
+++ b/internal/protocol/protocol.go
@@ -5,6 +5,8 @@ const (
ProtocolCompat string = "4"
// MessageDelimiter delimits separate messages.
MessageDelimiter byte = '¬'
+ // FieldDelimiter delimits aggregation fields.
+ FieldDelimiter byte = '|'
// AggregateDelimiter delimits parts of an aggregation message.
AggregateDelimiter string = "➔"
)
diff --git a/internal/server/handlers/serverhandler.go b/internal/server/handlers/serverhandler.go
index 62f3c2b..f5aefa2 100644
--- a/internal/server/handlers/serverhandler.go
+++ b/internal/server/handlers/serverhandler.go
@@ -1,6 +1,7 @@
package handlers
import (
+ "bytes"
"context"
"encoding/base64"
"errors"
@@ -93,31 +94,44 @@ func (h *ServerHandler) Read(p []byte) (n int, err error) {
}
if message[0] == '.' {
// Handle hidden message (don't display to the user, interpreted by dtail client)
- wholePayload := []byte(fmt.Sprintf("%s%s", message, string(protocol.MessageDelimiter)))
- n = copy(p, wholePayload)
+ payload := []byte(fmt.Sprintf("%s%s", message, string(protocol.MessageDelimiter)))
+ n = copy(p, payload)
return
}
// Handle normal server message (display to the user)
- wholePayload := []byte(fmt.Sprintf("SERVER|%s|%s%s", h.hostname, message, string(protocol.MessageDelimiter)))
- n = copy(p, wholePayload)
+ payload := []byte(fmt.Sprintf("SERVER|%s|%s%s", h.hostname, message, string(protocol.MessageDelimiter)))
+ n = copy(p, payload)
return
case message := <-h.aggregatedMessages:
// Send mapreduce-aggregated data as a message.
- data := fmt.Sprintf("AGGREGATE%s%s%s%s%b",
- protocol.AggregateDelimiter, h.hostname,
- protocol.AggregateDelimiter, message, protocol.MessageDelimiter)
- wholePayload := []byte(data)
- n = copy(p, wholePayload)
+ buf := pool.BytesBuffer.Get().(*bytes.Buffer)
+ buf.WriteString("AGGREGATE")
+ buf.WriteString(protocol.AggregateDelimiter)
+ buf.WriteString(h.hostname)
+ buf.WriteString(protocol.AggregateDelimiter)
+ buf.WriteString(message)
+ buf.WriteByte(protocol.MessageDelimiter)
+ n = copy(p, buf.Bytes())
+ pool.RecycleBytesBuffer(buf)
return
case line := <-h.lines:
- //fmt.Printf("\t<<<%d,%s>>>\n", len(line.Content), line.Content)
- // Send normal file content data as a message.
- payload := []byte(fmt.Sprintf("REMOTE|%s|%3d|%v|%s|%s",
- h.hostname, line.TransmittedPerc, line.Count, line.SourceID, line.Content.String()))
+ buf := pool.BytesBuffer.Get().(*bytes.Buffer)
+ buf.WriteString("REMOTE")
+ buf.WriteByte(protocol.FieldDelimiter)
+ buf.WriteString(h.hostname)
+ buf.WriteByte(protocol.FieldDelimiter)
+ buf.WriteString(fmt.Sprintf("%3d", line.TransmittedPerc))
+ buf.WriteByte(protocol.FieldDelimiter)
+ buf.WriteString(fmt.Sprintf("%v", line.Count))
+ buf.WriteByte(protocol.FieldDelimiter)
+ buf.WriteString(line.SourceID)
+ buf.WriteByte(protocol.FieldDelimiter)
+ payload := append(buf.Bytes(), line.Content.Bytes()...)
n = copy(p, payload)
+ pool.RecycleBytesBuffer(buf)
pool.RecycleBytesBuffer(line.Content)
return