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 }