astro-collectd 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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
-