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 = {}
  @quality_log  = []
  @mutex        = Mutex.new
end

Instance Method Details

#learned_data_for(identity) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/legion/gaia/audit_observer.rb', line 44

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



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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)
    record_quality(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



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

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

#tool_patternsObject



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

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

#user_preferences(identity) ⇒ Object



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

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