class Rox::Core::ImpressionInvoker
Public Class Methods
new(internal_flags, custom_property_repository, device_properties, analytics_client, is_roxy, user_unhandled_error_invoker)
click to toggle source
# File lib/rox/core/impression/impression_invoker.rb, line 9 def initialize(internal_flags, custom_property_repository, device_properties, analytics_client, is_roxy, user_unhandled_error_invoker) @internal_flags = internal_flags @custom_property_repository = custom_property_repository @device_properties = device_properties @analytics_client = analytics_client @is_roxy = is_roxy @user_unhandled_error_invoker = user_unhandled_error_invoker @impression_handlers = [] @mutex = Mutex.new end
Public Instance Methods
invoke(reporting_value, stickiness_property, context)
click to toggle source
# File lib/rox/core/impression/impression_invoker.rb, line 21 def invoke(reporting_value, stickiness_property, context) begin analytics_enabled = @internal_flags.enabled?('rox.internal.analytics') if analytics_enabled && !@is_roxy prop = @custom_property_repository.custom_property(stickiness_property) || @custom_property_repository.custom_property("rox.#{Rox::Core::PropertyType::DISTINCT_ID.name}") distinct_id = '(null_distinct_id' unless prop.nil? prop_value = prop.value(context) distinct_id = prop_value if prop_value.instance_of?(String) end event_time = (Time.now.to_f * 1000.0).to_i begin event_time = ENV['rox.analytics.ms'].to_i rescue StandardError end @analytics_client.track({ flag: reporting_value.name, value: reporting_value.value, distinctId: distinct_id, experimentVersion: '0', type: 'IMPRESSION', time: event_time }) end rescue StandardError => ex Logging.logger.error('Failed to send analytics', ex) end raise_impression_event(ImpressionArgs.new(reporting_value, context)) end
raise_impression_event(args)
click to toggle source
# File lib/rox/core/impression/impression_invoker.rb, line 60 def raise_impression_event(args) handlers = [] @mutex.synchronize do handlers = @impression_handlers.clone end begin handlers.each { |handler| handler.call(args) } rescue StandardError => e user_unhandled_error_invoker.invoke(handler, ExceptionTrigger::IMPRESSION_HANDLER, e) Logging.logger.error('Impresssion handler exception', ex) end end
register_impression_handler(&block)
click to toggle source
# File lib/rox/core/impression/impression_invoker.rb, line 54 def register_impression_handler(&block) @mutex.synchronize do @impression_handlers << block end end