summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handlers/colorwriter.go43
-rw-r--r--internal/server/handlers/readcommand.go8
2 files changed, 47 insertions, 4 deletions
diff --git a/internal/server/handlers/colorwriter.go b/internal/server/handlers/colorwriter.go
new file mode 100644
index 0000000..6e0f1af
--- /dev/null
+++ b/internal/server/handlers/colorwriter.go
@@ -0,0 +1,43 @@
+package handlers
+
+import (
+ "io"
+ "github.com/mimecast/dtail/internal/color/brush"
+ "github.com/mimecast/dtail/internal/config"
+)
+
+// ColorWriter wraps an io.Writer and applies colors to output
+type ColorWriter struct {
+ writer io.Writer
+ noColor bool
+}
+
+// NewColorWriter creates a new ColorWriter
+func NewColorWriter(writer io.Writer, noColor bool) *ColorWriter {
+ return &ColorWriter{
+ writer: writer,
+ noColor: noColor,
+ }
+}
+
+// Write implements io.Writer, applying colors if enabled
+func (cw *ColorWriter) Write(p []byte) (n int, err error) {
+ if cw.noColor || !config.Client.TermColorsEnable {
+ // No colors, write as-is
+ return cw.writer.Write(p)
+ }
+
+ // Apply colors
+ coloredStr := brush.Colorfy(string(p))
+ coloredBytes := []byte(coloredStr)
+
+ // Write the colored output
+ _, err = cw.writer.Write(coloredBytes)
+ if err != nil {
+ return 0, err
+ }
+
+ // Return the original byte count to maintain compatibility
+ // (the caller expects n to match len(p))
+ return len(p), nil
+} \ No newline at end of file
diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go
index 616bf31..0a99aaa 100644
--- a/internal/server/handlers/readcommand.go
+++ b/internal/server/handlers/readcommand.go
@@ -146,8 +146,8 @@ func (r *readCommand) readFiles(ctx context.Context, ltx lcontext.LContext,
// Choose output writer based on server mode
var output io.Writer
if r.server.serverless {
- // In serverless mode, write directly to stdout
- output = os.Stdout
+ // In serverless mode, write to stdout with color support
+ output = NewColorWriter(os.Stdout, r.server.plain)
} else {
// In client-server mode, write to server handler lines channel
output = NewServerHandlerWriter(r.server, r.server.serverMessages, r.server.user)
@@ -216,8 +216,8 @@ func (r *readCommand) readStdin(ctx context.Context, ltx lcontext.LContext, re r
// Choose output writer based on server mode
var output io.Writer
if r.server.serverless {
- // In serverless mode, write directly to stdout
- output = os.Stdout
+ // In serverless mode, write to stdout with color support
+ output = NewColorWriter(os.Stdout, r.server.plain)
} else {
// In client-server mode, write to server handler lines channel
output = NewServerHandlerWriter(r.server, r.server.serverMessages, r.server.user)