Class: DecisionAgent::Audit::InMemoryAccessAdapter

Inherits:
AccessAdapter show all
Defined in:
lib/decision_agent/auth/access_audit_logger.rb

Instance Method Summary collapse

Methods inherited from Adapter

#record

Constructor Details

#initializeInMemoryAccessAdapter

Returns a new instance of InMemoryAccessAdapter.



75
76
77
78
79
# File 'lib/decision_agent/auth/access_audit_logger.rb', line 75

def initialize
  super
  @logs = []
  @mutex = Mutex.new
end

Instance Method Details

#all_logsObject



111
112
113
114
115
# File 'lib/decision_agent/auth/access_audit_logger.rb', line 111

def all_logs
  @mutex.synchronize do
    @logs.dup
  end
end

#clearObject



117
118
119
120
121
# File 'lib/decision_agent/auth/access_audit_logger.rb', line 117

def clear
  @mutex.synchronize do
    @logs.clear
  end
end

#query_access_logs(filters = {}) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/decision_agent/auth/access_audit_logger.rb', line 87

def query_access_logs(filters = {})
  @mutex.synchronize do
    results = @logs.dup

    results.select! { |log| log[:user_id] == filters[:user_id] } if filters[:user_id]

    results.select! { |log| log[:event_type] == filters[:event_type].to_s } if filters[:event_type]

    if filters[:start_time]
      start_time = filters[:start_time].is_a?(String) ? Time.parse(filters[:start_time]) : filters[:start_time]
      results.select! { |log| Time.parse(log[:timestamp]) >= start_time }
    end

    if filters[:end_time]
      end_time = filters[:end_time].is_a?(String) ? Time.parse(filters[:end_time]) : filters[:end_time]
      results.select! { |log| Time.parse(log[:timestamp]) <= end_time }
    end

    results = results.last(filters[:limit]) if filters[:limit]

    results.reverse # Most recent first
  end
end

#record_access(log_entry) ⇒ Object



81
82
83
84
85
# File 'lib/decision_agent/auth/access_audit_logger.rb', line 81

def record_access(log_entry)
  @mutex.synchronize do
    @logs << log_entry.dup
  end
end