Class: Legion::Gaia::AuditObserver

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

Instance Method Summary collapse

Constructor Details

#initializeAuditObserver

Returns a new instance of AuditObserver.



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

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

Instance Method Details

#learned_data_for(identity) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/legion/gaia/audit_observer.rb', line 37

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

#process_event(event) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/legion/gaia/audit_observer.rb', line 17

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

  @mutex.synchronize do
    record_routing_preference(event)
    record_tool_patterns(event)
    record_quality(event)
  end
rescue StandardError => e
  Legion::Logging.warn("audit observer error: #{e.message}") if defined?(Legion::Logging)
end

#reset!Object



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

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

#tool_patternsObject



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

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

#user_preferences(identity) ⇒ Object



29
30
31
# File 'lib/legion/gaia/audit_observer.rb', line 29

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