Module: ActiveVersion::Instrumentation

Defined in:
lib/active_version/instrumentation.rb,
sig/active_version/instrumentation.rbs

Overview

Instrumentation for ActiveSupport::Notifications

Constant Summary collapse

EVENTS =

Returns:

  • (Hash[Symbol, String])
{
  translation_created: "translation_created.active_version",
  translation_updated: "translation_updated.active_version",
  translation_destroyed: "translation_destroyed.active_version",
  translation_fallback_used: "translation_fallback_used.active_version",
  revision_created: "revision.active_version",
  revision_reverted: "revision_reverted.active_version",
  revision_switch_applied: "revision_switch_applied.active_version",
  revision_write_failed: "revision_write_failed.active_version",
  audit_created: "audit.active_version",
  audit_write_failed: "audit_write_failed.active_version",
  audit_sql_generated: "audit_sql.active_version"
}.freeze

Class Method Summary collapse

Class Method Details

.instrument_audit_created(audit, auditable) ⇒ Object

Instrument an audit creation

Parameters:

  • audit (Object)
  • auditable (Object)

Returns:

  • (Object)


135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/active_version/instrumentation.rb', line 135

def instrument_audit_created(audit, auditable)
  source_class = auditable&.class
  source_class ||= audit.class.source_class if audit.class.respond_to?(:source_class)
  version_value = nil

  if source_class
    version_column = ActiveVersion.column_mapper.column_for(source_class, :audits, :version)
    version_value = if audit.respond_to?(version_column)
      audit.public_send(version_column)
    else
      audit[version_column]
    end
  else
    version_value = audit[ActiveVersion.config.audit_version_column] if audit.respond_to?(:[])
    version_value ||= audit.version if audit.respond_to?(:version)
  end

  instrument_event(:audit_created) do
    {
      audit: audit,
      auditable: auditable,
      action: audit.action,
      version: version_value
    }
  end
rescue NameError
  instrument_event(:audit_created) do
    {
      audit: audit,
      auditable: auditable,
      action: audit.action,
      version: nil
    }
  end
end

.instrument_audit_sql_generated(model, sql) ⇒ Object

Instrument SQL generation

Parameters:

  • model (Object)
  • sql (String)

Returns:

  • (Object)


183
184
185
186
187
188
189
190
# File 'lib/active_version/instrumentation.rb', line 183

def instrument_audit_sql_generated(model, sql)
  instrument_event(:audit_sql_generated) do
    {
      model: model,
      sql: sql
    }
  end
end

.instrument_audit_write_failed(source, error:, action:) ⇒ Object

Instrument audit write failures

Parameters:

  • source (Object)
  • error: (Exception, nil)
  • action: (Object)

Returns:

  • (Object)


172
173
174
175
176
177
178
179
180
# File 'lib/active_version/instrumentation.rb', line 172

def instrument_audit_write_failed(source, error:, action:)
  instrument_event(:audit_write_failed) do
    {
      source: source,
      action: action,
      error: format_error(error)
    }
  end
end

.instrument_revision_created(revision, source) ⇒ Object

Instrument a revision creation

Parameters:

  • revision (Object)
  • source (Object)

Returns:

  • (Object)


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/active_version/instrumentation.rb', line 66

def instrument_revision_created(revision, source)
  source_class = source&.class
  source_class ||= revision.class.source_class if revision.class.respond_to?(:source_class)
  version_value = nil

  if source_class
    version_column = ActiveVersion.column_mapper.column_for(source_class, :revisions, :version)
    version_value = if revision.respond_to?(version_column)
      revision.public_send(version_column)
    else
      revision[version_column]
    end
  else
    version_value = revision[ActiveVersion.config.revision_version_column] if revision.respond_to?(:[])
    version_value ||= revision.version if revision.respond_to?(:version)
  end

  instrument_event(:revision_created) do
    {
      revision: revision,
      source: source,
      version: version_value
    }
  end
rescue NameError
  instrument_event(:revision_created) do
    {
      revision: revision,
      source: source,
      version: nil
    }
  end
end

.instrument_revision_reverted(source, from_version:, to_version:, strategy: :revert_to) ⇒ Object

Instrument revision revert action

Parameters:

  • source (Object)
  • from_version: (Object)
  • to_version: (Object)
  • strategy: (Symbol) (defaults to: :revert_to)

Returns:

  • (Object)


101
102
103
104
105
106
107
108
109
110
# File 'lib/active_version/instrumentation.rb', line 101

def instrument_revision_reverted(source, from_version:, to_version:, strategy: :revert_to)
  instrument_event(:revision_reverted) do
    {
      source: source,
      from_version: from_version,
      to_version: to_version,
      strategy: strategy
    }
  end
end

.instrument_revision_switch_applied(source, from_version:, to_version:, append:) ⇒ Object

Instrument revision pointer switch action

Parameters:

  • source (Object)
  • from_version: (Object)
  • to_version: (Object)
  • append: (Boolean)

Returns:

  • (Object)


113
114
115
116
117
118
119
120
121
122
# File 'lib/active_version/instrumentation.rb', line 113

def instrument_revision_switch_applied(source, from_version:, to_version:, append:)
  instrument_event(:revision_switch_applied) do
    {
      source: source,
      from_version: from_version,
      to_version: to_version,
      append: append
    }
  end
end

.instrument_revision_write_failed(source, error:) ⇒ Object

Instrument revision write failures

Parameters:

  • source (Object)
  • error: (Exception, nil)

Returns:

  • (Object)


125
126
127
128
129
130
131
132
# File 'lib/active_version/instrumentation.rb', line 125

def instrument_revision_write_failed(source, error:)
  instrument_event(:revision_write_failed) do
    {
      source: source,
      error: format_error(error)
    }
  end
end

.instrument_translation_created(translation, source) ⇒ Object

Instrument a translation creation

Parameters:

  • translation (Object)
  • source (Object)

Returns:

  • (Object)


20
21
22
23
24
25
26
27
28
# File 'lib/active_version/instrumentation.rb', line 20

def instrument_translation_created(translation, source)
  instrument_event(:translation_created) do
    {
      translation: translation,
      source: source,
      locale: translation.locale
    }
  end
end

.instrument_translation_destroyed(translation, source) ⇒ Object

Instrument a translation destroy

Parameters:

  • translation (Object)
  • source (Object)

Returns:

  • (Object)


42
43
44
45
46
47
48
49
50
51
# File 'lib/active_version/instrumentation.rb', line 42

def instrument_translation_destroyed(translation, source)
  instrument_event(:translation_destroyed) do
    {
      translation: translation,
      source: source,
      locale: translation.locale,
      translation_id: translation.id
    }
  end
end

.instrument_translation_fallback_used(source, attr:, requested_locale:, resolved_locale:) ⇒ Object

Instrument when translation falls back from requested locale

Parameters:

  • source (Object)
  • attr: (Object)
  • requested_locale: (Object)
  • resolved_locale: (Object)

Returns:

  • (Object)


54
55
56
57
58
59
60
61
62
63
# File 'lib/active_version/instrumentation.rb', line 54

def instrument_translation_fallback_used(source, attr:, requested_locale:, resolved_locale:)
  instrument_event(:translation_fallback_used) do
    {
      source: source,
      attr: attr,
      requested_locale: requested_locale,
      resolved_locale: resolved_locale
    }
  end
end

.instrument_translation_updated(translation, source) ⇒ Object

Instrument a translation update

Parameters:

  • translation (Object)
  • source (Object)

Returns:

  • (Object)


31
32
33
34
35
36
37
38
39
# File 'lib/active_version/instrumentation.rb', line 31

def instrument_translation_updated(translation, source)
  instrument_event(:translation_updated) do
    {
      translation: translation,
      source: source,
      locale: translation.locale
    }
  end
end