astro-collectd 0.0.5 → 0.0.6

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.
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.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Maka
@@ -21,13 +21,8 @@ extensions: []
21
21
 
22
22
  extra_rdoc_files: []
23
23
 
24
- files:
25
- - lib/collectd/interface.rb
26
- - lib/collectd/proc_stats.rb
27
- - lib/collectd/pkt.rb
28
- - lib/collectd/server.rb
29
- - lib/collectd/em_server.rb
30
- - lib/collectd.rb
24
+ files: []
25
+
31
26
  has_rdoc: false
32
27
  homepage: http://github.com/astro/ruby-collectd
33
28
  post_install_message:
@@ -1,21 +0,0 @@
1
- require 'eventmachine'
2
-
3
- module Collectd
4
- class EmServer < Values
5
-
6
- def initialize(interval, host, port)
7
- super(interval)
8
- @sock = UDPSocket.new(host.index(':') ? Socket::AF_INET6 : Socket::AF_INET)
9
- @sock.connect(host, port)
10
-
11
- EM.add_periodic_timer(interval) do
12
- Collectd.run_pollables_for self
13
- Thread.critical = true
14
- pkt = make_pkt
15
- Thread.critical = false
16
- @sock.send(pkt, 0)
17
- end
18
- end
19
-
20
- end
21
- end
@@ -1,187 +0,0 @@
1
- require 'collectd/pkt'
2
-
3
-
4
- module Collectd
5
- class << self
6
-
7
- def hostname
8
- @@hostname ||= `hostname -f`.strip
9
- @@hostname
10
- end
11
- def hostname=(h)
12
- @@hostname = h
13
- end
14
-
15
- @@servers = []
16
-
17
- def add_server(interval, addr='ff18::efc0:4a42', port=25826)
18
- @@servers << Server.new(interval, addr, port)
19
- end
20
-
21
- def each_server(&block)
22
- @@servers.each(&block)
23
- end
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
-
36
- def method_missing(plugin, plugin_instance)
37
- Plugin.new(plugin, plugin_instance)
38
- end
39
-
40
- end
41
-
42
- ##
43
- # Interface helper
44
- class Plugin
45
- include ProcStats
46
- def initialize(plugin, plugin_instance)
47
- @plugin, @plugin_instance = plugin, plugin_instance
48
- end
49
- def method_missing(type, type_instance)
50
- Type.new(@plugin, @plugin_instance, type, type_instance)
51
- end
52
- end
53
-
54
- ##
55
- # Interface helper
56
- class Type
57
- def initialize(plugin, plugin_instance, type, type_instance)
58
- @plugin, @plugin_instance = plugin, plugin_instance
59
- @type, @type_instance = type, type_instance
60
- end
61
- ##
62
- # GAUGE
63
- def gauge=(values)
64
- values = [values] unless values.kind_of? Array
65
- Collectd.each_server do |server|
66
- server.set_gauge(plugin_type, values)
67
- end
68
- end
69
- ##
70
- # COUNTER
71
- def counter=(values)
72
- values = [values] unless values.kind_of? Array
73
- Collectd.each_server do |server|
74
- server.set_counter(plugin_type, values)
75
- end
76
- end
77
- def count!(*values)
78
- Collectd.each_server do |server|
79
- server.inc_counter(plugin_type, values)
80
- end
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]
106
- def plugin_type
107
- [@plugin, @plugin_instance, @type, @type_instance]
108
- end
109
- end
110
-
111
- ##
112
- # Value-holder, baseclass for servers
113
- class Values
114
- attr_reader :interval
115
- def initialize(interval)
116
- @interval = interval
117
- @counters = {}
118
- @gauges = {}
119
- end
120
- def set_counter(plugin_type, values)
121
- @counters[plugin_type] = values
122
- end
123
- def inc_counter(plugin_type, values)
124
- old_values = @counters[plugin_type] || []
125
- values.map! { |value|
126
- value + (old_values.shift || 0)
127
- }
128
- @counters[plugin_type] = values
129
- end
130
- def set_gauge(plugin_type, values)
131
- # Use count & sums for average
132
- if @gauges.has_key?(plugin_type)
133
- old_values = @gauges[plugin_type]
134
- count = old_values.shift
135
- values.map! { |value| value + (old_values.shift || value) }
136
- @gauges[plugin_type] = [count + 1] + values
137
- else
138
- @gauges[plugin_type] = [1] + values
139
- end
140
- end
141
-
142
- def make_pkt
143
- plugin_type_values = {}
144
- @counters.each do |plugin_types,values|
145
- plugin, plugin_instance, type, type_instance = plugin_types
146
- plugin_type_values[plugin] ||= {}
147
- plugin_type_values[plugin][plugin_instance] ||= {}
148
- plugin_type_values[plugin][plugin_instance][type] ||= {}
149
- plugin_type_values[plugin][plugin_instance][type][type_instance] =
150
- Packet::Values.new(values.map { |value| Packet::Values::Counter.new(value) })
151
- end
152
- @gauges.each do |plugin_types,values|
153
- plugin, plugin_instance, type, type_instance = plugin_types
154
- plugin_type_values[plugin] ||= {}
155
- plugin_type_values[plugin][plugin_instance] ||= {}
156
- plugin_type_values[plugin][plugin_instance][type] ||= {}
157
- count = values.shift
158
- values.map! { |value| value.to_f / count }
159
- plugin_type_values[plugin][plugin_instance][type][type_instance] =
160
- Packet::Values.new(values.map { |value| Packet::Values::Gauge.new(value) })
161
- end
162
- pkt = [Packet::Host.new(Collectd.hostname),
163
- Packet::Time.new(Time.now.to_i),
164
- Packet::Interval.new(10)]
165
- plugin_type_values.each do |plugin,plugin_instances|
166
- pkt << Packet::Plugin.new(plugin)
167
- plugin_instances.each do |plugin_instance,types|
168
- pkt << Packet::PluginInstance.new(plugin_instance)
169
- types.each do |type,type_instances|
170
- pkt << Packet::Type.new(type)
171
- type_instances.each do |type_instance,values|
172
- pkt << Packet::TypeInstance.new(type_instance)
173
- pkt << values
174
- end
175
- end
176
- end
177
- end
178
-
179
- # Reset only gauges. Counters are persistent for incrementing.
180
- @gauges = {}
181
-
182
- # And return serialized packet of parts
183
- pkt.to_s
184
- end
185
- end
186
-
187
- end
data/lib/collectd/pkt.rb DELETED
@@ -1,107 +0,0 @@
1
- module Collectd
2
- module Packet
3
-
4
- class Part
5
- def to_s(content)
6
- [type, content.length + 4].pack("nn") + content
7
- end
8
-
9
- ##
10
- # Makes subclasses more declarative
11
- def self.type(number)
12
- define_method(:type) { number }
13
- end
14
- end
15
-
16
- class String < Part
17
- def initialize(s)
18
- @s = s
19
- end
20
- def to_s
21
- super "#{@s}\000"
22
- end
23
- end
24
-
25
- class Number < Part
26
- def initialize(n)
27
- @n = n
28
- end
29
- def to_s
30
- super [@n >> 32, @n & 0xffffffff].pack("NN")
31
- end
32
- end
33
-
34
- class Host < String
35
- type 0
36
- end
37
-
38
- class Time < Number
39
- type 1
40
- end
41
-
42
- class Plugin < String
43
- type 2
44
- end
45
-
46
- class PluginInstance < String
47
- type 3
48
- end
49
-
50
- class Type < String
51
- type 4
52
- end
53
-
54
- class TypeInstance < String
55
- type 5
56
- end
57
-
58
- class Values < Part
59
- type 6
60
- def initialize(v)
61
- @v = v
62
- end
63
- def to_s
64
- types, values = [], []
65
- @v.each { |v1|
66
- types << [v1.type].pack("C")
67
- values << v1.to_s
68
- }
69
- super [@v.length].pack("n") + types.join + values.join
70
- end
71
-
72
- class Counter < Part
73
- type 0
74
- def initialize(c)
75
- @c = c
76
- end
77
- def to_s
78
- [@c >> 32, @c & 0xffffffff].pack("NN")
79
- end
80
- end
81
-
82
- class Gauge < Part
83
- type 1
84
- def initialize(f)
85
- @f = f
86
- end
87
- def to_s
88
- [@f].pack("d")
89
- end
90
- end
91
- end
92
-
93
- class Interval < Number
94
- type 7
95
- end
96
-
97
-
98
- class Message < String
99
- type 0x100
100
- end
101
-
102
- class Severity < Number
103
- type 0x101
104
- end
105
-
106
- end
107
- end
@@ -1,49 +0,0 @@
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
@@ -1,26 +0,0 @@
1
- require 'socket'
2
- require 'thread'
3
-
4
- module Collectd
5
- class Server < Values
6
-
7
- def initialize(interval, host, port)
8
- super(interval)
9
- @sock = UDPSocket.new(Socket::AF_INET6)
10
- @sock.connect(host, port)
11
-
12
- Thread.new do
13
- loop do
14
- sleep interval
15
-
16
- Collectd.run_pollables_for self
17
- Thread.critical = true
18
- pkt = make_pkt
19
- Thread.critical = false
20
- @sock.send(pkt, 0)
21
- end
22
- end.abort_on_exception = true
23
- end
24
-
25
- end
26
- end
data/lib/collectd.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'collectd/proc_stats'
2
- require 'collectd/interface'
3
- require 'collectd/server'
4
- begin
5
- require 'collectd/em_server'
6
- rescue LoadError
7
- # EM is optional
8
- end
9
-
10
-