astro-collectd 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/collectd.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'collectd/proc_stats'
1
2
  require 'collectd/interface'
2
3
  require 'collectd/server'
3
4
  begin
@@ -9,6 +9,7 @@ module Collectd
9
9
  @sock.connect(host, port)
10
10
 
11
11
  EM.add_periodic_timer(interval) do
12
+ Collectd.run_pollables_for self
12
13
  Thread.critical = true
13
14
  pkt = make_pkt
14
15
  Thread.critical = false
@@ -22,6 +22,17 @@ module Collectd
22
22
  @@servers.each(&block)
23
23
  end
24
24
 
25
+ def add_pollable(&block)
26
+ @@pollables ||= []
27
+ @@pollables << block
28
+ end
29
+ def run_pollables_for(server)
30
+ @@pollables ||= []
31
+ @@pollables.each do |block|
32
+ block.call(server)
33
+ end
34
+ end
35
+
25
36
  def method_missing(plugin, plugin_instance)
26
37
  Plugin.new(plugin, plugin_instance)
27
38
  end
@@ -31,6 +42,7 @@ module Collectd
31
42
  ##
32
43
  # Interface helper
33
44
  class Plugin
45
+ include ProcStats
34
46
  def initialize(plugin, plugin_instance)
35
47
  @plugin, @plugin_instance = plugin, plugin_instance
36
48
  end
@@ -46,12 +58,16 @@ module Collectd
46
58
  @plugin, @plugin_instance = plugin, plugin_instance
47
59
  @type, @type_instance = type, type_instance
48
60
  end
61
+ ##
62
+ # GAUGE
49
63
  def gauge=(values)
50
64
  values = [values] unless values.kind_of? Array
51
65
  Collectd.each_server do |server|
52
66
  server.set_gauge(plugin_type, values)
53
67
  end
54
68
  end
69
+ ##
70
+ # COUNTER
55
71
  def counter=(values)
56
72
  values = [values] unless values.kind_of? Array
57
73
  Collectd.each_server do |server|
@@ -63,6 +79,30 @@ module Collectd
63
79
  server.inc_counter(plugin_type, values)
64
80
  end
65
81
  end
82
+ def polled_gauge(&block)
83
+ Collectd.add_pollable do |server|
84
+ values = block.call
85
+ values = [values] unless values.kind_of? Array
86
+ server.set_gauge(plugin_type, values) if values
87
+ end
88
+ end
89
+ def polled_count(&block)
90
+ Collectd.add_pollable do |server|
91
+ values = block.call
92
+ values = [values] unless values.kind_of? Array
93
+ server.inc_counter(plugin_type, values) if values
94
+ end
95
+ end
96
+ def polled_counter(&block)
97
+ Collectd.add_pollable do |server|
98
+ values = block.call
99
+ values = [values] unless values.kind_of? Array
100
+ server.set_counter(plugin_type, values) if values
101
+ end
102
+ end
103
+ private
104
+ ##
105
+ # [plugin, plugin_instance, type, type_instance]
66
106
  def plugin_type
67
107
  [@plugin, @plugin_instance, @type, @type_instance]
68
108
  end
@@ -0,0 +1,49 @@
1
+ module Collectd
2
+ ##
3
+ # Included by Interface
4
+ module ProcStats
5
+ def with_polled_memory
6
+ def process_status(field)
7
+ fields = {}
8
+ IO.readlines("/proc/#{$$}/status").each { |line|
9
+ line.strip!
10
+ if line =~ /^(.+?):\s+(.+)$/
11
+ fields[$1] = $2
12
+ end
13
+ }
14
+ fields[field]
15
+ end
16
+
17
+ memory('VmRSS').polled_gauge do
18
+ process_status('VmRSS').to_i * 1024
19
+ end
20
+ memory('VmSize').polled_gauge do
21
+ process_status('VmSize').to_i * 1024
22
+ end
23
+
24
+ self
25
+ end
26
+
27
+ def with_polled_cpu
28
+ def schedstats
29
+ if IO.readlines("/proc/#{$$}/schedstat").to_s =~ /^(\d+) (\d+) (\d+)/
30
+ [$1.to_i, $2.to_i, $3.to_i]
31
+ else
32
+ []
33
+ end
34
+ end
35
+
36
+ cpu('user').polled_counter do
37
+ schedstats[0]
38
+ end
39
+ cpu('wait').polled_counter do
40
+ schedstats[1]
41
+ end
42
+ end
43
+
44
+ def with_full_proc_stats
45
+ with_polled_memory
46
+ with_polled_cpu
47
+ end
48
+ end
49
+ end
@@ -13,6 +13,7 @@ module Collectd
13
13
  loop do
14
14
  sleep interval
15
15
 
16
+ Collectd.run_pollables_for self
16
17
  Thread.critical = true
17
18
  pkt = make_pkt
18
19
  Thread.critical = false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: astro-collectd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Maka
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-25 00:00:00 -07:00
12
+ date: 2009-05-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -23,6 +23,7 @@ extra_rdoc_files: []
23
23
 
24
24
  files:
25
25
  - lib/collectd/interface.rb
26
+ - lib/collectd/proc_stats.rb
26
27
  - lib/collectd/pkt.rb
27
28
  - lib/collectd/server.rb
28
29
  - lib/collectd/em_server.rb