Class: Trainspotter::RequestRecord

Inherits:
Record
  • Object
show all
Defined in:
app/models/trainspotter/request_record.rb

Constant Summary

Constants inherited from Record

Trainspotter::Record::SCHEMA_VERSION

Class Method Summary collapse

Instance Method Summary collapse

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.timestamp&.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

#entriesObject



80
81
82
# File 'app/models/trainspotter/request_record.rb', line 80

def entries
  parsed_entries
end

#render_countObject



111
112
113
# File 'app/models/trainspotter/request_record.rb', line 111

def render_count
  render_entries.size
end

#render_duration_msObject



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_entriesObject



88
89
90
# File 'app/models/trainspotter/request_record.rb', line 88

def render_entries
  parsed_entries.select(&:render?)
end

#sql_countObject



103
104
105
# File 'app/models/trainspotter/request_record.rb', line 103

def sql_count
  sql_entries.size
end

#sql_duration_msObject



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_entriesObject



84
85
86
# File 'app/models/trainspotter/request_record.rb', line 84

def sql_entries
  parsed_entries.select(&:sql?)
end

#status_classObject



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