Sha256: 8b71dfb88f696ef51be1db1937d5cc80aa8f179301c5b84115f09724df2213de

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

module Appsignal
  class Hooks
    class << self
      def register(name, hook)
        hooks[name] = hook
      end

      def load_hooks
        hooks.each do |name, hook|
          hook.try_to_install(name)
        end
      end

      def hooks
        @hooks ||= {}
      end
    end

    class Hook
      def self.register(name, hook=self)
        Appsignal::Hooks.register(name, hook.new)
      end

      def try_to_install(name)
        if dependencies_present? && !installed?
          Appsignal.logger.info("Installing #{name} hook")
          begin
            install
            @installed = true
          rescue => ex
            Appsignal.logger.error("Error while installing #{name} hook: #{ex}")
          end
        end
      end

      def installed?
        !! @installed
      end

      def dependencies_present?
        raise NotImplementedError
      end

      def install
        raise NotImplementedError
      end
    end
  end
end

require 'appsignal/hooks/celluloid'
require 'appsignal/hooks/delayed_job'
require 'appsignal/hooks/net_http'
require 'appsignal/hooks/passenger'
require 'appsignal/hooks/puma'
require 'appsignal/hooks/rake'
require 'appsignal/hooks/redis'
require 'appsignal/hooks/resque'
require 'appsignal/hooks/sequel'
require 'appsignal/hooks/sidekiq'
require 'appsignal/hooks/unicorn'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
appsignal-0.12.rc.9 lib/appsignal/hooks.rb
appsignal-0.12.rc.8 lib/appsignal/hooks.rb