Class: Puma::Plugin::Telemetry::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/plugin/telemetry/config.rb

Overview

Configuration object for plugin

Constant Summary collapse

DEFAULT_PUMA_TELEMETRY =
[
  # Total booted workers.
  'workers.booted',

  # Total number of workers configured.
  'workers.total',

  # Current number of threads spawned.
  'workers.spawned_threads',

  # Maximum number of threads that can run .
  'workers.max_threads',

  # Number of requests performed so far.
  'workers.requests_count',

  # Number of requests waiting to be processed.
  'queue.backlog',

  # Free capacity that could be utilized, i.e. if backlog
  # is growing, and we still have capacity available, it
  # could mean that load balancing is not performing well.
  'queue.capacity'
].freeze
TARGETS =
{
  dogstatsd: Telemetry::Targets::DatadogStatsdTarget,
  io: Telemetry::Targets::IOTarget
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



79
80
81
82
83
84
85
86
87
# File 'lib/puma/plugin/telemetry/config.rb', line 79

def initialize
  @enabled = false
  @initial_delay = 5
  @frequency = 5
  @targets = []
  @puma_telemetry = DEFAULT_PUMA_TELEMETRY
  @socket_telemetry = false
  @socket_parser = :unpack
end

Instance Attribute Details

#enabledObject

Whenever telemetry should run with puma

  • default: false



40
41
42
# File 'lib/puma/plugin/telemetry/config.rb', line 40

def enabled
  @enabled
end

#frequencyObject

Seconds between publishing telemetry

  • default: 5



48
49
50
# File 'lib/puma/plugin/telemetry/config.rb', line 48

def frequency
  @frequency
end

#initial_delayObject

Number of seconds to delay first telemetry

  • default: 5



44
45
46
# File 'lib/puma/plugin/telemetry/config.rb', line 44

def initial_delay
  @initial_delay
end

#puma_telemetryObject

Which metrics to publish from puma stats. You can select a subset from default ones that interest you the most.

  • default: DEFAULT_PUMA_TELEMETRY



59
60
61
# File 'lib/puma/plugin/telemetry/config.rb', line 59

def puma_telemetry
  @puma_telemetry
end

#socket_parserObject

Symbol representing method to parse the ‘Socket::Option`, or the whole implementation as a lambda. Available options:

  • ‘:inspect`, based on the `Socket::Option#inspect` method, it’s the safest and slowest way to extract the info. ‘inspect` output might not be available, i.e. on AWS Fargate

  • ‘:unpack`, parse binary data given by `Socket::Option`. Fastest way (12x compared to `inspect`) but depends on kernel headers and fields ordering within the struct. It should almost always match though. DEFAULT

  • proc/lambda, ‘Socket::Option` will be given as an argument, it should return the value of `unacked` field as an integer.



77
78
79
# File 'lib/puma/plugin/telemetry/config.rb', line 77

def socket_parser
  @socket_parser
end

#socket_telemetryObject

Whenever to publish socket telemetry.

  • default: false



63
64
65
# File 'lib/puma/plugin/telemetry/config.rb', line 63

def socket_telemetry
  @socket_telemetry
end

#targetsObject

List of targets which are meant to publish telemetry. Target should implement ‘#call` method accepting a single argument - so it can be even a simple proc.

  • default: []



54
55
56
# File 'lib/puma/plugin/telemetry/config.rb', line 54

def targets
  @targets
end

Instance Method Details

#add_target(name_or_target, **args) ⇒ Object



101
102
103
104
105
106
107
108
109
# File 'lib/puma/plugin/telemetry/config.rb', line 101

def add_target(name_or_target, **args)
  return @targets.push(name_or_target) unless name_or_target.is_a?(Symbol)

  target = TARGETS.fetch(name_or_target) do
    raise Telemetry::Error, "Unknown Target: #{name_or_target.inspect}, #{args.inspect}"
  end

  @targets.push(target.new(**args))
end

#enabled?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/puma/plugin/telemetry/config.rb', line 89

def enabled?
  !!@enabled
end

#socket_telemetry!Object



93
94
95
# File 'lib/puma/plugin/telemetry/config.rb', line 93

def socket_telemetry!
  @socket_telemetry = true
end

#socket_telemetry?Boolean

Returns:

  • (Boolean)


97
98
99
# File 'lib/puma/plugin/telemetry/config.rb', line 97

def socket_telemetry?
  @socket_telemetry
end