Send the parameters role name and role instance to application insights

This commit is contained in:
Rodrigo Virgilio 2020-04-27 02:18:14 +01:00
Родитель 5db6b4ad65
Коммит b54b2bfa33
3 изменённых файлов: 12 добавлений и 6 удалений

Просмотреть файл

@ -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, '<YOUR INSTRUMENTATION KEY GOES HERE>', <buffer size>
use ApplicationInsights::Rack::TrackRequest, '<YOUR INSTRUMENTATION KEY GOES HERE>', <buffer size>, <send_interval>, <roles>
# 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', '<YOUR INSTRUMENTATION KEY GOES HERE>', <buffer size>
config.middleware.use 'ApplicationInsights::Rack::TrackRequest', '<YOUR INSTRUMENTATION KEY GOES HERE>', <buffer size>, <send_interval>, <roles>
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 ####

Просмотреть файл

@ -44,7 +44,7 @@ module ApplicationInsights
return unless item
@queue.push(item)
flush if @queue.length >= @max_queue_length
end

Просмотреть файл

@ -15,11 +15,13 @@ module ApplicationInsights
# 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 @@ module ApplicationInsights
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 @@ module ApplicationInsights
)
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