Module: PromMultiProc::Rails

Defined in:
lib/prom_multi_proc/rails.rb

Class Method Summary collapse

Class Method Details

.init(prefix = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/prom_multi_proc/rails.rb', line 5

def self.init(prefix = nil)
  metrics = ENV.fetch("PROM_MULTI_PROC_DEFINITION_FILE", ::Rails.root.join("config/metrics.json").to_s)
  socket = ENV.fetch("PROM_MULTI_PROC_SOCKET", ::Rails.root.join("tmp/sockets/metrics.sock").to_s)

  program_name = File.basename($PROGRAM_NAME)
  app_name = ::Rails.application.class.name.underscore.split("/").first
  prefix ||= "#{app_name}_"

  if ENV.key?("PROM_MULTI_PROC_BATCH_SIZE")
    batch_size = ENV["PROM_MULTI_PROC_BATCH_SIZE"].to_i
  elsif %w(rails rake).include?(program_name) || ::Rails.env.development? || ::Rails.env.test?
    batch_size = 1
  elsif ::Rails.env.production?
    batch_size = 100
  else
    batch_size = 5
  end

  if ENV.key?("PROM_MULTI_PROC_BATCH_TIMEOUT")
    batch_timeout = ENV["PROM_MULTI_PROC_BATCH_TIMEOUT"].to_i
  else
    batch_timeout = 3
  end

  if ::Rails.env.development? || ::Rails.env.test?
    validate = true
  else
    validate = false
  end

  if ::Rails.logger
    logger = ::Rails.logger
  else
    logger = ::Logger.new(STDOUT)
  end

  logger.info("Setting up prom_multi_proc for #{app_name}-#{program_name}, batch size: #{batch_size}, batch timeout: #{batch_timeout} validate: #{validate}")

  Base.new(
    prefix: prefix,
    socket: socket,
    metrics: metrics,
    batch_size: batch_size,
    batch_timeout: batch_timeout,
    validate: validate,
    logger: logger
  )
end