Class: Legion::Gaia::AuditObserver

Inherits:
Object
  • Object
show all
Includes:
Logging::Helper, Singleton
Defined in:
lib/legion/gaia/audit_observer.rb

Instance Method Summary collapse

Constructor Details

#initializeAuditObserver

Returns a new instance of AuditObserver.



12
13
14
15
16
17
# File 'lib/legion/gaia/audit_observer.rb', line 12

def initialize
  @user_prefs          = {}
  @tool_patterns       = {}
  @identity_tool_patterns = {}
  @mutex = Mutex.new
end

Instance Method Details

#erase_partner!(identity:) ⇒ Object



57
58
59
60
61
62
# File 'lib/legion/gaia/audit_observer.rb', line 57

def erase_partner!(identity:)
  @mutex.synchronize do
    @user_prefs.delete(identity)
    @identity_tool_patterns.delete(identity)
  end
end

#learned_data_for(identity) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/legion/gaia/audit_observer.rb', line 47

def learned_data_for(identity)
  @mutex.synchronize do
    prefs = @user_prefs[identity] || {}
    {
      routing_preference: prefs[:routing],
      tool_predictions: top_tools_for_identity(identity)
    }
  end
end

#process_event(event) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/legion/gaia/audit_observer.rb', line 19

def process_event(event)
  return unless event.is_a?(Hash)

  @mutex.synchronize do
    record_routing_preference(event)
    record_tool_patterns(event)
  end
  identity = extract_caller_identity(event)
  log.debug(
    'AuditObserver processed event ' \
    "identity=#{identity || 'unknown'} tools=#{Array(event[:tools_used]).size}"
  )
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'gaia.audit_observer.process_event')
end

#reset!Object



64
65
66
67
68
69
70
# File 'lib/legion/gaia/audit_observer.rb', line 64

def reset!
  @mutex.synchronize do
    @user_prefs.clear
    @tool_patterns.clear
    @identity_tool_patterns.clear
  end
end

#tool_patternsObject



39
40
41
# File 'lib/legion/gaia/audit_observer.rb', line 39

def tool_patterns
  @mutex.synchronize { @tool_patterns.dup }
end

#tool_patterns_for(identity) ⇒ Object



43
44
45
# File 'lib/legion/gaia/audit_observer.rb', line 43

def tool_patterns_for(identity)
  @mutex.synchronize { (@identity_tool_patterns[identity] || {}).dup }
end

#user_preferences(identity) ⇒ Object



35
36
37
# File 'lib/legion/gaia/audit_observer.rb', line 35

def user_preferences(identity)
  @mutex.synchronize { @user_prefs[identity]&.dup || {} }
end