github.com/Jeffail/benthos/v3@v3.65.0/public/service/tracing.go (about)

     1  package service
     2  
     3  import (
     4  	"sync/atomic"
     5  
     6  	"github.com/Jeffail/benthos/v3/internal/bundle/tracing"
     7  )
     8  
     9  // TracingEventType describes the type of tracing event a component might
    10  // experience during a config run.
    11  //
    12  // Experimental: This type may change outside of major version releases.
    13  type TracingEventType string
    14  
    15  // Various tracing event types.
    16  //
    17  // Experimental: This type may change outside of major version releases.
    18  var (
    19  	// Note: must match up with ./internal/bundle/tracing/events.go
    20  	TracingEventProduce TracingEventType = "PRODUCE"
    21  	TracingEventConsume TracingEventType = "CONSUME"
    22  	TracingEventDelete  TracingEventType = "DELETE"
    23  	TracingEventError   TracingEventType = "ERROR"
    24  	TracingEventUnknown TracingEventType = "UNKNOWN"
    25  )
    26  
    27  func convertTracingEventType(t tracing.EventType) TracingEventType {
    28  	switch t {
    29  	case tracing.EventProduce:
    30  		return TracingEventProduce
    31  	case tracing.EventConsume:
    32  		return TracingEventConsume
    33  	case tracing.EventDelete:
    34  		return TracingEventDelete
    35  	case tracing.EventError:
    36  		return TracingEventError
    37  	}
    38  	return TracingEventUnknown
    39  }
    40  
    41  // TracingEvent represents a single event that occured within the stream.
    42  //
    43  // Experimental: This type may change outside of major version releases.
    44  type TracingEvent struct {
    45  	Type    TracingEventType
    46  	Content string
    47  }
    48  
    49  // TracingSummary is a high level description of all traced events. When tracing
    50  // a stream this should only be queried once the stream has ended.
    51  //
    52  // Experimental: This type may change outside of major version releases.
    53  type TracingSummary struct {
    54  	summary *tracing.Summary
    55  }
    56  
    57  // TotalInput returns the total traced input messages received.
    58  //
    59  // Experimental: This method may change outside of major version releases.
    60  func (s *TracingSummary) TotalInput() uint64 {
    61  	return atomic.LoadUint64(&s.summary.Input)
    62  }
    63  
    64  // TotalProcessorErrors returns the total traced processor errors occurred.
    65  //
    66  // Experimental: This method may change outside of major version releases.
    67  func (s *TracingSummary) TotalProcessorErrors() uint64 {
    68  	return atomic.LoadUint64(&s.summary.ProcessorErrors)
    69  }
    70  
    71  // TotalOutput returns the total traced output messages received.
    72  //
    73  // Experimental: This method may change outside of major version releases.
    74  func (s *TracingSummary) TotalOutput() uint64 {
    75  	return atomic.LoadUint64(&s.summary.Output)
    76  }
    77  
    78  // InputEvents returns a map of input labels to events traced during the
    79  // execution of a stream pipeline.
    80  //
    81  // Experimental: This method may change outside of major version releases.
    82  func (s *TracingSummary) InputEvents() map[string][]TracingEvent {
    83  	m := map[string][]TracingEvent{}
    84  	for k, v := range s.summary.InputEvents() {
    85  		events := make([]TracingEvent, len(v))
    86  		for i, e := range v {
    87  			events[i] = TracingEvent{
    88  				Type:    convertTracingEventType(e.Type),
    89  				Content: e.Content,
    90  			}
    91  		}
    92  		m[k] = events
    93  	}
    94  	return m
    95  }
    96  
    97  // ProcessorEvents returns a map of processor labels to events traced during the
    98  // execution of a stream pipeline.
    99  //
   100  // Experimental: This method may change outside of major version releases.
   101  func (s *TracingSummary) ProcessorEvents() map[string][]TracingEvent {
   102  	m := map[string][]TracingEvent{}
   103  	for k, v := range s.summary.ProcessorEvents() {
   104  		events := make([]TracingEvent, len(v))
   105  		for i, e := range v {
   106  			events[i] = TracingEvent{
   107  				Type:    convertTracingEventType(e.Type),
   108  				Content: e.Content,
   109  			}
   110  		}
   111  		m[k] = events
   112  	}
   113  	return m
   114  }
   115  
   116  // OutputEvents returns a map of output labels to events traced during the
   117  // execution of a stream pipeline.
   118  //
   119  // Experimental: This method may change outside of major version releases.
   120  func (s *TracingSummary) OutputEvents() map[string][]TracingEvent {
   121  	m := map[string][]TracingEvent{}
   122  	for k, v := range s.summary.OutputEvents() {
   123  		events := make([]TracingEvent, len(v))
   124  		for i, e := range v {
   125  			events[i] = TracingEvent{
   126  				Type:    convertTracingEventType(e.Type),
   127  				Content: e.Content,
   128  			}
   129  		}
   130  		m[k] = events
   131  	}
   132  	return m
   133  }