Class: Dbviewer::Storage::InMemoryStorage
- Defined in:
- lib/dbviewer/storage/in_memory_storage.rb
Overview
InMemoryStorage implements QueryStorage for storing queries in memory
Instance Method Summary collapse
-
#add(query) ⇒ Object
Add a new query to the collection.
-
#all ⇒ Object
Get all queries.
-
#clear ⇒ Object
Clear all stored queries.
-
#filter(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) ⇒ Object
Get recent queries, optionally filtered.
-
#initialize ⇒ InMemoryStorage
constructor
A new instance of InMemoryStorage.
Constructor Details
#initialize ⇒ InMemoryStorage
Returns a new instance of InMemoryStorage.
5 6 7 8 |
# File 'lib/dbviewer/storage/in_memory_storage.rb', line 5 def initialize @queries = [] @mutex = Mutex.new end |
Instance Method Details
#add(query) ⇒ Object
Add a new query to the collection
16 17 18 19 20 21 22 23 |
# File 'lib/dbviewer/storage/in_memory_storage.rb', line 16 def add(query) @mutex.synchronize do @queries << query # Trim if we have too many queries max_queries = Dbviewer.configuration.max_memory_queries || 1000 @queries.shift if @queries.size > max_queries end end |
#all ⇒ Object
Get all queries
11 12 13 |
# File 'lib/dbviewer/storage/in_memory_storage.rb', line 11 def all @mutex.synchronize { @queries.dup } end |
#clear ⇒ Object
Clear all stored queries
26 27 28 |
# File 'lib/dbviewer/storage/in_memory_storage.rb', line 26 def clear @mutex.synchronize { @queries.clear } end |
#filter(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) ⇒ Object
Get recent queries, optionally filtered
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/dbviewer/storage/in_memory_storage.rb', line 31 def filter(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) result = all # Apply filters if provided result = filter_by_table(result, table_filter) if table_filter.present? result = filter_by_request_id(result, request_id) if request_id.present? result = filter_by_duration(result, min_duration) if min_duration.present? # Return most recent queries first, limited to requested amount result.reverse.first(limit) end |