github.com/vmware/govmomi@v0.51.0/toolbox/trace_channel.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package toolbox
     6  
     7  import (
     8  	"encoding/hex"
     9  	"flag"
    10  	"fmt"
    11  	"io"
    12  	"os"
    13  )
    14  
    15  var (
    16  	Trace = false
    17  
    18  	traceLog io.Writer = os.Stderr
    19  )
    20  
    21  func init() {
    22  	flag.BoolVar(&Trace, "toolbox.trace", Trace, "Enable toolbox trace")
    23  }
    24  
    25  type TraceChannel struct {
    26  	Channel
    27  	log io.Writer
    28  }
    29  
    30  func NewTraceChannel(c Channel) Channel {
    31  	if !Trace {
    32  		return c
    33  	}
    34  
    35  	return &TraceChannel{
    36  		Channel: c,
    37  		log:     traceLog,
    38  	}
    39  }
    40  
    41  func (d *TraceChannel) Start() error {
    42  	err := d.Channel.Start()
    43  
    44  	return err
    45  }
    46  
    47  func (d *TraceChannel) Stop() error {
    48  	err := d.Channel.Stop()
    49  
    50  	return err
    51  }
    52  
    53  func (d *TraceChannel) Send(buf []byte) error {
    54  	if len(buf) > 0 {
    55  		fmt.Fprintf(d.log, "SEND %d...\n%s\n", len(buf), hex.Dump(buf))
    56  	}
    57  
    58  	err := d.Channel.Send(buf)
    59  
    60  	return err
    61  }
    62  
    63  func (d *TraceChannel) Receive() ([]byte, error) {
    64  	buf, err := d.Channel.Receive()
    65  
    66  	if err == nil && len(buf) > 0 {
    67  		fmt.Fprintf(d.log, "RECV %d...\n%s\n", len(buf), hex.Dump(buf))
    68  	}
    69  
    70  	return buf, err
    71  }