Class: SimpleAcp::Storage::Memory
- Defined in:
- lib/simple_acp/storage/memory.rb
Overview
Thread-safe in-memory storage backend.
This is the default storage backend. Data is lost when the process exits. Uses concurrent-ruby for thread safety.
Instance Method Summary collapse
- #add_event(run_id, event) ⇒ Object
-
#clear! ⇒ void
Clear all stored data.
- #delete_run(run_id) ⇒ Object
- #delete_session(session_id) ⇒ Object
- #get_events(run_id, limit: 100, offset: 0) ⇒ Object
- #get_run(run_id) ⇒ Object
- #get_session(session_id) ⇒ Object
-
#initialize(options = {}) ⇒ Memory
constructor
A new instance of Memory.
- #list_runs(agent_name: nil, session_id: nil, limit: 10, offset: 0) ⇒ Object
- #save_run(run) ⇒ Object
- #save_session(session) ⇒ Object
-
#stats ⇒ Hash
Get storage statistics.
Methods inherited from Base
Constructor Details
#initialize(options = {}) ⇒ Memory
Returns a new instance of Memory.
16 17 18 19 20 21 22 |
# File 'lib/simple_acp/storage/memory.rb', line 16 def initialize( = {}) super @runs = Concurrent::Map.new @sessions = Concurrent::Map.new @events = Concurrent::Map.new @mutex = Mutex.new end |
Instance Method Details
#add_event(run_id, event) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/simple_acp/storage/memory.rb', line 73 def add_event(run_id, event) @mutex.synchronize do @events[run_id] ||= [] @events[run_id] << event end event end |
#clear! ⇒ void
This method returns an undefined value.
Clear all stored data.
90 91 92 93 94 |
# File 'lib/simple_acp/storage/memory.rb', line 90 def clear! @runs.clear @sessions.clear @events.clear end |
#delete_run(run_id) ⇒ Object
36 37 38 39 |
# File 'lib/simple_acp/storage/memory.rb', line 36 def delete_run(run_id) @events.delete(run_id) @runs.delete(run_id) end |
#delete_session(session_id) ⇒ Object
68 69 70 |
# File 'lib/simple_acp/storage/memory.rb', line 68 def delete_session(session_id) @sessions.delete(session_id) end |
#get_events(run_id, limit: 100, offset: 0) ⇒ Object
82 83 84 85 |
# File 'lib/simple_acp/storage/memory.rb', line 82 def get_events(run_id, limit: 100, offset: 0) events = @events[run_id] || [] events.drop(offset).take(limit) end |
#get_run(run_id) ⇒ Object
25 26 27 |
# File 'lib/simple_acp/storage/memory.rb', line 25 def get_run(run_id) @runs[run_id] end |
#get_session(session_id) ⇒ Object
57 58 59 |
# File 'lib/simple_acp/storage/memory.rb', line 57 def get_session(session_id) @sessions[session_id] end |
#list_runs(agent_name: nil, session_id: nil, limit: 10, offset: 0) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/simple_acp/storage/memory.rb', line 42 def list_runs(agent_name: nil, session_id: nil, limit: 10, offset: 0) runs = @runs.values runs = runs.select { |r| r.agent_name == agent_name } if agent_name runs = runs.select { |r| r.session_id == session_id } if session_id runs = runs.sort_by { |r| r.created_at || Time.at(0) }.reverse { runs: runs.drop(offset).take(limit), total: runs.length } end |
#save_run(run) ⇒ Object
30 31 32 33 |
# File 'lib/simple_acp/storage/memory.rb', line 30 def save_run(run) @runs[run.run_id] = run run end |
#save_session(session) ⇒ Object
62 63 64 65 |
# File 'lib/simple_acp/storage/memory.rb', line 62 def save_session(session) @sessions[session.id] = session session end |
#stats ⇒ Hash
Get storage statistics.
99 100 101 102 103 104 105 |
# File 'lib/simple_acp/storage/memory.rb', line 99 def stats { runs: @runs.size, sessions: @sessions.size, events: @events.values.sum(&:length) } end |