module

OpenTelemetry


## Global Trace Provider
----------------------------------------------------------------

OpenTelemetry.configure do |config|
  config.service_name = "my_app_or_library"
  config.service_version = "1.1.1"
  config.exporter = OpenTelemetry::Exporter.new(variant: :stdout)
end

trace = OpenTelemetry.trace_provider("my_app_or_library", "1.1.1").trace
trace = OpenTelemetry.trace_provider do |provider|
  provider.service_name = "my_app_or_library"
  provider.service_version = "1.1.1"
end.trace

## Trace Providers as Objects With Unique Configuration
----------------------------------------------------------------

provider_a = OpenTelemetry::TraceProvider.new("my_app_or_library", "1.1.1")
provider_a.exporter = OpenTelemetry::Exporter.new(variant: :stdout)

provider_b = OpenTelementry::TraceProvider.new do |config|
  config.service_name = "my_app_or_library"
  config.service_version = "1.1.1"
  config.exporter = OpenTelemetry::Exporter.new(variant: :stdout)
end

## Getting a Trace From a Provider Object
----------------------------------------------------------------

trace = provider_a.trace # Inherit all configuration from the Provider Object

trace = provider_a.trace("microservice foo", "1.2.3") # Override the configuration

trace = provider_a.trace do |provider|
  provider.service_name = "microservice foo"
  provider.service_version = "1.2.3"
end.trace

## Creating Spans Using a Trace
----------------------------------------------------------------

trace.in_span("request") do |span|
  span.set_attribute("verb", "GET")
  span.set_attribute("url", "http://example.com/foo")
  span.add_event("dispatching to handler")
  trace.in_span("handler") do |child_span|
    child_span.add_event("handling request")
    trace.in_span("db") do |child_span|
      child_span.add_event("querying database")
    end
  end
end

Nested types