Module: Drone

Extended by:
Forwardable
Defined in:
lib/drone.rb,
lib/drone/core.rb,
lib/drone/errors.rb,
lib/drone/version.rb,
lib/drone/monitoring.rb,
lib/drone/utils/ewma.rb,
lib/drone/storage/base.rb,
lib/drone/metrics/gauge.rb,
lib/drone/metrics/meter.rb,
lib/drone/metrics/timer.rb,
lib/drone/metrics/metric.rb,
lib/drone/storage/memory.rb,
lib/drone/interfaces/base.rb,
lib/drone/metrics/counter.rb,
lib/drone/metrics/histogram.rb,
lib/drone/interfaces/console.rb,
lib/drone/utils/uniform_sample.rb,
lib/drone/schedulers/eventmachine.rb,
lib/drone/utils/exponentially_decaying_sample.rb

Defined Under Namespace

Modules: Interface, Interfaces, Metrics, Monitoring, Schedulers, Storage Classes: AlreadyDefined, DroneError, EWMA, ExponentiallyDecayingSample, Metric, UniformSample

Constant Summary collapse

VERSION =
"1.0.10"

Class Method Summary collapse

Class Method Details

.add_output(type, *args) ⇒ Object

Instantiate an output module.

Parameters:

  • type (String, Symbol)

    Class name in lowercase

  • args (Array)

    additional parameters will be sent to thh class constructor



77
78
79
80
81
# File 'lib/drone/core.rb', line 77

def add_output(type, *args)
  class_name = type.to_s.capitalize
  klass = Drone::Interfaces.const_get(class_name)
  @output_modules << klass.new(*args)
end

.each_metricObject



55
56
57
58
# File 'lib/drone/core.rb', line 55

def each_metric
  raise "Block expected" unless block_given?
  @metrics.each{|m| yield(m) }
end

.find_metric(name) ⇒ Object

Fetch a metric by its name

Parameters:

  • name (String)

    The mtric’s name



66
67
68
# File 'lib/drone/core.rb', line 66

def find_metric(name)
  @metrics.detect{|m| m.name == name }
end

.init_drone(scheduler = Schedulers::EMScheduler, storage = Storage::Memory.new) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/drone/core.rb', line 37

def init_drone(scheduler = Schedulers::EMScheduler, storage = Storage::Memory.new)
  @metrics = []
  @scheduler = scheduler
  @storage = storage
  @monitored_classes = []
  @output_modules = []
end

.register_counter(type) ⇒ Object

Register a new counter

Parameters:

  • type (String)

    Name of this metric

See Also:



89
90
91
# File 'lib/drone/core.rb', line 89

def register_counter(type)
  register_metric( Drone::Metrics::Counter.new(type) )
end

.register_gauge(type, &block) ⇒ Object

Register a new gauge

Parameters:

  • type (String)

    Name of this metric

See Also:



111
112
113
# File 'lib/drone/core.rb', line 111

def register_gauge(type, &block)
  register_metric( Drone::Metrics::Gauge.new(type, &block) )
end

.register_histogram(name, type = :uniform) ⇒ Object

Register an Histogram

Parameters:

  • name (String)

    Name of this metric

  • type (optional, Enum) (defaults to: :uniform)

    one of Drone::Metrics::Histogram::TYPE_UNIFORM or Drone::Metrics::Histogram::TYPE_BIASED

See Also:



101
102
103
# File 'lib/drone/core.rb', line 101

def register_histogram(name, type = :uniform)
  register_metric( Drone::Metrics::Histogram.new(name, type) )
end

.register_timer(name) ⇒ Object

Register a new timer

Parameters:

  • name (String)

    Name of this metric

See Also:



121
122
123
# File 'lib/drone/core.rb', line 121

def register_timer(name)
  register_metric( Drone::Metrics::Timer.new(name) )
end

.require_lib(path) ⇒ Object



3
4
5
# File 'lib/drone.rb', line 3

def self.require_lib(path)
  require File.expand_path("../#{path}", __FILE__)
end

.start_monitoringObject

Start monitoring. This method needs to be called when the timers can be started In the case of eventmachine scheduler it needs to be called in the EM::run block



51
52
53
# File 'lib/drone/core.rb', line 51

def start_monitoring
  @scheduler.start()
end