diff --git a/restapi/admin_trace.go b/restapi/admin_trace.go index c6583cfb6..b7e33a211 100644 --- a/restapi/admin_trace.go +++ b/restapi/admin_trace.go @@ -48,14 +48,15 @@ type callStats struct { Ttfb string `json:"timeToFirstByte"` } +type serviceTraceOpts struct { + AllTraffic bool + ErrOnly bool +} + // startTraceInfo starts trace of the servers -func startTraceInfo(ctx context.Context, conn WSConn, client MinioAdmin) error { - // trace all traffic - allTraffic := true - // Trace failed requests only - errOnly := false +func startTraceInfo(ctx context.Context, conn WSConn, client MinioAdmin, opts serviceTraceOpts) error { // Start listening on all trace activity. - traceCh := client.serviceTrace(ctx, allTraffic, errOnly) + traceCh := client.serviceTrace(ctx, opts.AllTraffic, opts.ErrOnly) for { select { case <-ctx.Done(): diff --git a/restapi/admin_trace_test.go b/restapi/admin_trace_test.go index a135d54f0..75ebfff08 100644 --- a/restapi/admin_trace_test.go +++ b/restapi/admin_trace_test.go @@ -83,7 +83,7 @@ func TestAdminTrace(t *testing.T) { writesCount++ return nil } - if err := startTraceInfo(ctx, mockWSConn, adminClient); err != nil { + if err := startTraceInfo(ctx, mockWSConn, adminClient, serviceTraceOpts{AllTraffic: true, ErrOnly: false}); err != nil { t.Errorf("Failed on %s:, error occurred: %s", function, err.Error()) } // check that the TestReceiver got the same number of data from trace. @@ -95,7 +95,7 @@ func TestAdminTrace(t *testing.T) { connWriteMessageMock = func(messageType int, data []byte) error { return fmt.Errorf("error on write") } - if err := startTraceInfo(ctx, mockWSConn, adminClient); assert.Error(err) { + if err := startTraceInfo(ctx, mockWSConn, adminClient, serviceTraceOpts{}); assert.Error(err) { assert.Equal("error on write", err.Error()) } @@ -121,7 +121,7 @@ func TestAdminTrace(t *testing.T) { connWriteMessageMock = func(messageType int, data []byte) error { return nil } - if err := startTraceInfo(ctx, mockWSConn, adminClient); assert.Error(err) { + if err := startTraceInfo(ctx, mockWSConn, adminClient, serviceTraceOpts{}); assert.Error(err) { assert.Equal("error on trace", err.Error()) } } diff --git a/restapi/ws_handle.go b/restapi/ws_handle.go index 2b520aa9c..8c9cf6624 100644 --- a/restapi/ws_handle.go +++ b/restapi/ws_handle.go @@ -253,7 +253,10 @@ func (wsc *wsAdminClient) trace() { ctx := wsReadClientCtx(wsc.conn) - err := startTraceInfo(ctx, wsc.conn, wsc.client) + err := startTraceInfo(ctx, wsc.conn, wsc.client, serviceTraceOpts{ + AllTraffic: false, + ErrOnly: false, + }) sendWsCloseMessage(wsc.conn, err) }