Class: Flu::EventFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/flu-rails/event_factory.rb

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ EventFactory

Returns a new instance of EventFactory.



9
10
11
12
13
14
15
# File 'lib/flu-rails/event_factory.rb', line 9

def initialize(configuration)
  @logger                         = configuration.logger
  @configuration                  = configuration
  @emitter                        = configuration.application_name
  @default_ignored_model_changes  = configuration.default_ignored_model_changes.map(&:to_s)
  @default_ignored_request_params = configuration.default_ignored_request_params.map(&:to_s)
end

Instance Method Details

#build_entity_change_event(data) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
36
# File 'lib/flu-rails/event_factory.rb', line 27

def build_entity_change_event(data)
  raise ArgumentError, "data must not be nil"          if data.nil?
  raise ArgumentError, "data must have changes"        if !data.has_key?(:changes) || data[:changes].empty?
  raise ArgumentError, "data must have an action_name" if !data.has_key?(:action_name) || data[:action_name].empty?
  raise ArgumentError, "data must have an entity_name" if !data.has_key?(:entity_name) || data[:entity_name].empty?
  name  = "#{data[:action_name]} #{data[:entity_name]}"
  event = build_event(name, :entity_change, data)
  @logger.debug("Track change: " + JSON.pretty_generate(event))
  event
end

#build_event(name, kind, data) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/flu-rails/event_factory.rb', line 47

def build_event(name, kind, data)
  original_emitter  = @emitter
  overriden_emitter = data[:overriden_emitter]&.strip&.delete(".")
  final_emitter     = overriden_emitter.blank? ? original_emitter : overriden_emitter
  # 'overriden_emitter' selects the emitter of the event, it is not part of what is tracked:
  # it is dropped from the payload instead of being published as an 'overridenEmitter' key.
  uuid = Random.respond_to?(:uuid_v7) ? Random.uuid_v7 : SecureRandom.uuid
  Event.new(uuid, final_emitter, kind, name, deep_camelize(data.except(:overriden_emitter)))
end

#build_manual_event(name, data) ⇒ Object

Raises:

  • (ArgumentError)


38
39
40
41
42
43
44
45
# File 'lib/flu-rails/event_factory.rb', line 38

def build_manual_event(name, data)
  raise ArgumentError, "data must not be nil"          if data.nil?
  raise ArgumentError, "data must be a hash"           if !data.is_a?(Hash)
  raise ArgumentError, "name must not be nil or empty" if name.nil? || name.empty?
  event = build_event(name.to_s, :manual, data)
  @logger.debug("Track manual: " + JSON.pretty_generate(event))
  event
end

#build_request_event(data) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
# File 'lib/flu-rails/event_factory.rb', line 17

def build_request_event(data)
  raise ArgumentError, "data must not be nil"              if data.nil?
  raise ArgumentError, "data must have an action_name"     if !data.has_key?(:action_name) || data[:action_name].empty?
  raise ArgumentError, "data must have an controller_name" if !data.has_key?(:controller_name) || data[:controller_name].empty?
  name  = "request to #{data[:action_name]} #{data[:controller_name]}"
  event = build_event(name, :request, data)
  @logger.debug("Track action: #{JSON.pretty_generate(event)}")
  event
end

#create_data_from_entity_changes(action_name, entity, request_id, request_entity_metadata, changes, user_metadata_lambda, association_columns, ignored_model_changes, flu_overriden_emitter_lambda) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/flu-rails/event_factory.rb', line 57

def create_data_from_entity_changes(action_name, entity, request_id, , changes, , association_columns, ignored_model_changes, flu_overriden_emitter_lambda)
  {
    entity_id:         entity.id,
    entity_name:       entity.class.name.underscore,
    overriden_emitter: flu_overriden_emitter_lambda ? entity.instance_exec(&flu_overriden_emitter_lambda) : nil,
    request_id:        request_id,
    request_metadata:  .nil? ? {} : ,
    action_name:       action_name,
    changes:           changes.except(*ignored_model_changes).except(*@default_ignored_model_changes),
    user_metadata:      ? entity.instance_exec(&) : {},
    associations:      extract_associations_from(entity, association_columns)
  }
end

#create_data_from_request(request_id, params, request, response, request_start_time, ignored_request_params) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/flu-rails/event_factory.rb', line 71

def create_data_from_request(request_id, params, request, response, request_start_time, ignored_request_params)
  {
    request_id:      request_id,
    controller_name: params[:controller],
    action_name:     params[:action],
    path:            request.original_fullpath,
    response_code:   response.status,
    user_agent:      request.user_agent,
    duration:        Time.zone.now - request_start_time,
    params:          extract_params(request, ignored_request_params)
  }
end