Sha256: f3bca2e62899e57e342a7c525c5ec81f3a90097d828aa969df35f399e276cb20

Contents?: true

Size: 1.63 KB

Versions: 12

Compression:

Stored size: 1.63 KB

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

module Sqreen
  module WebServer
    module Puma
      def self.active?
        Sqreen::Dependency.const_exist?('Puma::Runner') && ObjectSpace.each_object(::Puma::Runner).count > 0
      end

      def forking?
        !cluster.nil?
      end

      def preload_app?
        forking? && (cluster && cluster.preload? || false)
      end

      def master?
        # HACK: expects outside calling timimg
        # - with preloading, this is hit early in master and records its PID
        # - without preloading but forking, the app will be loaded in the child, so recorded PID stays nil
        # - without forking, master makes no sense, recorded PID stays nil
        master! if preload_app?

        Sqreen.log.debug "[#{Process.pid}] master? #{@master_pid == Process.pid}"

        @master_pid == Process.pid
      end

      def before_fork
        before_fork = lambda do |_ = nil| # 3.x sends an arg but <3.0 doesn't
          yield
        end
        (configuration.options[:before_fork] || []) << before_fork
      end

      def after_fork
        after_fork = lambda do |_|
          yield
        end
        (configuration.options[:before_worker_boot] ||= []) << after_fork
      end

      private

      def master!
        @master_pid ||= Process.pid
      end

      def cluster
        return unless ::Puma.const_defined?('Cluster')

        ObjectSpace.each_object(::Puma::Cluster).first
      end

      def configuration
        ObjectSpace.each_object(::Puma::Configuration).first
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
sqreen-1.18.6-java lib/sqreen/web_server/puma.rb
sqreen-1.18.6 lib/sqreen/web_server/puma.rb
sqreen-1.18.5-java lib/sqreen/web_server/puma.rb
sqreen-1.18.5 lib/sqreen/web_server/puma.rb
sqreen-1.18.4-java lib/sqreen/web_server/puma.rb
sqreen-1.18.4 lib/sqreen/web_server/puma.rb
sqreen-1.18.3-java lib/sqreen/web_server/puma.rb
sqreen-1.18.3 lib/sqreen/web_server/puma.rb
sqreen-1.18.3.beta2 lib/sqreen/web_server/puma.rb
sqreen-1.18.3.beta1 lib/sqreen/web_server/puma.rb
sqreen-1.18.2-java lib/sqreen/web_server/puma.rb
sqreen-1.18.2 lib/sqreen/web_server/puma.rb