riemann-babbler 2.1.5 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f58e1eb7094678ae29379799a5fc8b1af372ef29
4
- data.tar.gz: b19cf01b3a8cc0703676932b42d6e8097cc3fef5
3
+ metadata.gz: d7dde4680673d2a1b6285938ac38b35b441a76a4
4
+ data.tar.gz: 3fcbaf886ab2039c512355c3c8137c52c384313c
5
5
  SHA512:
6
- metadata.gz: 9df3a7c42860545236093a66b79e156d8df9a271d889148461a256d56e7d97ca8f00fd16e38b87a8ce6d8c7d889d2e30046d268b9829fedc4503866ac365e281
7
- data.tar.gz: f483d97d7bc9aebdc8929c25fbbc38deb213acced0e0bff4f654ee5a92b0e1e58b62c66a4ea69e9dc3955e6e2cad5c8abe0931e522e2f5273b5bff83e6cbc6cc
6
+ metadata.gz: 905dcf97e58e7d31739f23c699dc11da2d78dc2a40d6f216a4649aa27f33a9c3c9fcac2b4169c8c737ad03642f15429ef33ea993ec016957450e731b21c8a459
7
+ data.tar.gz: 48003d96e5f612b8bc5fc402078a2e285891594a1aad3441d9018e8f1c485ec344b2c6b9122b2739e602ca9ee2dac08aaf0febd4e10786197931fed82f0a24ab
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- riemann-babbler (2.1.5)
4
+ riemann-babbler (2.5.0)
5
5
  configatron
6
6
  docile
7
7
  file-tail
data/bin/riemann-babbler CHANGED
@@ -19,19 +19,17 @@ where [options] are:
19
19
  EOS
20
20
 
21
21
  opt :config, 'Config file', :default => '/etc/riemann-babbler/config.yml'
22
- opt :host, 'Riemann host', :default => '127.0.0.1'
23
- opt :port, 'Riemann port', :default => 5555
22
+ opt :host, 'Riemann server', :default => '127.0.0.1', :multi => true
23
+ opt :port, 'Riemann server default port', :default => 5555
24
+ opt :backlog, 'Riemann server backlog for events', :default => 100
24
25
  opt :timeout, 'Riemann timeout', :default => 5
25
- #todo: opt :event_hostname, 'Event hostname', :type => String
26
26
  opt :fqdn, 'Use fqdn for event hostname', :default => true
27
27
  opt :ttl, 'TTL for events', :default => 60
28
28
  opt :interval, 'Seconds between updates', :default => 60
29
29
  opt :log_level, 'Level log', :default => 'DEBUG'
30
- #todo: opt :log_output, 'Directions to puts your log', :default => STDOUT
31
- #todo: opt :log_format, 'Log format', :default => '%Y-%m-%d %H:%M:%S'
32
- opt :plugins_directory, 'Directory for plugins', :default => '/usr/share/riemann-babbler/plugins'
30
+ opt :plugins_directory, 'Directory for plugins', :short => '-d', :default => '/usr/share/riemann-babbler/plugins'
33
31
  opt :tcp, 'Use TCP transport instead of UDP (improves reliability, slight overhead.', :default => true
34
- opt :minimize_event_count, 'Minimize count of sent messages', :default => true
32
+ opt :minimize_event_count, 'Minimize count of sent messages', :short => '-m', :default => true
35
33
  opt :responder_bind_http, 'Bind to http responder', :default => '0.0.0.0:55755'
36
34
  opt :responder_bind_udp, 'Bind to udp responder', :default => '0.0.0.0:55955'
37
35
  end
@@ -5,6 +5,8 @@ module Riemann
5
5
  include Riemann::Babbler::Logging
6
6
  include Riemann::Babbler::Errors
7
7
 
8
+ CHECK_ALIVE_PLUGINS = 10
9
+
8
10
  def initialize(sender, array_of_klasses)
9
11
  @plugins = array_of_klasses
10
12
  @sender = sender
@@ -12,7 +14,6 @@ module Riemann
12
14
  end
13
15
 
14
16
  def run!
15
-
16
17
  @plugins.map do |plugin|
17
18
  unless plugin.new(@sender).send(:run_plugin)
18
19
  log :unknown, "Disable plugin: #{plugin}, because it not started by condition: run_plugin"
@@ -20,13 +21,14 @@ module Riemann
20
21
  end
21
22
  @mapping[plugin] = run_thread(plugin)
22
23
  end
23
-
24
24
  loop do
25
25
  check_alive
26
- sleep 10
26
+ sleep CHECK_ALIVE_PLUGINS
27
27
  end
28
28
  end
29
29
 
30
+ private
31
+
30
32
  def run_thread(plugin)
31
33
  Thread.new {
32
34
  log :unknown, "Start plugin #{plugin}"
@@ -52,4 +54,4 @@ module Riemann
52
54
 
53
55
  end
54
56
  end
55
- end
57
+ end
@@ -1,6 +1,4 @@
1
- require 'riemann/client'
2
- require 'resolv'
3
- require 'socket'
1
+ require_relative 'sender_client'
4
2
 
5
3
  module Riemann
6
4
  module Babbler
@@ -11,68 +9,41 @@ module Riemann
11
9
  include Riemann::Babbler::Options
12
10
  include Riemann::Babbler::Errors
13
11
 
14
- attr_accessor :sender
15
-
16
12
  HOSTNAME_FILE = '/proc/sys/kernel/hostname'
13
+ CHECK_CLIENT_ALIVE = 10
17
14
 
18
15
  def initialize
19
- @sender = build_riemann_client
20
16
  @hostname = hostname
21
- end
22
-
23
- alias :r :sender
24
-
25
- def build_riemann_client
26
- @sender = Riemann::Client.new(
27
- :host => resolv(opts.riemann.host), #todo: add ttl
28
- :port => opts.riemann.port,
29
- :timeout => opts.riemann.timeout
30
- )
31
- @sender = @sender.tcp if opts.riemann.tcp
32
- connect_client(@sender)
33
- @sender
34
- end
35
-
36
- #@return ipaddress of riemann server
37
- def resolv(host)
38
- begin
39
- ip = Resolv.new.getaddress(host)
40
- log :debug, "Resolv host: #{host} => #{ip}"
41
- rescue
42
- log :fatal, "Can't resolv hostname: #{host}"
43
- exit Errors::RESOLV_RIEMANN_SERVER
44
- end
45
- ip
46
- end
47
-
48
- #@return connect to riemann
49
- def connect_client(riemann)
50
- begin
51
- connect = @sender.connect
52
- log :debug, "Connected to #{riemann.host}:#{riemann.port}"
53
- rescue
54
- log :fatal, "Can't connect to riemann server: #{riemann.host}:#{riemann.port}"
55
- exit Errors::INIT_CONNECT
56
- end
57
- connect
17
+ @riemanns = create_riemanns
18
+ start
58
19
  end
59
20
 
60
21
  def <<(event)
61
22
  set_event_hostname(event)
62
23
  set_event_tags(event)
63
- log :debug, "Post event: #{event}"
64
- send_with_rescue(event, opts.riemann.timeout)
24
+ @riemanns.each {|r| r << event }
65
25
  end
66
26
 
67
- def send_with_rescue(event, timeout)
68
- begin
69
- Timeout::timeout(timeout) {
70
- @sender << event
71
- }
72
- rescue
73
- log :fatal, "Connection problem with #{@sender.host}:#{@sender.port}, exit."
74
- exit Errors::CONNECTION_PROBLEM
75
- end
27
+ private
28
+
29
+ def start
30
+ Thread.new do
31
+ loop do
32
+ @riemanns.each do |r|
33
+ next if r.alive?
34
+ log :error, "Riemann client #{r.host}:#{r.port} is died, up it"
35
+ r.start
36
+ end
37
+ log :debug, "Check alive of riemann client [#{@riemanns.count}]"
38
+ sleep CHECK_CLIENT_ALIVE
39
+ end
40
+ end
41
+ end
42
+
43
+ def create_riemanns
44
+ riemanns = Array.new
45
+ opts.riemann.host.each { |host| riemanns << Riemann::Babbler::Sender::Client.new(host) }
46
+ riemanns
76
47
  end
77
48
 
78
49
  def set_event_tags(event)
@@ -0,0 +1,104 @@
1
+ require 'riemann/client'
2
+ require 'resolv'
3
+ require 'socket'
4
+
5
+ module Riemann
6
+ module Babbler
7
+ class Sender
8
+ class Client
9
+
10
+ include Riemann::Babbler::Logging
11
+ include Riemann::Babbler::Options
12
+ include Riemann::Babbler::Errors
13
+
14
+ INTERVAL_FLUSH = 0.1
15
+
16
+ attr_accessor :host, :port, :events
17
+
18
+ def initialize(host)
19
+ @host, @port = host.split(':')
20
+ @port ||= opts.riemann.port
21
+ @events = Array.new
22
+ @riemann = client
23
+ start
24
+ end
25
+
26
+ def start
27
+ @running = true
28
+ @runner = Thread.new do
29
+ while @running
30
+ sleep INTERVAL_FLUSH
31
+ flush
32
+ end
33
+ @runner = nil
34
+ end
35
+ end
36
+
37
+ def stop
38
+ @running = false
39
+ end
40
+
41
+ def alive?
42
+ @runner.nil? || @runner.alive?
43
+ end
44
+
45
+ def <<(event)
46
+ @events.shift if @events.size < opts.riemann.backlog
47
+ @events << event
48
+ end
49
+
50
+ private
51
+
52
+ # flush events
53
+ def flush
54
+ return nil if @events.empty?
55
+ while @events.size > 0
56
+ event = @events[0]
57
+ log :debug, "Post event via #{@host}:#{@port} : #{event.inspect}"
58
+ Timeout::timeout(opts.riemann.timeout) {
59
+ @riemann << event
60
+ }
61
+ @events.shift
62
+ end
63
+ end
64
+
65
+ # riemann client connect
66
+ def client
67
+ sender = Riemann::Client.new(
68
+ :host => resolv(@host), #todo: add ttl
69
+ :port => @port,
70
+ :timeout => opts.riemann.timeout
71
+ )
72
+ sender = sender.tcp if opts.riemann.tcp
73
+ connect_client(sender)
74
+ end
75
+
76
+ #@return ipaddress of riemann server
77
+ def resolv(host)
78
+ begin
79
+ ip = Resolv.new.getaddress(host)
80
+ log :debug, "Resolv host: #{host} => #{ip}"
81
+ rescue
82
+ log :fatal, "Can't resolv hostname: #{host}"
83
+ exit Errors::RESOLV_RIEMANN_SERVER
84
+ end
85
+ ip
86
+ end
87
+
88
+ #@return connect to riemann
89
+ def connect_client(riemann)
90
+ connect = riemann
91
+ begin
92
+ connect = riemann.connect if opts.riemann.tcp
93
+ log :debug, "Connected to #{riemann.host}:#{riemann.port}"
94
+ rescue
95
+ log :fatal, "Can't connect to riemann server: #{riemann.host}:#{riemann.port}"
96
+ exit Errors::INIT_CONNECT
97
+ end
98
+ connect
99
+ end
100
+
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,5 +1,5 @@
1
1
  module Riemann
2
2
  module Babbler
3
- VERSION = '2.1.5'
3
+ VERSION = '2.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-babbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliev Dmitry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-26 00:00:00.000000000 Z
11
+ date: 2013-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: riemann-client
@@ -276,6 +276,7 @@ files:
276
276
  - lib/riemann/babbler/plugins/status_file.rb
277
277
  - lib/riemann/babbler/plugins/tw_cli.rb
278
278
  - lib/riemann/babbler/sender.rb
279
+ - lib/riemann/babbler/sender_client.rb
279
280
  - lib/riemann/babbler/version.rb
280
281
  - riemann-babbler.gemspec
281
282
  - test/default_spec.rb