mirror of
https://github.com/ceph/go-ceph
synced 2025-01-24 15:13:34 +00:00
commands: port tracing helper type from cephfs/admin
This debugging code can be made common. Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
6b3b0fdc46
commit
0b1e3f5d7e
51
internal/commands/trace.go
Normal file
51
internal/commands/trace.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewTraceCommander is a RadosCommander that wraps a given RadosCommander
|
||||||
|
// and when commands are executes prints debug level "traces" to the
|
||||||
|
// standard output.
|
||||||
|
func NewTraceCommander(c RadosCommander) RadosCommander {
|
||||||
|
return &tracingCommander{c}
|
||||||
|
}
|
||||||
|
|
||||||
|
// tracingCommander serves two purposes: first, it allows one to trace the
|
||||||
|
// input and output json when running the tests. It can help with actually
|
||||||
|
// debugging the tests. Second, it demonstrates the rationale for using an
|
||||||
|
// interface in FSAdmin. You can layer any sort of debugging, error injection,
|
||||||
|
// or whatnot between the FSAdmin layer and the RADOS layer.
|
||||||
|
type tracingCommander struct {
|
||||||
|
conn RadosCommander
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *tracingCommander) MgrCommand(buf [][]byte) ([]byte, string, error) {
|
||||||
|
fmt.Println("(MGR Command)")
|
||||||
|
for i := range buf {
|
||||||
|
fmt.Println("IN:", string(buf[i]))
|
||||||
|
}
|
||||||
|
r, s, err := t.conn.MgrCommand(buf)
|
||||||
|
fmt.Println("OUT(result):", string(r))
|
||||||
|
if s != "" {
|
||||||
|
fmt.Println("OUT(status):", s)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("OUT(error):", err.Error())
|
||||||
|
}
|
||||||
|
return r, s, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *tracingCommander) MonCommand(buf []byte) ([]byte, string, error) {
|
||||||
|
fmt.Println("(MON Command)")
|
||||||
|
fmt.Println("IN:", string(buf))
|
||||||
|
r, s, err := t.conn.MonCommand(buf)
|
||||||
|
fmt.Println("OUT(result):", string(r))
|
||||||
|
if s != "" {
|
||||||
|
fmt.Println("OUT(status):", s)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("OUT(error):", err.Error())
|
||||||
|
}
|
||||||
|
return r, s, err
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user