Current section
Files
Jump to
Current section
Files
lib/tracing/aws_telemetry.ex
defmodule Tracing.AWSTelemetry do
require OpenTelemetry.Tracer
alias __MODULE__
alias OpenTelemetry.Span
@tracer_id AWSTelemetry
def setup do
:telemetry.attach(
{AWSTelemetry, :aws_start},
[:ex_aws, :request, :start],
&AWSTelemetry.handle_event/4,
%{}
)
:telemetry.attach(
{AWSTelemetry, :aws_stop},
[:ex_aws, :request, :stop],
&AWSTelemetry.handle_event/4,
%{}
)
:telemetry.attach(
{AWSTelemetry, :aws_exception},
[:ex_aws, :request, :exception],
&AWSTelemetry.handle_event/4,
%{}
)
:ok
end
def handle_event([:ex_aws, :request, :start], _, meta, _) do
OpentelemetryTelemetry.start_telemetry_span(@tracer_id, "aws_request", meta, %{kind: :server})
end
def handle_event([:ex_aws, :request, :stop], _, meta, _) do
_ctx = OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, meta)
OpentelemetryTelemetry.end_telemetry_span(@tracer_id, meta)
end
def handle_event(
[:ex_aws, :request, :exception],
_,
%{kind: kind, reason: reason, stacktrace: stacktrace} = meta,
_
) do
ctx = OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, meta)
exception = Exception.normalize(kind, reason, stacktrace)
attrs = []
Span.record_exception(ctx, exception, stacktrace, attrs)
Span.set_status(ctx, OpenTelemetry.status(:error, ""))
OpentelemetryTelemetry.end_telemetry_span(@tracer_id, meta)
end
end