Skip to content

Commit

Permalink
Use traceProvider instead of trace
Browse files Browse the repository at this point in the history
Signed-off-by: FlamingSaint <[email protected]>
  • Loading branch information
FlamingSaint committed Jun 30, 2024
1 parent 2b425d4 commit 3c3297b
Show file tree
Hide file tree
Showing 9 changed files with 32 additions and 57 deletions.
14 changes: 2 additions & 12 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import (

"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/embedded"
)

// Get makes a traced HTTP GET call.
func Get(ctx context.Context, url string, tracer trace.Tracer) error {
func Get(ctx context.Context, url string, tp trace.TracerProvider) error {
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return err
Expand All @@ -20,7 +19,7 @@ func Get(ctx context.Context, url string, tracer trace.Tracer) error {
client := http.Client{
Transport: otelhttp.NewTransport(
http.DefaultTransport,
otelhttp.WithTracerProvider(&tracerProvider{tracer: tracer}),
otelhttp.WithTracerProvider(tp),
),
}
res, err := client.Do(req)
Expand All @@ -35,12 +34,3 @@ func Get(ctx context.Context, url string, tracer trace.Tracer) error {

return nil
}

type tracerProvider struct {
embedded.TracerProvider
tracer trace.Tracer
}

func (p *tracerProvider) Tracer(_ string, _ ...trace.TracerOption) trace.Tracer {
return p.tracer
}
10 changes: 5 additions & 5 deletions model/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func (c *Config) Run() {
}

func (c *Config) runWorker(instanceName string, stop chan struct{}, done *sync.WaitGroup) {
tracer, shutdown, err := tracing.InitTracer("test-executor", instanceName)
tracerProvider, shutdown, err := tracing.InitTracer("test-executor", instanceName)
if err != nil {
log.Fatalf("failed to create a tracer: %v", err)
}
Expand All @@ -98,7 +98,7 @@ func (c *Config) runWorker(instanceName string, stop chan struct{}, done *sync.W
case <-stop:
return
default:
c.runTest(tracer)
c.runTest(tracerProvider)
}
if repeats > 0 {
repeats--
Expand All @@ -109,19 +109,19 @@ func (c *Config) runWorker(instanceName string, stop chan struct{}, done *sync.W
}
}

func (c *Config) runTest(tracer trace.Tracer) {
func (c *Config) runTest(tracerProvider trace.TracerProvider) {
rootSvc := c.Services[0]
inst := rootSvc.instances[0]
endpoint := inst.Endpoints[0]

tracer := tracerProvider.Tracer("otel") // TODO: Need to verify this line of code
ctx, rootSpan := tracer.Start(
context.Background(),
"runTest",
trace.WithAttributes(attribute.String("test_name", c.TestName)),
)
defer rootSpan.End()

err := endpoint.Call(ctx, tracer)
err := endpoint.Call(ctx, tracerProvider)
if err != nil {
log.Printf("transaction failed: %v", err)
}
Expand Down
8 changes: 4 additions & 4 deletions model/dependencies.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ func (d *Dependencies) Validate(r *Registry) error {
}

// Call makes calls to all dependencies.
func (d *Dependencies) Call(ctx context.Context, tracer trace.Tracer) error {
func (d *Dependencies) Call(ctx context.Context, tracerProvider trace.TracerProvider) error {
if len(d.Seq) > 0 {
return d.Seq.Call(ctx, tracer)
return d.Seq.Call(ctx, tracerProvider)
}
if d.Par != nil {
return d.Par.Call(ctx, tracer)
return d.Par.Call(ctx, tracerProvider)
}
return d.Service.Call(ctx, tracer)
return d.Service.Call(ctx, tracerProvider)
}
6 changes: 3 additions & 3 deletions model/endpoint_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ func (e *EndpointInstance) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// executes the endpoint, calling dependencies if necessary.
func (e *EndpointInstance) execute(ctx context.Context) error {
if e.Depends != nil {
if err := e.Depends.Call(ctx, e.service.tracing.tracer); err != nil {
if err := e.Depends.Call(ctx, e.service.tracing.tracerProvider); err != nil {
return err
}
}
return e.Perf.Apply(ctx)
}

// Call makes a call to this endpoint.
func (e *EndpointInstance) Call(ctx context.Context, tracer trace.Tracer) error {
func (e *EndpointInstance) Call(ctx context.Context, tracerProvider trace.TracerProvider) error {
url := e.service.server.URL + e.Name
return client.Get(ctx, url, tracer)
return client.Get(ctx, url, tracerProvider)
}
12 changes: 6 additions & 6 deletions model/parallel.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ func (p *Parallel) Validate(r *Registry) error {
}

// Call makes calls to all dependencies.
func (p *Parallel) Call(ctx context.Context, tracer trace.Tracer) error {
func (p *Parallel) Call(ctx context.Context, tracerProvider trace.TracerProvider) error {
if p.MaxPar == 0 {
return p.fullParCall(ctx, tracer)
return p.fullParCall(ctx, tracerProvider)
}
return p.maxParCall(ctx, tracer)
return p.maxParCall(ctx, tracerProvider)
}

func (p *Parallel) fullParCall(ctx context.Context, tracer trace.Tracer) error {
func (p *Parallel) fullParCall(ctx context.Context, tracerProvider trace.TracerProvider) error {
// done := &sync.WaitGroup{}
// done.Add(len(p.Items))

Expand All @@ -54,7 +54,7 @@ func (p *Parallel) fullParCall(ctx context.Context, tracer trace.Tracer) error {
return nil
}

func (p *Parallel) maxParCall(ctx context.Context, tracer trace.Tracer) error {
func (p *Parallel) maxParCall(ctx context.Context, tracerProvider trace.TracerProvider) error {
done := &sync.WaitGroup{}
done.Add(len(p.Items))

Expand All @@ -70,7 +70,7 @@ func (p *Parallel) maxParCall(ctx context.Context, tracer trace.Tracer) error {
for i := 0; i < p.MaxPar; i++ {
go func() {
for n := range ch {
err := p.Items[n].Call(ctx, tracer)
err := p.Items[n].Call(ctx, tracerProvider)
if err != nil {
errMutex.Lock()
topErrors = append(topErrors, err)
Expand Down
4 changes: 2 additions & 2 deletions model/sequence.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ func (s Sequence) Validate(r *Registry) error {
}

// Call makes calls to all dependencies.
func (s Sequence) Call(ctx context.Context, tracer trace.Tracer) error {
func (s Sequence) Call(ctx context.Context, tracerProvider trace.TracerProvider) error {
for _, dep := range s {
if err := dep.Call(ctx, tracer); err != nil {
if err := dep.Call(ctx, tracerProvider); err != nil {
return err
}
}
Expand Down
4 changes: 2 additions & 2 deletions model/service_dep.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func (s *ServiceDep) Validate(r *Registry) error {
}

// Call makes call to dependency service.
func (s *ServiceDep) Call(ctx context.Context, tracer trace.Tracer) error {
func (s *ServiceDep) Call(ctx context.Context, tracerProvider trace.TracerProvider) error {
url := s.service.NextServerURL() + s.endpoint.Name
return client.Get(ctx, url, tracer)
return client.Get(ctx, url, tracerProvider)
}
24 changes: 5 additions & 19 deletions model/service_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/yurishkuro/microsim/tracing"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/embedded"
)

// ServiceInstance represents a single instance of a service.
Expand All @@ -17,20 +16,20 @@ type ServiceInstance struct {
service *Service
server *httptest.Server
tracing struct {
tracer trace.Tracer
shutdown func()
tracerProvider trace.TracerProvider
shutdown func()
}
}

func startServiceInstance(service *Service, instanceName string) (*ServiceInstance, error) {
tracer, shutdown, err := tracing.InitTracer(service.Name, instanceName)
tracerProvider, shutdown, err := tracing.InitTracer(service.Name, instanceName)
if err != nil {
return nil, err
}
inst := &ServiceInstance{
service: service,
}
inst.tracing.tracer = tracer
inst.tracing.tracerProvider = tracerProvider
inst.tracing.shutdown = shutdown
inst.server = httptest.NewServer(inst.mux())
log.Printf("started service instance %s at %s", instanceName, inst.server.URL)
Expand All @@ -46,7 +45,7 @@ func (inst *ServiceInstance) mux() http.Handler {
wrappedHandler := otelhttp.NewHandler(
endpointInstance,
endpointInstance.Name,
otelhttp.WithTracerProvider(newSingletonTracerProvider(inst.tracing.tracer)),
otelhttp.WithTracerProvider(inst.tracing.tracerProvider),
otelhttp.WithSpanNameFormatter(func(_ string, _ *http.Request) string {
return endpointInstance.Name
}),
Expand All @@ -62,16 +61,3 @@ func (inst *ServiceInstance) Stop() {
inst.tracing.shutdown()
log.Printf("stopped service instance %s", inst.service.Name)
}

type singletonTracerProvider struct {
embedded.TracerProvider
tracer trace.Tracer
}

func (p *singletonTracerProvider) Tracer(_ string, _ ...trace.TracerOption) trace.Tracer {
return p.tracer
}

func newSingletonTracerProvider(tracer trace.Tracer) trace.TracerProvider {
return &singletonTracerProvider{tracer: tracer}
}
7 changes: 3 additions & 4 deletions tracing/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
var JaegerCollectorURL = "http://localhost:14268/api/traces"

// InitTracer creates a new tracer for a service.
func InitTracer(serviceName, instanceName string) (trace.Tracer, func(), error) {
func InitTracer(serviceName, instanceName string) (trace.TracerProvider, func(), error) {
tp, err := newTracerProvider(serviceName, instanceName)
if err != nil {
return nil, nil, fmt.Errorf("couldn't initialize tracer provider: %w", err)
Expand All @@ -33,12 +33,11 @@ func InitTracer(serviceName, instanceName string) (trace.Tracer, func(), error)
log.Fatal(err)
}
}

return tp.Tracer(serviceName), shutdown, err
return tp, shutdown, err
}

// tracerProvider returns an OpenTelemetry TracerProvider configured to use
// the Jaeger exporter that will send spans to the provided url. The returned
// the OTEL exporter that will send spans to the provided url. The returned
// TracerProvider will also use a Resource configured with all the information
// about the application.
func newTracerProvider(serviceName, instanceName string) (*tracesdk.TracerProvider, error) {
Expand Down

0 comments on commit 3c3297b

Please sign in to comment.