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
# File 'lib/legion/gaia/audit_observer.rb', line 12

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

Instance Method Details

#learned_data_for(identity) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/legion/gaia/audit_observer.rb', line 42

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

#process_event(event) ⇒ Object



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

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



52
53
54
55
56
57
# File 'lib/legion/gaia/audit_observer.rb', line 52

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

#tool_patternsObject



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

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

#user_preferences(identity) ⇒ Object



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

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