Class: Brut::FrontEnd::Middlewares::OpenTelemetrySpan
- Inherits:
-
Brut::FrontEnd::Middleware
- Object
- Brut::FrontEnd::Middleware
- Brut::FrontEnd::Middlewares::OpenTelemetrySpan
- Defined in:
- lib/brut/front_end/middlewares/open_telemetry_span.rb
Instance Method Summary collapse
-
#call(env) ⇒ Object
-
#initialize(app) ⇒ OpenTelemetrySpan
constructor
A new instance of OpenTelemetrySpan.
Constructor Details
#initialize(app) ⇒ OpenTelemetrySpan
Returns a new instance of OpenTelemetrySpan.
2 3 4 |
# File 'lib/brut/front_end/middlewares/open_telemetry_span.rb', line 2 def initialize(app) @app = app end |
Instance Method Details
#call(env) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/brut/front_end/middlewares/open_telemetry_span.rb', line 5 def call(env) otel_standard_attributes = { "http.request.method" => env["REQUEST_METHOD"], "url.path" => env["PATH_INFO"], "url.query" => env["QUERY_STRING"], "url.scheme" => env["rack.url_scheme"], "url.full" => "#{env["rack.url_scheme"]}://#{env["HTTP_HOST"]}#{env["REQUEST_URI"]}", "server.address" => env["HTTP_HOST"], "user_agent.original" => env["HTTP_USER_AGENT"], "network.peer.ip" => env["REMOTE_ADDR"], "network.peer.port" => env["REMOTE_PORT"], "network.protocol.version" => env["HTTP_VERSION"], }.merge( "http.request.header.accept-language" => env["HTTP_ACCEPT_LANGUAGE"], "http.request.header.referer" => env["HTTP_REFERER"], "http.request.header.user-agent" => env["HTTP_USER_AGENT"], "http.request.header.accept" => env["HTTP_ACCEPT"], ).delete_if { |_,v| v.nil? || v.empty? } span_name = if env["PATH_INFO"] =~ /^\/js\// "HTTP #{env['REQUEST_METHOD']} JS" elsif env["PATH_INFO"] =~ /^\/css\// "HTTP #{env['REQUEST_METHOD']} CSS" else "HTTP #{env['REQUEST_METHOD']}" end Brut.container.tracer.in_span(span_name,kind: :server, attributes: otel_standard_attributes) do |span| env["brut.otel.root_span"] = span @app.call(env) end end |