Skip to content

Commit

Permalink
allow limit to traced message
Browse files Browse the repository at this point in the history
  • Loading branch information
andyxning committed Jul 12, 2019
1 parent 94071d3 commit f700d21
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 2 deletions.
11 changes: 9 additions & 2 deletions server/client.go
Expand Up @@ -1010,8 +1010,15 @@ func (c *client) traceMsg(msg []byte) {
if !c.trace {
return
}
// FIXME(dlc), allow limits to printable payload.
c.Tracef("<<- MSG_PAYLOAD: [%q]", msg[:len(msg)-LEN_CR_LF])

origLength := len(msg) - LEN_CR_LF
validLength := origLength
formatter := "<<- MSG_PAYLOAD: [%q]"
if origLength > c.srv.getOpts().MaxTracedMsgLen {
validLength = c.srv.getOpts().MaxTracedMsgLen
formatter = "<<- MSG_PAYLOAD: [\"%s...\"]"
}
c.Tracef(formatter, msg[:validLength])
}

func (c *client) traceInOp(op string, arg []byte) {
Expand Down
3 changes: 3 additions & 0 deletions server/const.go
Expand Up @@ -163,4 +163,7 @@ const (
// DEFAULT_RTT_MEASUREMENT_INTERVAL is how often we want to measure RTT from
// this server to clients, routes, gateways or leafnode connections.
DEFAULT_RTT_MEASUREMENT_INTERVAL = time.Hour

// MAX_TRACED_MSG_LEN is the maximum printable length for traced messages.
MAX_TRACED_MSG_LEN = 1024
)
8 changes: 8 additions & 0 deletions server/opts.go
Expand Up @@ -190,6 +190,8 @@ type Options struct {
WriteDeadline time.Duration `json:"-"`
MaxClosedClients int `json:"-"`
LameDuckDuration time.Duration `json:"-"`
// MaxTracedMsgLen is the maximum printable length for traced messages.
MaxTracedMsgLen int `json:"max_traced_msg_len"`

// Operating a trusted NATS server
TrustedKeys []string `json:"-"`
Expand Down Expand Up @@ -539,6 +541,8 @@ func (o *Options) ProcessConfigFile(configFile string) error {
o.MaxPending = v.(int64)
case "max_connections", "max_conn":
o.MaxConn = int(v.(int64))
case "max_traced_msg_len":
o.MaxTracedMsgLen = int(v.(int64))
case "max_subscriptions", "max_subs":
o.MaxSubs = int(v.(int64))
case "ping_interval":
Expand Down Expand Up @@ -2482,6 +2486,9 @@ func setBaselineOptions(opts *Options) {
if opts.ReconnectErrorReports == 0 {
opts.ReconnectErrorReports = DEFAULT_RECONNECT_ERROR_REPORTS
}
if opts.MaxTracedMsgLen == -1 {
opts.MaxTracedMsgLen = MAX_TRACED_MSG_LEN
}
}

// ConfigureOptions accepts a flag set and augment it with NATS Server
Expand Down Expand Up @@ -2551,6 +2558,7 @@ func ConfigureOptions(fs *flag.FlagSet, args []string, printVersion, printHelp,
fs.StringVar(&opts.TLSCert, "tlscert", "", "Server certificate file.")
fs.StringVar(&opts.TLSKey, "tlskey", "", "Private key for server certificate.")
fs.StringVar(&opts.TLSCaCert, "tlscacert", "", "Client certificate CA for verification.")
fs.IntVar(&opts.MaxTracedMsgLen, "max_traced_msg_len", -1, "Maximum printable length for traced messages")

// The flags definition above set "default" values to some of the options.
// Calling Parse() here will override the default options with any value
Expand Down
1 change: 1 addition & 0 deletions server/opts_test.go
Expand Up @@ -61,6 +61,7 @@ func TestDefaultOptions(t *testing.T) {
},
ConnectErrorReports: DEFAULT_CONNECT_ERROR_REPORTS,
ReconnectErrorReports: DEFAULT_RECONNECT_ERROR_REPORTS,
MaxTracedMsgLen: MAX_TRACED_MSG_LEN,
}

opts := &Options{}
Expand Down

0 comments on commit f700d21

Please sign in to comment.