bipbip 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 767f7a2a56b1e00dc86b36f60d4599440ca5f226
4
- data.tar.gz: 3619bb7f7c507ae3687df15d5e4231ac5a930070
3
+ metadata.gz: 27e9aa7d8a9f00d2940ec3dde1918556f32b5453
4
+ data.tar.gz: e73717090f198d321f70deab0dd4540d08addc33
5
5
  SHA512:
6
- metadata.gz: 7700dd1f8f8de9a8e4e8a77b09f8e2e5281b745c22fcec18add44e12224acd9deec5c57b7272a0c50fa24dd17cf208a9f31f8f60170b8bc1c7683a0ee9166ec3
7
- data.tar.gz: 5bec57fe7ba560975a231c647b50dfa15adc16c02b830dc127153d832300961d50060cc8aa8fb711b1e894db3b0af1e7d34b37ad394f0e45ca9dea14cdb5e4ac
6
+ metadata.gz: b47fdeb97354d69730a3a3cf72cd8bcaa32f05622031e4a152dec618228ebb2027ebb6da37c2182afe87b84f2ee27df1e3fa7f993ca297dc5ee531ce7a589f04
7
+ data.tar.gz: ebe253a1196b617650450c467d3e4ff4194c3c7bfdd6dc9579967895eab62549420ead96d308b9568dbe461e8e5806e1cc32ee9da67b5ef7c1ee52cc7a6235f9
data/lib/bipbip.rb CHANGED
@@ -9,6 +9,7 @@ module Bipbip
9
9
  require 'shellwords'
10
10
 
11
11
  require 'interruptible_sleep'
12
+ require 'process_exists'
12
13
 
13
14
  require 'bipbip/version'
14
15
  require 'bipbip/helper'
data/lib/bipbip/agent.rb CHANGED
@@ -2,22 +2,26 @@ module Bipbip
2
2
 
3
3
  class Agent
4
4
 
5
+ PLUGIN_RESPAWN_DELAY = 5
6
+
5
7
  attr_accessor :plugins
6
8
  attr_accessor :storages
7
9
 
8
10
  def initialize(config_file = nil)
9
11
  @plugins = []
10
12
  @storages = []
11
- @plugin_pids = []
12
13
 
13
14
  load_config(config_file) if config_file
14
15
  end
15
16
 
16
17
  def run
17
18
  Bipbip.logger.info 'Startup...'
18
- Bipbip.logger.warn 'No services configured' if @plugins.empty?
19
19
  Bipbip.logger.warn 'No storages configured' if @storages.empty?
20
20
 
21
+ if @plugins.empty?
22
+ raise 'No services configured'
23
+ end
24
+
21
25
  @storages.each do |storage|
22
26
  @plugins.each do |plugin|
23
27
  Bipbip.logger.info "Setting up plugin #{plugin.name} for storage #{storage.name}"
@@ -26,16 +30,24 @@ module Bipbip
26
30
  end
27
31
 
28
32
  ['INT', 'TERM'].each { |sig| trap(sig) {
29
- Thread.new { interrupt }
33
+ Thread.new do
34
+ interrupt
35
+ exit
36
+ end
30
37
  } }
31
38
 
32
39
  @plugins.each do |plugin|
33
40
  Bipbip.logger.info "Starting plugin #{plugin.name} with config #{plugin.config}"
34
- @plugin_pids.push plugin.run(@storages)
41
+ plugin.run(@storages)
35
42
  end
36
43
 
37
- while true
38
- sleep 1
44
+ @interrupted = false
45
+ until @interrupted
46
+ pid = Process.wait(-1)
47
+ plugin = plugin_by_pid(pid)
48
+ Bipbip.logger.error "Plugin #{plugin.name} with config #{plugin.config} died. Respawning..."
49
+ sleep(PLUGIN_RESPAWN_DELAY)
50
+ plugin.run(@storages)
39
51
  end
40
52
  end
41
53
 
@@ -78,14 +90,25 @@ module Bipbip
78
90
  end
79
91
 
80
92
  def interrupt
93
+ @interrupted = true
94
+
81
95
  Bipbip.logger.info 'Interrupt, killing plugin processes...'
82
- @plugin_pids.each { |pid| Process.kill('TERM', pid) }
96
+ @plugins.each do |plugin|
97
+ Process.kill('TERM', plugin.pid) if Process.exists?(plugin.pid)
98
+ end
83
99
 
84
100
  Bipbip.logger.info 'Waiting for all plugin processes to exit...'
85
101
  Process.waitall
102
+ end
86
103
 
87
- Bipbip.logger.info 'Exiting'
88
- exit
104
+ private
105
+
106
+ def plugin_by_pid(pid)
107
+ plugin = @plugins.find { |plugin| plugin.pid == pid }
108
+ if plugin.nil?
109
+ raise "Cannot find plugin with pid #{pid}"
110
+ end
111
+ plugin
89
112
  end
90
113
  end
91
114
  end
data/lib/bipbip/plugin.rb CHANGED
@@ -6,6 +6,7 @@ module Bipbip
6
6
  attr_accessor :name
7
7
  attr_accessor :config
8
8
  attr_accessor :metric_group
9
+ attr_accessor :pid
9
10
 
10
11
  def self.factory(name, config, frequency, metric_group = nil)
11
12
  require "bipbip/plugin/#{Bipbip::Helper.name_to_filename(name)}"
@@ -15,12 +16,12 @@ module Bipbip
15
16
  def initialize(name, config, frequency, metric_group = nil)
16
17
  @name = name.to_s
17
18
  @config = config.to_hash
18
- @frequency = frequency.to_i
19
+ @frequency = frequency.to_f
19
20
  @metric_group = (metric_group || name).to_s
20
21
  end
21
22
 
22
23
  def run(storages)
23
- child_pid = fork do
24
+ @pid = fork do
24
25
  ['INT', 'TERM'].each { |sig| trap(sig) {
25
26
  Thread.new { interrupt } if !@interrupted
26
27
  } }
@@ -41,10 +42,13 @@ module Bipbip
41
42
  interruptible_sleep (frequency - (Time.now - time))
42
43
  end
43
44
  rescue => e
44
- Bipbip.logger.error "#{name} #{source_identifier}: Error getting data: #{e.message}"
45
+ Bipbip.logger.error "#{name} #{source_identifier}: Error: #{e.message}"
45
46
  interruptible_sleep retry_delay
46
47
  retry_delay += frequency if retry_delay < frequency * 10
47
48
  retry
49
+ rescue Exception => e
50
+ Bipbip.logger.error "#{name} #{source_identifier}: Fatal error: #{e.message}"
51
+ raise e
48
52
  end
49
53
  end
50
54
  end
@@ -1,3 +1,3 @@
1
1
  module Bipbip
2
- VERSION = '0.4.4'
2
+ VERSION = '0.4.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bipbip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cargo Media
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-10-16 00:00:00.000000000 Z
13
+ date: 2014-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: copperegg
@@ -138,6 +138,20 @@ dependencies:
138
138
  - - "~>"
139
139
  - !ruby/object:Gem::Version
140
140
  version: '1.10'
141
+ - !ruby/object:Gem::Dependency
142
+ name: process_exists
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: 0.1.3
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: 0.1.3
141
155
  - !ruby/object:Gem::Dependency
142
156
  name: rake
143
157
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
235
  version: '0'
222
236
  requirements: []
223
237
  rubyforge_project:
224
- rubygems_version: 2.4.1
238
+ rubygems_version: 2.4.2
225
239
  signing_key:
226
240
  specification_version: 4
227
241
  summary: Gather services data and store in CopperEgg