riemann-babbler 0.4.9 → 0.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.
data/config.yml CHANGED
@@ -7,6 +7,8 @@ logger:
7
7
 
8
8
  plugins:
9
9
 
10
+ interval: 60
11
+
10
12
  dummy:
11
13
  service: keep alive
12
14
  interval: 1
@@ -35,8 +37,6 @@ plugins:
35
37
  memory:
36
38
  service: memory
37
39
  interval: 1
38
- report_free: true
39
- report_total: true
40
40
  states:
41
41
  warning: 0.6
42
42
  critical: 0.8
@@ -1,5 +1,7 @@
1
1
  #encoding: utf-8
2
2
 
3
+ require File.expand_path('../plugin_helpers', __FILE__)
4
+
3
5
  # Базовое описание плагина
4
6
  module Riemann
5
7
  class Babbler
@@ -126,42 +128,5 @@ module Riemann
126
128
  end
127
129
  end
128
130
 
129
- # хэлпер для парса stdout+stderr и exit status
130
- def shell(*cmd)
131
- exit_status=nil
132
- err=nil
133
- out=nil
134
- Timeout::timeout(5) {
135
- Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
136
- err = stderr.gets(nil)
137
- out = stdout.gets(nil)
138
- [stdin, stdout, stderr].each{|stream| stream.send('close')}
139
- exit_status = wait_thread.value
140
- end
141
- }
142
- if exit_status.to_i > 0
143
- err = err.chomp if err
144
- raise err
145
- elsif out
146
- return out.chomp
147
- else
148
- # статус 0, вывода stdout нет
149
- return ""
150
- end
151
- end
152
-
153
- # http rest
154
- def rest_get(url)
155
- begin
156
- RestClient.get url
157
- rescue
158
- report({
159
- :service => plugin.service,
160
- :state => 'critical',
161
- :description => "Response from #{url}"
162
- })
163
- end
164
- end
165
-
166
131
  end
167
132
  end
@@ -0,0 +1,52 @@
1
+ #encoding: utf-8
2
+
3
+ module Riemann
4
+ class Babbler
5
+
6
+ def helper_error(msg = "Unknown helper error")
7
+ report({
8
+ :service => plugin.service,
9
+ :state => 'critical',
10
+ :description => msg
11
+ })
12
+ end
13
+
14
+ # хэлпер для парса stdout+stderr и exit status
15
+ def shell(*cmd)
16
+ exit_status=nil
17
+ err=nil
18
+ out=nil
19
+ begin
20
+ Timeout::timeout(5) {
21
+ Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
22
+ err = stderr.gets(nil)
23
+ out = stdout.gets(nil)
24
+ [stdin, stdout, stderr].each{|stream| stream.send('close')}
25
+ exit_status = wait_thread.value
26
+ end
27
+ }
28
+ rescue => e
29
+ helper_error "#{e.class} #{e}\n#{e.backtrace.join "\n"}"
30
+ end
31
+ if exit_status.to_i > 0
32
+ err = err.chomp if err
33
+ helper_error(err)
34
+ elsif out
35
+ return out.chomp
36
+ else
37
+ # статус 0, вывода stdout нет
38
+ return ""
39
+ end
40
+ end
41
+
42
+ # http rest
43
+ def rest_get(url)
44
+ begin
45
+ RestClient.get url
46
+ rescue
47
+ helper_error("Get from url: #{url}")
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -1,27 +1,38 @@
1
1
  class Riemann::Babbler::Cpu < Riemann::Babbler
2
2
 
3
+ def desc
4
+ "usage\n\n#{shell('ps -eo pcpu,pid,cmd | sort -nrb -k1 | head -10').chomp}"
5
+ end
6
+
7
+ def init
8
+ @old_cpu = Hash.new
9
+ end
10
+
3
11
  def collect
4
- cpu = File.read('/proc/stat')
5
- cpu[/cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/]
6
- u2, n2, s2, i2 = [$1, $2, $3, $4].map { |e| e.to_i }
7
-
8
- if @old_cpu
9
- u1, n1, s1, i1 = @old_cpu
10
- used = (u2+n2+s2) - (u1+n1+s1)
11
- total = used + i2-i1
12
- fraction = used.to_f / total
13
- end
12
+ array = Array.new
13
+ description = desc
14
+ File.read('/proc/stat').split("\n").each do |cpu_line|
14
15
 
15
- @old_cpu = [u2, n2, s2, i2]
16
+ # проверяем есть строчка /cpu\d+/ или /cpu / и сграбливаем это в переменную
17
+ cpu_number = cpu_line.scan(/cpu(\d+|\s)\s+/)
18
+ next if cpu_number.empty?
19
+ cpu_number = cpu_number[0][0] == " " ? "_total" : cpu_number[0][0]
16
20
 
17
- desc = "usage\n\n#{shell('ps -eo pcpu,pid,cmd | sort -nrb -k1 | head -10').chomp}"
18
-
19
- if fraction
20
- { :service => plugin.service, :metric => fraction, :description => desc }
21
- else
22
- { :service => plugin.service, :state => 'ok' }
23
- end
21
+ # работаем со строкой
22
+ cpu_line[/cpu(\d+|\s)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/]
23
+ _, u2, n2, s2, i2 = [$1, $2, $3, $4, $5].map { |e| e.to_i }
24
24
 
25
+ unless @old_cpu[cpu_number].nil?
26
+ u1, n1, s1, i1 = @old_cpu[cpu_number]
27
+ used = (u2+n2+s2) - (u1+n1+s1)
28
+ total = used + i2-i1
29
+ fraction = used.to_f / total
30
+ end
31
+
32
+ @old_cpu[cpu_number] = [u2, n2, s2, i2]
33
+ array << { :service => plugin.service + " cpu#{cpu_number}", :metric => fraction, :description => description } if fraction
34
+ end
35
+ array
25
36
  end
26
37
 
27
38
  end
@@ -13,9 +13,10 @@ class Riemann::Babbler::Memory < Riemann::Babbler
13
13
  desc = "usage\n\n#{shell('ps -eo pmem,pid,cmd | sort -nrb -k1 | head -10').chomp}"
14
14
 
15
15
  [
16
- { :service => plugin.service, :metric => fraction },
17
- { :service => plugin.service + " free", :metric => free.to_f, :state => 'ok', :description => desc },
18
- { :service => plugin.service + " total", :metric => total.to_f, :state => 'ok', :description => desc }
16
+ { :service => plugin.service + " free_%+Buffers+Cached", :metric => fraction },
17
+ { :service => plugin.service + " swap_%", :metric => (m['SwapTotal'] - m['SwapFree']).to_f/m['SwapTotal'] },
18
+ { :service => plugin.service + " free", :metric => free.to_i, :state => 'ok', :description => desc },
19
+ { :service => plugin.service + " total", :metric => total.to_i, :state => 'ok', :description => desc }
19
20
  ]
20
21
  end
21
22
 
@@ -1,5 +1,5 @@
1
1
  module Riemann
2
2
  class Babbler
3
- VERSION = '0.4.9'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-babbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-10 00:00:00.000000000 Z
12
+ date: 2013-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: riemann-client
@@ -124,6 +124,7 @@ files:
124
124
  - config.yml
125
125
  - lib/deep_merge.rb
126
126
  - lib/riemann/babbler/plugin.rb
127
+ - lib/riemann/babbler/plugin_helpers.rb
127
128
  - lib/riemann/babbler/plugins/cpu.rb
128
129
  - lib/riemann/babbler/plugins/disk.rb
129
130
  - lib/riemann/babbler/plugins/dummy.rb
@@ -147,7 +148,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
148
  version: '0'
148
149
  segments:
149
150
  - 0
150
- hash: -2705264439441515163
151
+ hash: -2856052346844510337
151
152
  required_rubygems_version: !ruby/object:Gem::Requirement
152
153
  none: false
153
154
  requirements: