Skip to content

Commit 1f3259e

Browse files
committed
Add explicit port handling in RESP connection callbacks
Introduced a new function, explicitPortCallbacks, to customize logging behavior based on the connection port. The NewFromAddr function now determines the appropriate callbacks to use depending on whether the default Redis port (6379) is used or a different one. This enhances the logging for commands and values sent over the connection.
1 parent 8985e5c commit 1f3259e

File tree

3 files changed

+103
-87
lines changed

3 files changed

+103
-87
lines changed

internal/instrumented_resp_connection/instrumented_resp_connection.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,36 @@
11
package instrumented_resp_connection
22

33
import (
4+
"fmt"
45
"net"
56

67
resp_connection "github.com/codecrafters-io/redis-tester/internal/resp/connection"
78
resp_value "github.com/codecrafters-io/redis-tester/internal/resp/value"
89
"github.com/codecrafters-io/tester-utils/logger"
910
)
1011

12+
const REDIS_DEFAULT_PORT = 6379
13+
1114
type InstrumentedRespConnection struct {
1215
*resp_connection.RespConnection
1316

1417
// Logger is used to log a connection's network activity (sent/received)
1518
logger *logger.Logger
1619
}
1720

18-
func defaultCallbacks(logger *logger.Logger) resp_connection.RespConnectionCallbacks {
21+
func defaultCallbacks(logger *logger.Logger, remoteAddr net.Addr) resp_connection.RespConnectionCallbacks {
1922
return resp_connection.RespConnectionCallbacks{
2023
BeforeSendCommand: func(reusedConnection bool, command string, args ...string) {
2124
var commandPrefix string
2225
if reusedConnection {
2326
commandPrefix = ">"
2427
} else {
25-
commandPrefix = "$ redis-cli"
28+
remotePort := remoteAddr.(*net.TCPAddr).Port
29+
if remotePort == REDIS_DEFAULT_PORT {
30+
commandPrefix = "$ redis-cli"
31+
} else {
32+
commandPrefix = fmt.Sprintf("$ redis-cli -p %d", remotePort)
33+
}
2634
}
2735

2836
commandWithArgs := append([]string{command}, args...)
@@ -46,7 +54,13 @@ func defaultCallbacks(logger *logger.Logger) resp_connection.RespConnectionCallb
4654
func NewFromAddr(baseLogger *logger.Logger, addr string, connIdentifier string) (*InstrumentedRespConnection, error) {
4755
logger := baseLogger.Clone()
4856
logger.PushSecondaryPrefix(connIdentifier)
49-
c, err := resp_connection.NewRespConnectionFromAddr(addr, defaultCallbacks(logger))
57+
58+
remoteAddr, err := net.ResolveTCPAddr("tcp", addr)
59+
if err != nil {
60+
return nil, err
61+
}
62+
63+
c, err := resp_connection.NewRespConnectionFromAddr(addr, defaultCallbacks(logger, remoteAddr))
5064
if err != nil {
5165
return nil, err
5266
}
@@ -59,7 +73,8 @@ func NewFromAddr(baseLogger *logger.Logger, addr string, connIdentifier string)
5973
func NewFromConn(baseLogger *logger.Logger, conn net.Conn, connIdentifier string) (*InstrumentedRespConnection, error) {
6074
logger := baseLogger.Clone()
6175
logger.PushSecondaryPrefix(connIdentifier)
62-
c, err := resp_connection.NewRespConnectionFromConn(conn, defaultCallbacks(logger))
76+
77+
c, err := resp_connection.NewRespConnectionFromConn(conn, defaultCallbacks(logger, conn.RemoteAddr()))
6378
if err != nil {
6479
return nil, err
6580
}
@@ -83,7 +98,8 @@ func (c *InstrumentedRespConnection) UpdateBaseLogger(l *logger.Logger) {
8398
newLogger := l.Clone()
8499
newLogger.PushSecondaryPrefix(c.GetIdentifier())
85100
c.logger = newLogger
86-
c.UpdateCallBacks(defaultCallbacks(c.logger))
101+
102+
c.UpdateCallBacks(defaultCallbacks(c.logger, c.Conn.RemoteAddr()))
87103
}
88104

89105
func (c *InstrumentedRespConnection) SetReadValueInterceptor(transformer func(value resp_value.Value) resp_value.Value) {

0 commit comments

Comments
 (0)