Sha256: 265fffc903bc5cd1e70bac0b1c453511a7b2fb3cc267ae36db938a688e101069

Contents?: true

Size: 1.87 KB

Versions: 3

Compression:

Stored size: 1.87 KB

Contents

require 'triglav/agent/base/connection'
require 'vertica'
require 'uri'

module Triglav::Agent
  module Vertica
    class Connection < Base::Connection
      attr_reader :connection_info

      def initialize(connection_info)
        @connection_info = connection_info
      end

      def close
        @connection.close rescue nil if @connection
      end

      def query(sql)
        connection.query(sql)
      end

      private

      def connection
        return @connection if @connection
        begin
          @connection = ::Vertica.connect(connection_params)
        rescue => e
          $logger.error { "Failed to connect #{connection_info[:host]}:#{connection_info[:port]} with #{connection_info[:user]}" }
          raise e
        end
        $logger.info { "Connected to #{connection_info[:host]}:#{connection_info[:port]}" }
        set_resource_pool
        set_memorycap
        @connection
      end

      def set_resource_pool
        if @connection_info[:resource_pool] and !@connection_info[:resource_pool].empty?
          @connection.query("set session resource_pool = '#{@connection_info[:resource_pool]}'")
        end
      end

      def set_memorycap
        if @connection_info[:memorycap] and !@connection_info[:memorycap].empty?
          @connection.query("set session memorycap = '#{@connection_info[:memorycap]}'")
        end
      end

      def connection_params
        params = @connection_info.dup
        params.delete(:resource_pool)
        params.delete(:memorycap)
        params.merge!(global_connection_params)
      end

      def global_connection_params
        params = {}
        params[:interruptable] = $setting.dig(:vertica, :interruptable) if $setting[:vertica].has_key?(:interruptable)
        params[:read_timeout] = $setting.dig(:vertica, :read_timeout) if $setting[:vertica].has_key?(:read_timeout)
        params
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
triglav-agent-vertica-1.0.0 lib/triglav/agent/vertica/connection.rb
triglav-agent-vertica-1.0.0.rc2 lib/triglav/agent/vertica/connection.rb
triglav-agent-vertica-1.0.0.rc1 lib/triglav/agent/vertica/connection.rb