Class: Trainspotter::RequestRecord
- Defined in:
- app/models/trainspotter/request_record.rb
Constant Summary
Constants inherited from Record
Trainspotter::Record::SCHEMA_VERSION
Class Method Summary collapse
- .for_session(session_id, limit: 100) ⇒ Object
- .poll_for_changes(log_file:, since_id: nil) ⇒ Object
- .unique_ips(log_file:) ⇒ Object
- .upsert_from_request(log_file, request) ⇒ Object
Instance Method Summary collapse
- #completed? ⇒ Boolean
- #entries ⇒ Object
- #render_count ⇒ Object
- #render_duration_ms ⇒ Object
- #render_entries ⇒ Object
- #sql_count ⇒ Object
- #sql_duration_ms ⇒ Object
- #sql_entries ⇒ Object
- #status_class ⇒ Object
Methods inherited from Record
ensure_connected, reset_connection!
Class Method Details
.for_session(session_id, limit: 100) ⇒ Object
71 72 73 74 75 76 |
# File 'app/models/trainspotter/request_record.rb', line 71 def self.for_session(session_id, limit: 100) where(session_id: session_id) .completed .order(started_at: :asc) .limit(limit) end |
.poll_for_changes(log_file:, since_id: nil) ⇒ Object
27 28 29 30 31 32 |
# File 'app/models/trainspotter/request_record.rb', line 27 def self.poll_for_changes(log_file:, since_id: nil) for_log_file(log_file) .completed .since(since_id) .order(started_at: :asc) end |
.unique_ips(log_file:) ⇒ Object
34 35 36 37 38 39 40 |
# File 'app/models/trainspotter/request_record.rb', line 34 def self.unique_ips(log_file:) for_log_file(log_file) .where.not(ip: nil) .distinct .pluck(:ip) .sort end |
.upsert_from_request(log_file, request) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/models/trainspotter/request_record.rb', line 42 def self.upsert_from_request(log_file, request) entries_data = request.entries.map do |entry| { raw: entry.raw, type: entry.type, timestamp: entry.&.iso8601, metadata: entry. } end upsert( { log_request_id: request.id, log_file: log_file, method: request.method, path: request.path, status: request.status, duration_ms: request.duration_ms, ip: request.ip, controller: request.controller, action: request.action, started_at: request.started_at, entries_json: entries_data, completed: request.completed? }, unique_by: :log_request_id ) end |
Instance Method Details
#completed? ⇒ Boolean
129 130 131 |
# File 'app/models/trainspotter/request_record.rb', line 129 def completed? completed end |
#entries ⇒ Object
80 81 82 |
# File 'app/models/trainspotter/request_record.rb', line 80 def entries parsed_entries end |
#render_count ⇒ Object
111 112 113 |
# File 'app/models/trainspotter/request_record.rb', line 111 def render_count render_entries.size end |
#render_duration_ms ⇒ Object
115 116 117 |
# File 'app/models/trainspotter/request_record.rb', line 115 def render_duration_ms render_entries.sum { |e| e.duration_ms || 0 } end |
#render_entries ⇒ Object
88 89 90 |
# File 'app/models/trainspotter/request_record.rb', line 88 def render_entries parsed_entries.select(&:render?) end |
#sql_count ⇒ Object
103 104 105 |
# File 'app/models/trainspotter/request_record.rb', line 103 def sql_count sql_entries.size end |
#sql_duration_ms ⇒ Object
107 108 109 |
# File 'app/models/trainspotter/request_record.rb', line 107 def sql_duration_ms sql_entries.sum { |e| e.duration_ms || 0 } end |
#sql_entries ⇒ Object
84 85 86 |
# File 'app/models/trainspotter/request_record.rb', line 84 def sql_entries parsed_entries.select(&:sql?) end |
#status_class ⇒ Object
119 120 121 122 123 124 125 126 127 |
# File 'app/models/trainspotter/request_record.rb', line 119 def status_class case status when 200..299 then "success" when 300..399 then "redirect" when 400..499 then "client-error" when 500..599 then "server-error" else "unknown" end end |