Module: ROM::Plugins::Relation::SQL::Instrumentation

Defined in:
lib/rom/plugins/relation/sql/instrumentation.rb

Overview

Instrumentation for relations and commands

This plugin allows configuring a notification system, that will be used to instrument interactions with databases, it's based on an abstract API so it should work with any instrumentation object that provides instrument(identifier, payload) method.

By default, instrumentation is triggered with following arguments:

  • identifier is set to :sql
  • payload is set to a hash with following keys:
    • :name database type, ie :sqlite, :postgresql etc.
    • :query a string with an SQL statement that was executed

Examples:

configuring notifications

config = ROM::Configuration.new(:sqlite, 'sqlite::memory')

config.plugin(:sql, relations: :instrumentation) do |c|
  c.notifications = MyNotifications.new
end

Defined Under Namespace

Classes: Instrumenter

Class Method Summary collapse

Class Method Details

.apply(target, notifications:) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/rom/plugins/relation/sql/instrumentation.rb', line 33

def self.apply(target, notifications:, **)
  db = registry.gateways[target.config.component.gateway].connection

  return if db.respond_to?(:rom_instrumentation?)

  db.extend(Instrumenter.new(db.database_type, notifications))
end

.included(klass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Add :notifications option to a relation



83
84
85
86
# File 'lib/rom/plugins/relation/sql/instrumentation.rb', line 83

def self.included(klass)
  super
  klass.option :notifications
end