63 lines
1.5 KiB
Ruby
63 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
# Provides routines to identify the current runtime as which the application
|
||
|
# executes, such as whether it is an application server and which one.
|
||
|
module Runtime
|
||
|
class << self
|
||
|
def name
|
||
|
matches = []
|
||
|
matches << :puma if puma?
|
||
|
matches << :unicorn if unicorn?
|
||
|
matches << :console if console?
|
||
|
matches << :sidekiq if sidekiq?
|
||
|
|
||
|
raise "Ambiguous process match: #{matches}" if matches.size > 1
|
||
|
|
||
|
matches.first || :unknown
|
||
|
end
|
||
|
|
||
|
def puma?
|
||
|
!!(defined?(::Puma) && bin == 'puma')
|
||
|
end
|
||
|
|
||
|
# For unicorn, we need to check for actual server instances to avoid false positives.
|
||
|
def unicorn?
|
||
|
!!(defined?(::Unicorn) && defined?(::Unicorn::HttpServer))
|
||
|
end
|
||
|
|
||
|
def sidekiq?
|
||
|
!!(defined?(::Sidekiq) && Sidekiq.server? && bin == 'sidekiq')
|
||
|
end
|
||
|
|
||
|
def console?
|
||
|
!!defined?(::Rails::Console)
|
||
|
end
|
||
|
|
||
|
def app_server?
|
||
|
puma? || unicorn?
|
||
|
end
|
||
|
|
||
|
def multi_threaded?
|
||
|
puma? || sidekiq?
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
# Some example values from my system:
|
||
|
# puma: /data/cache/bundle-2.5/bin/puma
|
||
|
# unicorn: unicorn_rails master -E development -c /tmp/unicorn.rb -l 0.0.0.0:8080
|
||
|
# sidekiq: /data/cache/bundle-2.5/bin/sidekiq
|
||
|
# thin: bin/rails
|
||
|
# console: bin/rails
|
||
|
def script_name
|
||
|
$0
|
||
|
end
|
||
|
|
||
|
def bin
|
||
|
File.basename(script_name)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|