Class: SimpleAcp::Storage::Memory

Inherits:
Base
  • Object
show all
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.

Examples:

storage = SimpleAcp::Storage::Memory.new
server = SimpleAcp::Server::Base.new(storage: storage)

Instance Method Summary collapse

Methods inherited from Base

#close, #ping

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(options = {})
  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

See Also:



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

See Also:



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

See Also:



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

See Also:



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

See Also:



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

See Also:



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

See Also:



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

See Also:



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.

Returns:

  • (Hash) —

    counts of runs, sessions, and events



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