summaryrefslogtreecommitdiff
path: root/internal/clients
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-01-29 21:39:06 +0200
committerPaul Buetow <paul@buetow.org>2026-01-29 21:39:06 +0200
commit599bdb74efcc97e86ce6023c1ae8265b1c2ff33b (patch)
tree6642a7401de622efc90947586f4db7a3e6ccd75d /internal/clients
parenta32f028487c2e0b9e3144cf82d4153d1cd4a5243 (diff)
refactor: improve Go best practices compliance
- Add explicit interface satisfaction checks (var _ Interface = (*Type)(nil)) for compile-time verification: - TurboWriter implementations (DirectTurboWriter, TurboChannelWriter) - Processor implementations (GrepLineProcessor, ChannellessLineProcessor) - Parser implementations (genericParser, csvParser, genericKVParser, custom parsers, mimecastParser) - Logger implementations (file, stdout) - Handler implementations (ServerHandler, ClientHandler) - Connector implementations (Serverless, ServerConnection) - SSH callback implementations (KnownHostsCallback) - Improve error handling with context wrapping (%w): - SSH operations: GeneratePrivateRSAKey, Agent - Query parsing: Query.parse - SSH client connections: dial, session, handle methods - Fix receiver consistency: - Convert Query.String() from value to pointer receiver - Convert Outfile.String() from value to pointer receiver - Convert all KnownHostsCallback methods to pointer receivers - Convert mapCommand.Start() to pointer receiver - Reorganize file structure for better clarity: - internal/io/dlog/dlog.go: Move type definition before public functions - internal/mapr/token.go: Reorganize helper functions after public ones - Add documentation comments: - Query.String() method - Outfile.String() method - Regex.String() method - Improve config variable documentation All unit tests and integration tests pass. Amp-Thread-ID: https://ampcode.com/threads/T-019c0b08-0eeb-705d-a1f7-31bb764b659a Co-authored-by: Amp <amp@ampcode.com>
Diffstat (limited to 'internal/clients')
-rw-r--r--internal/clients/connectors/serverconnection.go12
-rw-r--r--internal/clients/connectors/serverless.go2
-rw-r--r--internal/clients/handlers/clienthandler.go2
3 files changed, 11 insertions, 5 deletions
diff --git a/internal/clients/connectors/serverconnection.go b/internal/clients/connectors/serverconnection.go
index 5c3d455..34d3997 100644
--- a/internal/clients/connectors/serverconnection.go
+++ b/internal/clients/connectors/serverconnection.go
@@ -32,6 +32,8 @@ type ServerConnection struct {
throttlingDone bool
}
+var _ Connector = (*ServerConnection)(nil)
+
// NewServerConnection returns a new DTail SSH server connection.
func NewServerConnection(server string, userName string,
authMethods []ssh.AuthMethod, hostKeyCallback client.HostKeyCallback,
@@ -135,7 +137,7 @@ func (c *ServerConnection) dial(ctx context.Context, cancel context.CancelFunc,
client, err := ssh.Dial("tcp", address, c.config)
if err != nil {
- return err
+ return fmt.Errorf("failed to dial SSH connection to %s: %w", address, err)
}
defer client.Close()
@@ -149,7 +151,7 @@ func (c *ServerConnection) session(ctx context.Context, cancel context.CancelFun
dlog.Client.Debug(c.server, "Creating SSH session")
session, err := client.NewSession()
if err != nil {
- return err
+ return fmt.Errorf("failed to create SSH session for %s: %w", c.server, err)
}
defer session.Close()
return c.handle(ctx, cancel, session, throttleCh)
@@ -161,14 +163,14 @@ func (c *ServerConnection) handle(ctx context.Context, cancel context.CancelFunc
dlog.Client.Debug(c.server, "Creating handler for SSH session")
stdinPipe, err := session.StdinPipe()
if err != nil {
- return err
+ return fmt.Errorf("failed to get SSH session stdin pipe for %s: %w", c.server, err)
}
stdoutPipe, err := session.StdoutPipe()
if err != nil {
- return err
+ return fmt.Errorf("failed to get SSH session stdout pipe for %s: %w", c.server, err)
}
if err := session.Shell(); err != nil {
- return err
+ return fmt.Errorf("failed to start SSH shell for %s: %w", c.server, err)
}
go func() {
diff --git a/internal/clients/connectors/serverless.go b/internal/clients/connectors/serverless.go
index 7cebf8a..eaaa770 100644
--- a/internal/clients/connectors/serverless.go
+++ b/internal/clients/connectors/serverless.go
@@ -18,6 +18,8 @@ type Serverless struct {
userName string
}
+var _ Connector = (*Serverless)(nil)
+
// NewServerless starts a new serverless session.
func NewServerless(userName string, handler handlers.Handler,
commands []string) *Serverless {
diff --git a/internal/clients/handlers/clienthandler.go b/internal/clients/handlers/clienthandler.go
index 27ac85e..4d29429 100644
--- a/internal/clients/handlers/clienthandler.go
+++ b/internal/clients/handlers/clienthandler.go
@@ -10,6 +10,8 @@ type ClientHandler struct {
baseHandler
}
+var _ Handler = (*ClientHandler)(nil)
+
// NewClientHandler creates a new client handler.
func NewClientHandler(server string) *ClientHandler {
dlog.Client.Debug(server, "Creating new client handler")