Module: AppPerfRpm::Instruments::ActiveRecord::Adapters::Sqlite3

Includes:
Utils
Defined in:
lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb

Constant Summary collapse

IGNORE_STATEMENTS =
{
  "SCHEMA" => true,
  "EXPLAIN" => true,
  "CACHE" => true
}

Instance Method Summary collapse

Methods included from Utils

#connection_config, #format_redis, #format_redis_command, log_source_and_backtrace, #sanitize_sql

Instance Method Details

#begin_db_transaction_with_traceObject



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb', line 112

def begin_db_transaction_with_trace
  if ::AppPerfRpm::Tracer.tracing?
    adapter = connection_config.fetch(:adapter)

    span = AppPerfRpm.tracer.start_span(name || 'SQL', tags: {
      "component" => "ActiveRecord",
      "span.kind" => "client",
      "db.statement" => "BEGIN",
      "db.user" => connection_config.fetch(:username, 'unknown'),
      "db.instance" => connection_config.fetch(:database),
      "db.vendor" => adapter,
      "db.type" => "sql"
    })
    AppPerfRpm::Utils.log_source_and_backtrace(span, :active_record)
  end

  begin_db_transaction_without_trace
rescue Exception => e
  if span
    span.set_tag('error', true)
    span.log_error(e)
  end
  raise
ensure
  span.finish if span
end

#exec_delete_with_trace(sql, name = nil, *args) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb', line 52

def exec_delete_with_trace(sql, name = nil, *args)
  if ::AppPerfRpm::Tracer.tracing?
    unless ignore_trace?(name)
      adapter = connection_config.fetch(:adapter)
      sanitized_sql = sanitize_sql(sql, adapter)

      span = AppPerfRpm.tracer.start_span(name || 'SQL', tags: {
        "component" => "ActiveRecord",
        "span.kind" => "client",
        "db.statement" => sanitized_sql,
        "db.user" => connection_config.fetch(:username, 'unknown'),
        "db.instance" => connection_config.fetch(:database),
        "db.vendor" => adapter,
        "db.type" => "sql"
      })
      AppPerfRpm::Utils.log_source_and_backtrace(span, :active_record)
    end
  end

  exec_delete_without_trace(sql, name, *args)
rescue Exception => e
  if span
    span.set_tag('error', true)
    span.log_error(e)
  end
  raise
ensure
  span.finish if span
end

#exec_insert_with_trace(sql, name = nil, *args) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb', line 82

def exec_insert_with_trace(sql, name = nil, *args)
  if ::AppPerfRpm::Tracer.tracing?
    unless ignore_trace?(name)
      adapter = connection_config.fetch(:adapter)
      sanitized_sql = sanitize_sql(sql, adapter)

      span = AppPerfRpm.tracer.start_span(name || 'SQL', tags: {
        "component" => "ActiveRecord",
        "span.kind" => "client",
        "db.statement" => sanitized_sql,
        "db.user" => connection_config.fetch(:username, 'unknown'),
        "db.instance" => connection_config.fetch(:database),
        "db.vendor" => adapter,
        "db.type" => "sql"
      })
      AppPerfRpm::Utils.log_source_and_backtrace(span, :active_record)
    end
  end

  exec_insert_without_trace(sql, name, binds, *args)
rescue Exception => e
  if span
    span.set_tag('error', true)
    span.log_error(e)
  end
  raise
ensure
  span.finish if span
end

#exec_query_with_trace(sql, name = nil, *args) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb', line 22

def exec_query_with_trace(sql, name = nil, *args)
  if ::AppPerfRpm::Tracer.tracing?
    unless ignore_trace?(name)
      adapter = connection_config.fetch(:adapter)
      sanitized_sql = sanitize_sql(sql, adapter)

      span = AppPerfRpm.tracer.start_span(name || 'SQL', tags: {
        "component" => "ActiveRecord",
        "span.kind" => "client",
        "db.statement" => sanitized_sql,
        "db.user" => connection_config.fetch(:username, 'unknown'),
        "db.instance" => connection_config.fetch(:database),
        "db.vendor" => adapter,
        "db.type" => "sql"
      })
      AppPerfRpm::Utils.log_source_and_backtrace(span, :active_record)
    end
  end

  exec_query_without_trace(sql, name, *args)
rescue Exception => e
  if span
    span.set_tag('error', true)
    span.log_error(e)
  end
  raise
ensure
  span.finish if span
end

#ignore_trace?(name) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
# File 'lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb', line 16

def ignore_trace?(name)
  IGNORE_STATEMENTS[name.to_s] ||
    (name && name.to_sym == :skip_logging) ||
    name == 'ActiveRecord::SchemaMigration Load'
end