astro-collectd 0.0.4 → 0.0.5

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/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