feat: add logging to client tailnet yamux (#11908)

Adds logging to yamux when used for tailnet client connections, e.g. CLI and wsproxy.  This could be useful for debugging connection issues with tailnet v2 API.
This commit is contained in:
Spike Curtis 2024-01-30 09:58:59 +04:00 committed by GitHub
parent 0eff646c31
commit d3983e4dba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 15 additions and 8 deletions

View File

@ -436,7 +436,10 @@ func (tac *tailnetAPIConnector) dial() (proto.DRPCTailnetClient, error) {
}
return nil, err
}
client, err := tailnet.NewDRPCClient(websocket.NetConn(tac.ctx, ws, websocket.MessageBinary))
client, err := tailnet.NewDRPCClient(
websocket.NetConn(tac.ctx, ws, websocket.MessageBinary),
tac.logger,
)
if err != nil {
tac.logger.Debug(tac.ctx, "failed to create DRPCClient", slog.Error(err))
_ = ws.Close(websocket.StatusInternalError, "")

View File

@ -458,7 +458,7 @@ func (c *Client) DialCoordinator(ctx context.Context) (agpl.MultiAgentConn, erro
go httpapi.HeartbeatClose(ctx, logger, cancel, conn)
nc := websocket.NetConn(ctx, conn, websocket.MessageBinary)
client, err := agpl.NewDRPCClient(nc)
client, err := agpl.NewDRPCClient(nc, logger)
if err != nil {
logger.Debug(ctx, "failed to create DRPCClient", slog.Error(err))
_ = conn.Close(websocket.StatusInternalError, "")
@ -488,7 +488,9 @@ func (c *Client) DialCoordinator(ctx context.Context) (agpl.MultiAgentConn, erro
go func() {
<-ctx.Done()
ma.Close()
_ = ma.Close()
_ = client.DRPCConn().Close()
<-client.DRPCConn().Closed()
_ = conn.Close(websocket.StatusGoingAway, "closed")
}()

View File

@ -1,19 +1,21 @@
package tailnet
import (
"io"
"context"
"net"
"github.com/hashicorp/yamux"
"golang.org/x/xerrors"
"cdr.dev/slog"
"github.com/coder/coder/v2/codersdk/drpc"
"github.com/coder/coder/v2/tailnet/proto"
)
func NewDRPCClient(conn net.Conn) (proto.DRPCTailnetClient, error) {
func NewDRPCClient(conn net.Conn, logger slog.Logger) (proto.DRPCTailnetClient, error) {
config := yamux.DefaultConfig()
config.LogOutput = io.Discard
config.LogOutput = nil
config.Logger = slog.Stdlib(context.Background(), logger, slog.LevelInfo)
session, err := yamux.Client(conn, config)
if err != nil {
return nil, xerrors.Errorf("multiplex client: %w", err)

View File

@ -464,7 +464,7 @@ func TestRemoteCoordination(t *testing.T) {
serveErr <- err
}()
client, err := tailnet.NewDRPCClient(cC)
client, err := tailnet.NewDRPCClient(cC, logger)
require.NoError(t, err)
protocol, err := client.Coordinate(ctx)
require.NoError(t, err)

View File

@ -51,7 +51,7 @@ func TestClientService_ServeClient_V2(t *testing.T) {
errCh <- err
}()
client, err := tailnet.NewDRPCClient(c)
client, err := tailnet.NewDRPCClient(c, logger)
require.NoError(t, err)
// Coordinate