Skip to content

Commit b6f0bad

Browse files
authored
Merge pull request #12 from plentymarkets/fix_tracing
fixed tracing and added processor interface
2 parents 95fdf5b + abd4025 commit b6f0bad

1 file changed

Lines changed: 77 additions & 10 deletions

File tree

pkg/telemetry/telemetry.go

Lines changed: 77 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@ const ErrorBytesSize = 1024
1616
// Default format for telemetry driver errors
1717
const TelemetryDriverError = "Telemetry error in driver: "
1818

19+
// ErrorProcessID ...
20+
type ErrorProcessID struct {
21+
err error
22+
}
23+
24+
// Error returns the wrapped process id error
25+
func (ep ErrorProcessID) Error() string {
26+
return fmt.Sprintf("ProcessID error. Err: %w", ep.err)
27+
}
28+
1929
// Driver provides everything the application needs for telemetry
2030
// Unfortunately go currently does nur support generics inside interface methods
2131
type Driver interface {
@@ -27,6 +37,7 @@ type Transaction interface {
2737
Logger
2838
Tracer
2939
Allocator
40+
Processor
3041
Start(string)
3142
AddTransactionAttribute(string, any) error
3243
SegmentStart(string, string) error
@@ -53,6 +64,13 @@ type Allocator interface {
5364
Erase()
5465
}
5566

67+
// Processor ...
68+
type Processor interface {
69+
CreateProcessID() (string, error)
70+
SetProcessID(string) error
71+
ProcessID() (string, error)
72+
}
73+
5674
// ErrorWrapper wrapps up multiple driver errors
5775
type ErrorWrapper struct {
5876
errors []error
@@ -117,28 +135,63 @@ func Start(name string) (TransactionContainer, error) {
117135
transactionContainer.transactions[driverName] = t
118136
}
119137

120-
var trace string
138+
processID, err := transactionContainer.CreateProcessID()
139+
if err != nil {
140+
return transactionContainer, ErrorProcessID{
141+
err: err,
142+
}
143+
}
144+
145+
err = transactionContainer.SetProcessID(processID)
146+
if err != nil {
147+
return transactionContainer, ErrorProcessID{
148+
err: err,
149+
}
150+
}
151+
152+
for _, transaction := range transactionContainer.transactions {
153+
transaction.Start(name)
154+
}
121155

122-
val, ok := transactionContainer.transactions[traceDriver]
156+
return transactionContainer, nil
157+
}
158+
159+
// CreateProcessID creates the process id for all drivers depending on the trace driver
160+
func (tc *TransactionContainer) CreateProcessID() (string, error) {
161+
var processID string
162+
val, ok := tc.transactions[traceDriver]
123163
if !ok {
124-
return transactionContainer, fmt.Errorf("provided telemetry trace driver is not registered. Trace driver name: %s", traceDriver)
164+
return processID, fmt.Errorf("provided telemetry trace driver is not registered. Trace driver name: %s", traceDriver)
125165
}
126166

127-
trace, err := val.CreateTrace()
167+
processID, err := val.CreateProcessID()
128168
if err != nil {
129-
return transactionContainer, fmt.Errorf("%s%s Function: CreateTrace | Error: %w", TelemetryDriverError, traceDriver, err)
169+
return processID, fmt.Errorf("%s%s Function: CreateProcessID | Error: %w", TelemetryDriverError, traceDriver, err)
130170
}
131171

132-
err = transactionContainer.SetTrace(trace)
172+
return processID, nil
173+
}
174+
175+
// StartTracing creates and sets the trace for all drivers depending on the trace driver
176+
func (tc *TransactionContainer) StartTracing() (string, error) {
177+
var trace string
178+
179+
val, ok := tc.transactions[traceDriver]
180+
if !ok {
181+
return trace, fmt.Errorf("provided telemetry trace driver is not registered. Trace driver name: %s", traceDriver)
182+
}
183+
184+
trace, err := val.CreateTrace()
133185
if err != nil {
134-
return transactionContainer, err
186+
return trace, fmt.Errorf("%s%s Function: CreateTrace | Error: %w", TelemetryDriverError, traceDriver, err)
135187
}
136188

137-
for _, transaction := range transactionContainer.transactions {
138-
transaction.Start(name)
189+
err = tc.SetTrace(trace)
190+
if err != nil {
191+
return trace, err
139192
}
140193

141-
return transactionContainer, nil
194+
return trace, nil
142195
}
143196

144197
// AddTransactionAttribute adds attributes to the registered driver transactions
@@ -185,6 +238,20 @@ func (tc *TransactionContainer) SegmentEnd(segmentID string) {
185238
}
186239
}
187240

241+
// SetProcessID sets the trace for all transactions
242+
func (tc *TransactionContainer) SetProcessID(processID string) error {
243+
var ew ErrorWrapper
244+
245+
for driverName, transaction := range tc.transactions {
246+
err := transaction.SetProcessID(processID)
247+
if err != nil {
248+
ew.Add(fmt.Errorf("%s%s Function: SetProcessID | Error: %w", TelemetryDriverError, driverName, err))
249+
}
250+
}
251+
252+
return ew.Error()
253+
}
254+
188255
// SetTrace sets the trace for all transactions
189256
func (tc *TransactionContainer) SetTrace(trace string) error {
190257
var ew ErrorWrapper

0 commit comments

Comments
 (0)