Class: Minato::Trace::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/minato/trace/configuration.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/minato/trace/configuration.rb', line 47

def initialize
  @enabled = ENV["MINATO_TRACE_DISABLED"] != "true"
  @service_name = nil
  @otlp_endpoint = begin
    url = ENV.fetch("OTEL_EXPORTER_OTLP_ENDPOINT", nil)
    url&.then { |u| u.end_with?("/v1/traces") ? u : "#{u.chomp("/")}/v1/traces" }
  end
  @excluded_routes = ["/health/alive", "/health/ready"]
  @runtime_environment = ENV["RUNTIME_ENV"] || ENV["RAILS_ENV"] || nil
  @project_id = ENV["GOOGLE_CLOUD_PROJECT"] || ENV["GCP_PROJECT"] || nil
end

Instance Attribute Details

#enabledObject

Indicates whether the trace functionality is enabled. This can be controlled via the ‘MINATO_TRACE_DISABLED` environment variable. If set to “true”, tracing will be disabled. Default is true, meaning tracing is enabled unless explicitly disabled. Example: `ENV = “true”` will disable tracing



14
15
16
# File 'lib/minato/trace/configuration.rb', line 14

def enabled
  @enabled
end

#excluded_routesObject

A list of routes that should be excluded from tracing. These routes will not be traced, which is useful for health check endpoints or other endpoints that do not require tracing. Default is [“/health/alive”, “/health/ready”]. You can modify this list to include any other routes you want to exclude.



33
34
35
# File 'lib/minato/trace/configuration.rb', line 33

def excluded_routes
  @excluded_routes
end

#otlp_endpointObject

This is the endpoint where traces will be sent. Default is google’s Cloud Trace endpoint. You can modify this endpoint if you are using a different trace service. Example: “cloudtrace.googleapis.com/v1/projects/my-gcp-project-id/traces



26
27
28
# File 'lib/minato/trace/configuration.rb', line 26

def otlp_endpoint
  @otlp_endpoint
end

#project_idObject

The ID of the project on Google Cloud It’s used to generate official links betewwn the Cloud Trace and the Cloud Logging Example: “meu-gcp-project-id”



45
46
47
# File 'lib/minato/trace/configuration.rb', line 45

def project_id
  @project_id
end

#runtime_environmentObject (readonly)

The runtime environment in which the application is running. It can be used to differentiate between environments for logging or tracing purposes. Default is the value of the ‘RUNTIME_ENV` environment variable or Rails environment. If `RUNTIME_ENV` is not set, it will default to `Rails.env Example: “production”



40
41
42
# File 'lib/minato/trace/configuration.rb', line 40

def runtime_environment
  @runtime_environment
end

#service_nameObject

The name of the service to be used in Google Cloud Trace. This is used to identify the service in the Google Cloud Console. It should be a unique name that represents your application. Example: “my-rails-app”



20
21
22
# File 'lib/minato/trace/configuration.rb', line 20

def service_name
  @service_name
end

Instance Method Details

#console_exporterObject



86
87
88
89
90
# File 'lib/minato/trace/configuration.rb', line 86

def console_exporter
  OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
    OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter.new
  )
end

#disable!Object



67
68
69
# File 'lib/minato/trace/configuration.rb', line 67

def disable!
  @enabled = false
end

#enable!Object



71
72
73
# File 'lib/minato/trace/configuration.rb', line 71

def enable!
  @enabled = true
end

#enabled?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/minato/trace/configuration.rb', line 63

def enabled?
  @enabled
end

#exporterObject



98
99
100
101
102
# File 'lib/minato/trace/configuration.rb', line 98

def exporter
  return noop_exporter if runtime_environment == "test"

  otlp_endpoint.nil? ? console_exporter : otlp_exporter
end

#noop_exporterObject



92
93
94
95
96
# File 'lib/minato/trace/configuration.rb', line 92

def noop_exporter
  OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
    OpenTelemetry::SDK::Trace::Export::InMemorySpanExporter.new
  )
end

#ot_resourcesObject



104
105
106
107
108
109
110
# File 'lib/minato/trace/configuration.rb', line 104

def ot_resources
  resources = {
    OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => service_name,
    OpenTelemetry::SemanticConventions::Resource::DEPLOYMENT_ENVIRONMENT => runtime_environment
  }
  OpenTelemetry::SDK::Resources::Resource.create(resources)
end

#otlp_exporterObject



75
76
77
78
79
80
81
82
83
84
# File 'lib/minato/trace/configuration.rb', line 75

def otlp_exporter
  OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
    OpenTelemetry::Exporter::OTLP::Exporter.new(
      endpoint: otlp_endpoint
    ),
    max_queue_size: 1000,
    schedule_delay: 1000,
    max_export_batch_size: 100
  )
end