Sha256: 75e15024f87054754630eef3c29c8d546d1da1d59e61631b97131cc53b39e057

Contents?: true

Size: 1.64 KB

Versions: 39

Compression:

Stored size: 1.64 KB

Contents

# typed: ignore

# 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

39 entries across 39 versions & 1 rubygems

Version Path
sqreen-1.25.1 lib/sqreen/web_server/puma.rb
sqreen-1.25.0 lib/sqreen/web_server/puma.rb
sqreen-1.24.3 lib/sqreen/web_server/puma.rb
sqreen-1.24.2 lib/sqreen/web_server/puma.rb
sqreen-1.24.1 lib/sqreen/web_server/puma.rb
sqreen-1.24.0 lib/sqreen/web_server/puma.rb
sqreen-1.23.2 lib/sqreen/web_server/puma.rb
sqreen-1.23.1 lib/sqreen/web_server/puma.rb
sqreen-1.23.0 lib/sqreen/web_server/puma.rb
sqreen-1.22.1 lib/sqreen/web_server/puma.rb
sqreen-1.22.0-java lib/sqreen/web_server/puma.rb
sqreen-1.22.0 lib/sqreen/web_server/puma.rb
sqreen-1.21.1-java lib/sqreen/web_server/puma.rb
sqreen-1.21.1 lib/sqreen/web_server/puma.rb
sqreen-1.21.0-java lib/sqreen/web_server/puma.rb
sqreen-1.21.0 lib/sqreen/web_server/puma.rb
sqreen-1.20.4-java lib/sqreen/web_server/puma.rb
sqreen-1.20.4 lib/sqreen/web_server/puma.rb
sqreen-1.21.0.beta3-java lib/sqreen/web_server/puma.rb
sqreen-1.21.0.beta3 lib/sqreen/web_server/puma.rb