Skip to content

Commit

Permalink
Truncate payload printed in the UI
Browse files Browse the repository at this point in the history
Added a flag --max-payload-length to allow customizing the value
  • Loading branch information
hibiken committed Oct 21, 2021
1 parent 700a8a7 commit b92ef4c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
22 changes: 21 additions & 1 deletion cmd/asynqmon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ var (
flagRedisURL string
flagRedisInsecureTLS bool
flagRedisClusterNodes string
flagMaxPayloadLength int
)

func init() {
Expand All @@ -37,6 +38,7 @@ func init() {
flag.StringVar(&flagRedisURL, "redis-url", "", "URL to redis server")
flag.BoolVar(&flagRedisInsecureTLS, "redis-insecure-tls", false, "disable TLS certificate host checks")
flag.StringVar(&flagRedisClusterNodes, "redis-cluster-nodes", "", "comma separated list of host:port addresses of cluster nodes")
flag.IntVar(&flagMaxPayloadLength, "max-payload-length", 200, "maximum number of utf8 characters printed in the payload cell in the Web UI")
}

// TODO: Write test and refactor this code.
Expand Down Expand Up @@ -98,7 +100,8 @@ func main() {
}

h := asynqmon.New(asynqmon.Options{
RedisConnOpt: redisConnOpt,
RedisConnOpt: redisConnOpt,
PayloadFormatter: asynqmon.PayloadFormatterFunc(formatPayload),
})
defer h.Close()

Expand All @@ -116,3 +119,20 @@ func main() {
fmt.Printf("Asynq Monitoring WebUI server is listening on port %d\n", flagPort)
log.Fatal(srv.ListenAndServe())
}

func formatPayload(taskType string, payload []byte) string {
payloadStr := asynqmon.DefaultPayloadFormatter.FormatPayload(taskType, payload)
return truncate(payloadStr, flagMaxPayloadLength)
}

// truncates string s to limit length (in utf8).
func truncate(s string, limit int) string {
i := 0
for pos := range s {
if i == limit {
return s[:pos] + "…"
}
i++
}
return s
}
5 changes: 4 additions & 1 deletion conversion_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ func (f PayloadFormatterFunc) FormatPayload(taskType string, payload []byte) str
return f(taskType, payload)
}

var defaultPayloadFormatter = PayloadFormatterFunc(func(_ string, payload []byte) string {
// DefaultPayloadFormatter is the PayloadFormater used by default.
// It prints the given payload bytes as is if the bytes are printable, otherwise it prints a message to indicate
// that the bytes are not printable.
var DefaultPayloadFormatter = PayloadFormatterFunc(func(_ string, payload []byte) string {
if !isPrintable(payload) {
return "non-printable bytes"
}
Expand Down
2 changes: 1 addition & 1 deletion handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ var staticContents embed.FS
func muxRouter(opts Options, rc redis.UniversalClient, inspector *asynq.Inspector) *mux.Router {
router := mux.NewRouter().PathPrefix(opts.RootPath).Subrouter()

var pf PayloadFormatter = defaultPayloadFormatter
var pf PayloadFormatter = DefaultPayloadFormatter
if opts.PayloadFormatter != nil {
pf = opts.PayloadFormatter
}
Expand Down

0 comments on commit b92ef4c

Please sign in to comment.