Sha256: 98674e6d29a47762e905bcfec0577d392f839c4b98bdbc3aa2d6c5fbc61115a4

Contents?: true

Size: 1.45 KB

Versions: 6

Compression:

Stored size: 1.45 KB

Contents

require 'sqreen/ecosystem/module_api'
require 'sqreen/ecosystem/module_api/instrumentation'
require 'sqreen/ecosystem/module_api/message_producer'
require 'sqreen/ecosystem/databases/database_connection_data'

module Sqreen
  module Ecosystem
    module Databases
      class Postgres
        include ModuleApi::Instrumentation
        include ModuleApi::MessageProducer

        def setup
          advice = wrap_for_interest(DatabaseConnectionData, &method(:after_advice))
          instrument 'PG::Connection#initialize', after: advice
        end

        private

        # instance is of type +PG::Connection+
        # > c = PG::Connection.new(host: '172.17.0.2', password: 'mysecretpassword', user: 'postgres')
        #  => #<PG::Connection:0x000055b44d077d10>
        # > %i{host port user db}.map { |m| c.send m }
        #  => ["172.17.0.2", 5432, "postgres", "postgres"]
        def after_advice(call, _ball)
          conn = call.instance

          # build & submit signal
          signal = DatabaseConnectionData.new(transport: :postgres)

          host = conn.host
          if host
            if host.include?('/')
              signal.unix_socket = host
              signal.host = 'localhost'
              signal.ip = '::1'
            else
              signal.host = host
            end
          end

          signal.port = conn.port
          signal.username = conn.user
          signal.db = conn.db

          signal
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sqreen-1.22.0-java lib/sqreen/ecosystem/databases/postgres.rb
sqreen-1.22.0 lib/sqreen/ecosystem/databases/postgres.rb
sqreen-1.21.1-java lib/sqreen/ecosystem/databases/postgres.rb
sqreen-1.21.1 lib/sqreen/ecosystem/databases/postgres.rb
sqreen-1.21.0-java lib/sqreen/ecosystem/databases/postgres.rb
sqreen-1.21.0 lib/sqreen/ecosystem/databases/postgres.rb