11package instrumented_resp_connection
22
33import (
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+
1114type 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
4654func 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)
5973func 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
89105func (c * InstrumentedRespConnection ) SetReadValueInterceptor (transformer func (value resp_value.Value ) resp_value.Value ) {
0 commit comments