From 5230a89d39425c8af93ac6341a88e0cceba94634 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 23 Jun 2022 17:45:14 +0200 Subject: [PATCH] Add manual instrumentation to emailservice (#158) * Add manual instrumentation to emailservice * Apply name suggestion * Apply suggestions Co-authored-by: Carter Socha <43380952+cartersocha@users.noreply.github.com> --- src/emailservice/email_server.rb | 42 ++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/emailservice/email_server.rb b/src/emailservice/email_server.rb index f5c1b1de1f..268b790fd4 100644 --- a/src/emailservice/email_server.rb +++ b/src/emailservice/email_server.rb @@ -12,11 +12,39 @@ post "/send_order_confirmation" do data = JSON.parse(request.body.read, object_class: OpenStruct) - Pony.mail( - to: data.email, - from: "noreply@example.com", - subject: "Your confirmation email", - body: erb(:confirmation, locals: { order: data.order }), - via: :logger - ) + + # get the current auto-instrumented span + current_span = OpenTelemetry::Trace.current_span + current_span.add_attributes({ + "app.order.id" => data.order.order_id, + "app.shipping.tracking.id" => data.order.shipping_tracking_id, + "app.shipping.cost.currency" => data.order.shipping_cost.currency_code, + "app.shipping.cost.total" => "#{data.order.shipping_cost.units}.#{data.order.shipping_cost.nanos}", + }) + + send_email(data) + +end + +error do + OpenTelemetry::Trace.current_span.record_exception(env['sinatra.error']) +end + +def send_email(data) + # create and start a manual span + tracer = OpenTelemetry.tracer_provider.tracer('emailservice') + tracer.in_span("send_email") do |span| + Pony.mail( + to: data.email, + from: "noreply@example.com", + subject: "Your confirmation email", + body: erb(:confirmation, locals: { order: data.order }), + via: :logger + ) + span.set_attribute("app.email.sent", true) + end + # manually created spans need to be ended + # in Ruby, the method `in_span` ends it automatically + # check out the OpenTelemetry Ruby docs at: + # https://opentelemetry.io/docs/instrumentation/ruby/manual/#creating-new-spans end