Class: Bipbip::Plugin
Defined Under Namespace
Classes: Apache2, Gearman, Memcached, Mysql, Nginx, Redis
Instance Method Summary
collapse
#interrupt_sleep, #interruptible_sleep
Constructor Details
#initialize(name) ⇒ Plugin
Returns a new instance of Plugin.
6
7
8
|
# File 'lib/bipbip/plugin.rb', line 6
def initialize(name)
@name = name.to_s
end
|
Instance Method Details
#interrupt ⇒ Object
36
37
38
39
40
|
# File 'lib/bipbip/plugin.rb', line 36
def interrupt
Bipbip.logger.info "Interrupting plugin process #{Process.pid}"
@interrupted = true
interrupt_sleep
end
|
#interrupted? ⇒ Boolean
42
43
44
|
# File 'lib/bipbip/plugin.rb', line 42
def interrupted?
@interrupted || Process.getpgid(Process.ppid) != Process.getpgrp
end
|
#metric_identifier(server) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/bipbip/plugin.rb', line 50
def metric_identifier(server)
identifier = Bipbip.fqdn
unless server.empty?
identifier += '::' + server.values.first
end
identifier
end
|
#metrics_names ⇒ Object
58
59
60
|
# File 'lib/bipbip/plugin.rb', line 58
def metrics_names
metrics_schema.map {|metric| metric[:name] }
end
|
#metrics_schema ⇒ Object
62
63
64
|
# File 'lib/bipbip/plugin.rb', line 62
def metrics_schema
raise 'Missing method metrics_schema'
end
|
#monitor(server) ⇒ Object
66
67
68
|
# File 'lib/bipbip/plugin.rb', line 66
def monitor(server)
raise 'Missing method monitor'
end
|
#name ⇒ Object
46
47
48
|
# File 'lib/bipbip/plugin.rb', line 46
def name
@name
end
|
#run(server, frequency) ⇒ Object
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
|
# File 'lib/bipbip/plugin.rb', line 10
def run(server, frequency)
child_pid = fork do
['INT', 'TERM'].each { |sig| trap(sig) {
Thread.new { interrupt } if !@interrupted
} }
retry_delay = frequency
metric_identifier = metric_identifier(server)
begin
until interrupted? do
time = Time.now
data = monitor(server)
Bipbip.logger.debug "#{name} #{metric_identifier}: Data: #{data}"
CopperEgg::MetricSample.save(name, metric_identifier, Time.now.to_i, data)
retry_delay = frequency
interruptible_sleep (frequency - (Time.now - time))
end
rescue => e
Bipbip.logger.error "#{name} #{metric_identifier}: Error getting data: #{e.inspect}"
interruptible_sleep retry_delay
retry_delay += frequency if retry_delay < frequency * 10
retry
end
end
end
|