Class: Dbviewer::Query::Logger
- Inherits:
-
Object
- Object
- Dbviewer::Query::Logger
- Extended by:
- Forwardable
- Includes:
- Singleton
- Defined in:
- lib/dbviewer/query/logger.rb
Overview
Logger captures and analyzes SQL queries for debugging and performance monitoring
Class Method Summary collapse
-
.configure(enable_query_logging: true, query_logging_mode: :memory) ⇒ Object
Configure the singleton instance.
Instance Method Summary collapse
-
#add(event) ⇒ Object
Add a new SQL event query to the logger.
-
#clear ⇒ Object
Clear all stored queries.
-
#configure(enable_query_logging: true, query_logging_mode: :memory) ⇒ Object
Configure the logger with settings.
-
#initialize ⇒ Logger
constructor
A new instance of Logger.
-
#recent_queries(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) ⇒ Object
Get recent queries, optionally filtered.
-
#stats ⇒ Object
Get stats about all queries.
-
#stats_for_queries(queries) ⇒ Object
Calculate stats for a specific set of queries (can be filtered).
Constructor Details
#initialize ⇒ Logger
Returns a new instance of Logger.
10 11 12 13 14 15 16 |
# File 'lib/dbviewer/query/logger.rb', line 10 def initialize # Initialize with default values, will be configured later @enable_query_logging = true @query_logging_mode = :memory set_storage Rails.logger.info("[DBViewer] QueryLogger initialized with #{mode} storage mode") end |
Class Method Details
.configure(enable_query_logging: true, query_logging_mode: :memory) ⇒ Object
Configure the singleton instance
84 85 86 87 88 89 |
# File 'lib/dbviewer/query/logger.rb', line 84 def configure(enable_query_logging: true, query_logging_mode: :memory) instance.configure( enable_query_logging: enable_query_logging, query_logging_mode: query_logging_mode ) end |
Instance Method Details
#add(event) ⇒ Object
Add a new SQL event query to the logger
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/dbviewer/query/logger.rb', line 32 def add(event) # Return early if query logging is disabled return unless @enable_query_logging return if ::Dbviewer::Query::Parser.should_skip_query?(event) current_time = Time.now @storage.add({ sql: event.payload[:sql], name: event.payload[:name], timestamp: current_time, duration_ms: event.duration.round(2), binds: ::Dbviewer::Query::Parser.format_binds(event.payload[:binds]), request_id: ActiveSupport::Notifications.instrumenter.id, thread_id: Thread.current.object_id.to_s, caller: event.payload[:caller] }) end |
#clear ⇒ Object
Clear all stored queries
51 52 53 |
# File 'lib/dbviewer/query/logger.rb', line 51 def clear @storage.clear end |
#configure(enable_query_logging: true, query_logging_mode: :memory) ⇒ Object
Configure the logger with settings
21 22 23 24 25 26 27 28 29 |
# File 'lib/dbviewer/query/logger.rb', line 21 def configure(enable_query_logging: true, query_logging_mode: :memory) @enable_query_logging = enable_query_logging @query_logging_mode = query_logging_mode # Reinitialize storage if mode changed @storage = nil @mode = nil set_storage Rails.logger.info("[DBViewer] QueryLogger configured with #{mode} storage mode") end |
#recent_queries(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) ⇒ Object
Get recent queries, optionally filtered
56 57 58 59 60 61 62 63 |
# File 'lib/dbviewer/query/logger.rb', line 56 def recent_queries(limit: 100, table_filter: nil, request_id: nil, min_duration: nil) @storage.filter( limit: limit, table_filter: table_filter, request_id: request_id, min_duration: min_duration ) end |
#stats ⇒ Object
Get stats about all queries
66 67 68 |
# File 'lib/dbviewer/query/logger.rb', line 66 def stats stats_for_queries(@storage.all) end |
#stats_for_queries(queries) ⇒ Object
Calculate stats for a specific set of queries (can be filtered)
71 72 73 |
# File 'lib/dbviewer/query/logger.rb', line 71 def stats_for_queries(queries) Analyzer.generate_stats(queries) end |