Skip to content

Commit 989fe06

Browse files
author
Sebastian Schwarz
authored
Merge pull request #2 from plentymarkets/telemetry
add trace handling
2 parents 4f22404 + e7f4a4b commit 989fe06

1 file changed

Lines changed: 52 additions & 6 deletions

File tree

pkg/telemetry/telemetry.go

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package telemetry
22

33
import (
4+
"fmt"
45
"io"
56
"log"
67
"strings"
@@ -18,12 +19,21 @@ type Driver interface {
1819
// Transaction ...
1920
type Transaction interface {
2021
Logger
22+
Tracer
2123
AddAttribute(string, any)
2224
SegmentStart(string)
2325
SegmentEnd()
26+
DriverName() string
2427
Done()
2528
}
2629

30+
// Tracer ...
31+
type Tracer interface {
32+
CreateTrace() string
33+
SetTrace(string)
34+
Trace() string
35+
}
36+
2737
// Logger ...
2838
type Logger interface {
2939
Info(io.ReadCloser)
@@ -36,6 +46,9 @@ var registeredDriver map[string]Driver
3646
// loadedDriver is a list of drivers to use for the application
3747
var loadedDriver []string
3848

49+
// traceDriver is the driver used for the trace
50+
var traceDriver string
51+
3952
// RegisterDriver adds the possibilty to add a driver to the driver map
4053
func RegisterDriver(name string, driver Driver) {
4154
if registeredDriver == nil {
@@ -60,24 +73,40 @@ func SetDriver(name ...string) {
6073
loadedDriver = name
6174
}
6275

76+
// SetTraceDriver ...
77+
func SetTraceDriver(name string) {
78+
traceDriver = name
79+
}
80+
6381
// TransactionContainer ...
6482
type TransactionContainer struct {
65-
transactions []Transaction
83+
transactions map[string]Transaction
6684
}
6785

68-
// StartAPM ...
69-
func StartAPM(name string) TransactionContainer {
86+
// StartTelemetry ...
87+
func StartTelemetry(name string) (TransactionContainer, error) {
7088
transactionContainer := TransactionContainer{
71-
transactions: make([]Transaction, len(loadedDriver)),
89+
transactions: make(map[string]Transaction, len(loadedDriver)),
7290
}
7391

7492
for _, driverName := range loadedDriver {
7593
driver := getDriver(driverName)
7694
t := driver.Start(name)
77-
transactionContainer.transactions = append(transactionContainer.transactions, t)
95+
transactionContainer.transactions[driverName] = t
7896
}
7997

80-
return transactionContainer
98+
var trace string
99+
100+
val, ok := transactionContainer.transactions[traceDriver]
101+
if !ok {
102+
return transactionContainer, fmt.Errorf("provided telemetry trace driver is not registered. Trace driver name: %s", name)
103+
}
104+
105+
trace = val.CreateTrace()
106+
107+
transactionContainer.SetTrace(trace)
108+
109+
return transactionContainer, nil
81110
}
82111

83112
// AddAttribute adds attributes to the registered driver transactions
@@ -101,6 +130,23 @@ func (tc *TransactionContainer) SegmentEnd() {
101130
}
102131
}
103132

133+
// SetTrace sets the trace for all transactions
134+
func (tc *TransactionContainer) SetTrace(trace string) {
135+
for _, transaction := range tc.transactions {
136+
transaction.SetTrace(trace)
137+
}
138+
}
139+
140+
// Trace gets the trace of the transaction used for trace
141+
func (tc *TransactionContainer) Trace() (string, error) {
142+
val, ok := tc.transactions[traceDriver]
143+
if !ok {
144+
return "", fmt.Errorf("provided telemetry trace driver is not registered. Trace driver name: %s", traceDriver)
145+
}
146+
147+
return val.Trace(), nil
148+
}
149+
104150
// Done ends the transactions for the registered driver
105151
func (tc *TransactionContainer) Done() {
106152
for _, transaction := range tc.transactions {

0 commit comments

Comments
 (0)