@@ -47,7 +47,7 @@ unless_enabled?("OTEL_CRYSTAL_DISABLE_INSTRUMENTATION_HTTP_SERVER") do
4747 module HTTP::Handler
4848 trace(" call_next" ) do
4949 if next_handler = @next
50- OpenTelemetry .trace. in_span(" Invoke handler #{ next_handler.class.name } " ) do |_handler_span |
50+ OpenTelemetry .in_span(" Invoke handler #{ next_handler.class.name } " ) do |_handler_span |
5151 previous_def
5252 end
5353 else
@@ -84,7 +84,7 @@ unless_enabled?("OTEL_CRYSTAL_DISABLE_INSTRUMENTATION_HTTP_SERVER") do
8484 # versions, but this is entirely untested.
8585 # Wrap the start of request handling, the call to handle_client, in top-level-instrumentation.
8686 trace(" handle_client" ) do
87- OpenTelemetry .trace. in_span(" HTTP::Server connection" ) do |span |
87+ OpenTelemetry .in_span(" HTTP::Server connection" ) do |span |
8888 span.server!
8989 if io.responds_to?(:remote_address )
9090 if remote_addr = io.remote_address
@@ -135,7 +135,7 @@ unless_enabled?("OTEL_CRYSTAL_DISABLE_INSTRUMENTATION_HTTP_SERVER") do
135135 trace.span_context.trace_id = traceparent.trace_id
136136 end
137137
138- trace .in_span(trace_name) do |span |
138+ OpenTelemetry .in_span(trace_name) do |span |
139139 if request.is_a?(HTTP ::Request ) && request.headers[" traceparent" ]?
140140 parent = OpenTelemetry ::Span .build do |pspan |
141141 pspan.is_recording = false
@@ -187,7 +187,7 @@ unless_enabled?("OTEL_CRYSTAL_DISABLE_INSTRUMENTATION_HTTP_SERVER") do
187187 span[" guid" ] = span.span_id.hexstring
188188 end
189189
190- OpenTelemetry :: Trace .current_trace.not_nil! .in_span(" Invoke handler #{ @handler .class.name} " ) do |handler_span |
190+ OpenTelemetry .in_span(" Invoke handler #{ @handler .class.name} " ) do |handler_span |
191191 Log .with_context do
192192 @handler .call(context)
193193 rescue ex : ClientError
@@ -200,6 +200,10 @@ unless_enabled?("OTEL_CRYSTAL_DISABLE_INSTRUMENTATION_HTTP_SERVER") do
200200 handler_span.add_event(" Unhandled exception on HTTP::Handler" ) do |event |
201201 event[" message" ] = ex.message.to_s
202202 end
203+ span.status.error!(ex.message.to_s)
204+ handler_span[" exception.type" ] = ex.class.name
205+ handler_span[" exception.message" ] = ex.message.to_s
206+ handler_span[" exception.stacktrace" ] = ex.backtrace.join(" \n " )
203207 unless response.closed?
204208 unless response.wrote_headers?
205209 span[" http.status_code" ] = HTTP ::Status ::INTERNAL_SERVER_ERROR .value if span
0 commit comments