Module: Yabeda

Includes:
DSL
Defined in:
lib/yabeda.rb,
lib/yabeda/dsl.rb,
lib/yabeda/tags.rb,
lib/yabeda/gauge.rb,
lib/yabeda/group.rb,
lib/yabeda/errors.rb,
lib/yabeda/metric.rb,
lib/yabeda/counter.rb,
lib/yabeda/railtie.rb,
lib/yabeda/version.rb,
lib/yabeda/histogram.rb,
lib/yabeda/base_adapter.rb,
lib/yabeda/global_group.rb,
lib/yabeda/dsl/class_methods.rb,
lib/yabeda/dsl/metric_builder.rb,
lib/yabeda/dsl/option_builder.rb

Overview

Extendable framework for collecting and exporting metrics from Ruby apps

Defined Under Namespace

Modules: DSL, Rails Classes: AlreadyConfiguredError, BaseAdapter, ConfigurationError, Counter, Gauge, GlobalGroup, Group, Histogram, Metric, Tags

Constant Summary collapse

VERSION =
"0.9.0"

Class Method Summary collapse

Methods included from DSL

included

Class Method Details

.adaptersHash<String, Yabeda::BaseAdapter>

Returns All loaded adapters.

Returns:



29
30
31
# File 'lib/yabeda.rb', line 29

def adapters
  @adapters ||= Concurrent::Hash.new
end

.collectorsArray<Proc>

Returns All collectors for periodical retrieving of metrics.

Returns:

  • (Array<Proc>)

    All collectors for periodical retrieving of metrics



34
35
36
# File 'lib/yabeda.rb', line 34

def collectors
  @collectors ||= Concurrent::Array.new
end

.configuratorsArray<Proc>

Returns All configuration blocks for postponed setup.

Returns:

  • (Array<Proc>)

    All configuration blocks for postponed setup



54
55
56
# File 'lib/yabeda.rb', line 54

def configurators
  @configurators ||= Concurrent::Array.new
end

.configure!void

This method returns an undefined value.

Perform configuration: registration of metrics and collector blocks rubocop: disable Metrics/MethodLength, Metrics/AbcSize



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/yabeda.rb', line 67

def configure!
  raise(AlreadyConfiguredError, @configured_by) if already_configured?

  configurators.each do |(group, block)|
    group group
    class_eval(&block)
    group nil
  end

  # Register metrics in adapters after evaluating all configuration blocks
  # to ensure that all global settings (like default tags) will be applied.
  adapters.each_value do |adapter|
    metrics.each_value do |metric|
      adapter.register!(metric)
    end
  end

  @configured_by = caller_locations(1, 1)[0].to_s
end

.configured?Boolean Also known as: already_configured?

Returns Whether Yabeda.configure! has been already called.

Returns:

  • (Boolean)

    Whether Yabeda.configure! has been already called



59
60
61
# File 'lib/yabeda.rb', line 59

def configured?
  !@configured_by.nil?
end

.default_tagsHash<Symbol, Symbol>

Returns All added global default tags.

Returns:

  • (Hash<Symbol, Symbol>)

    All added global default tags



39
40
41
# File 'lib/yabeda.rb', line 39

def default_tags
  @default_tags ||= Concurrent::Hash.new
end

.groupsHash<String, Yabeda::Group>

Returns All registered metrics.

Returns:



22
23
24
25
26
# File 'lib/yabeda.rb', line 22

def groups
  @groups ||= Concurrent::Hash.new.tap do |hash|
    hash[nil] = Yabeda::GlobalGroup.new(nil)
  end
end

.metricsHash<String, Yabeda::Metric>

Returns All registered metrics.

Returns:



17
18
19
# File 'lib/yabeda.rb', line 17

def metrics
  @metrics ||= Concurrent::Hash.new
end

.register_adapter(name, instance) ⇒ Object

Parameters:



45
46
47
48
49
50
51
# File 'lib/yabeda.rb', line 45

def register_adapter(name, instance)
  adapters[name] = instance
  # NOTE: Pretty sure there is race condition
  metrics.each do |_, metric|
    instance.register!(metric)
  end
end

.reset!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Forget all the configuration. For testing purposes as it doesn’t rollback changes in adapters. rubocop: disable Metrics/AbcSize



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/yabeda.rb', line 92

def reset!
  default_tags.clear
  adapters.clear
  groups.each_key { |group| singleton_class.send(:remove_method, group) if group && respond_to?(group) }
  @groups = nil
  metrics.each_key { |metric| singleton_class.send(:remove_method, metric) if respond_to?(metric) }
  @metrics = nil
  collectors.clear
  configurators.clear
  instance_variable_set(:@configured_by, nil)
end