From b54b2bfa33a777d66497287bb0a1861b10d0d494 Mon Sep 17 00:00:00 2001 From: Rodrigo Virgilio Date: Mon, 27 Apr 2020 02:18:14 +0100 Subject: [PATCH] Send the parameters role name and role instance to application insights --- README.md | 6 ++++-- lib/application_insights/channel/queue_base.rb | 2 +- lib/application_insights/rack/track_request.rb | 10 +++++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d7444f2..5c61b2c 100644 --- a/README.md +++ b/README.md @@ -144,9 +144,11 @@ raise Exception, 'Boom!' ```ruby # set up the TrackRequest middleware in the rackup (config.ru) file require 'application_insights' -use ApplicationInsights::Rack::TrackRequest, '', +use ApplicationInsights::Rack::TrackRequest, '', , , # For rails, suggest to set up this middleware in application.rb so that unhandled exceptions from controllers are also collected -config.middleware.use 'ApplicationInsights::Rack::TrackRequest', '', +config.middleware.use 'ApplicationInsights::Rack::TrackRequest', '', , , + +Example: config.middleware.use 'ApplicationInsights::Rack::TrackRequest', 'd770211a-fdeb-4e91-b7e0-a1fffa282ec4', 500, 60, { role: 'test-role', role_instance: 'teste-role-instance' } ``` #### Rerieving the Request-Id value from ApplicationInsights #### diff --git a/lib/application_insights/channel/queue_base.rb b/lib/application_insights/channel/queue_base.rb index 91226b1..2ca21c2 100644 --- a/lib/application_insights/channel/queue_base.rb +++ b/lib/application_insights/channel/queue_base.rb @@ -44,7 +44,7 @@ def push(item) return unless item @queue.push(item) - + flush if @queue.length >= @max_queue_length end diff --git a/lib/application_insights/rack/track_request.rb b/lib/application_insights/rack/track_request.rb index 62c2b08..716ecda 100644 --- a/lib/application_insights/rack/track_request.rb +++ b/lib/application_insights/rack/track_request.rb @@ -15,11 +15,13 @@ class TrackRequest # send to Application Insights when buffer is full. # @param [Fixnum] send_interval the frequency (in seconds) to check buffer # and send buffered requests to Application Insights if any. - def initialize(app, instrumentation_key, buffer_size = 500, send_interval = 60) + # @param [Hash] roles send a role and role instance string to Application Insights. + def initialize(app, instrumentation_key, buffer_size = 500, send_interval = 60, roles = {}) @app = app @instrumentation_key = instrumentation_key @buffer_size = buffer_size @send_interval = send_interval + @roles = roles @sender = Channel::AsynchronousSender.new @sender.send_interval = @send_interval @@ -54,7 +56,7 @@ def call(env) options = options_hash(request) data = request_data(request_id, start_time, duration, status, success, options) - context = telemetry_context(request_id, env['HTTP_REQUEST_ID']) + context = telemetry_context(request_id, env['HTTP_REQUEST_ID'], @roles) @client.channel.write data, context, start_time @@ -141,11 +143,13 @@ def request_data(request_id, start_time, duration, status, success, options) ) end - def telemetry_context(request_id, request_id_header) + def telemetry_context(request_id, request_id_header, roles) context = Channel::TelemetryContext.new context.instrumentation_key = @instrumentation_key context.operation.id = operation_id(request_id) context.operation.parent_id = request_id_header + context.cloud.role = roles.values[0].instance_of?(String) == true ? roles.values[0] : nil + context.cloud.role_instance = roles.values[1].instance_of?(String) == true ? roles.values[1] : nil context end