rubix 0.1.5 → 0.2.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/VERSION +1 -1
- data/lib/rubix/monitors/chef_monitor.rb +2 -6
- data/lib/rubix/monitors/monitor.rb +49 -12
- data/spec/rubix/monitors/monitor_spec.rb +77 -14
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -21,16 +21,12 @@ module Rubix
|
|
21
21
|
# webserver = chef_node_from_node_name('webserver')
|
22
22
|
# begin
|
23
23
|
# if Net::HTTP.get_response(URI.parse("http://#{webserver['ec2']['public_hostname']}")).code.to_i == 200
|
24
|
-
# write
|
25
|
-
# data << ['webserver.available', 1]
|
26
|
-
# end
|
24
|
+
# write ['webserver.available', 1]
|
27
25
|
# return
|
28
26
|
# end
|
29
27
|
# rescue => e
|
30
28
|
# end
|
31
|
-
# write
|
32
|
-
# data << ([['webserver.available', 0]])
|
33
|
-
# end
|
29
|
+
# write ['webserver.available', 0]
|
34
30
|
# end
|
35
31
|
# end
|
36
32
|
#
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'configliere'
|
2
|
-
require 'json'
|
3
2
|
|
4
3
|
module Rubix
|
5
4
|
|
@@ -18,9 +17,20 @@ module Rubix
|
|
18
17
|
# class UptimeMonitor < Rubix::Monitor
|
19
18
|
#
|
20
19
|
# def measure
|
21
|
-
# return unless `uptime`.chomp =~ /(\d+) days/
|
20
|
+
# return unless `uptime`.chomp =~ /(\d+) days.*(\d+) users.*load average: ([\d\.]+), ([\d\.]+), ([\d\.]+)/
|
21
|
+
#
|
22
|
+
# # can write one value at a time
|
23
|
+
# write ['uptime', $1.to_i]
|
24
|
+
#
|
25
|
+
# # or can use a block
|
22
26
|
# write do |data|
|
23
|
-
#
|
27
|
+
# # values can be arrays
|
28
|
+
# data << ['users', $2.to_i]
|
29
|
+
# # or hashes
|
30
|
+
# data << { :key => 'load15', :value => $3.to_i }
|
31
|
+
# data << { :key => 'load5', :value => $4.to_i }
|
32
|
+
# # can even pass a different host
|
33
|
+
# data << { :key => 'load1', :value => $5.to_i, :host => 'foobar-host' }
|
24
34
|
# end
|
25
35
|
# end
|
26
36
|
# end
|
@@ -106,16 +116,14 @@ module Rubix
|
|
106
116
|
# Methods for writing data to Zabbix.
|
107
117
|
#
|
108
118
|
|
109
|
-
def write
|
119
|
+
def write measurement=nil &block
|
110
120
|
return unless output
|
111
|
-
|
121
|
+
return unless measurement || block_given?
|
122
|
+
|
123
|
+
data = [measurement]
|
112
124
|
block.call(data) if block_given?
|
113
|
-
|
114
|
-
|
115
|
-
key, value = measurement
|
116
|
-
{ :key => key, :value => value }
|
117
|
-
end
|
118
|
-
}.merge(options).to_json
|
125
|
+
|
126
|
+
text = data.compact.map { |measurement| format_measurement(measurement) }.compact.join("\n")
|
119
127
|
|
120
128
|
begin
|
121
129
|
output.puts(text)
|
@@ -124,8 +132,36 @@ module Rubix
|
|
124
132
|
end
|
125
133
|
end
|
126
134
|
|
135
|
+
def format_measurement measurement
|
136
|
+
# <hostname> key <timestamp> value
|
137
|
+
[].tap do |vals|
|
138
|
+
case measurement
|
139
|
+
when Hash
|
140
|
+
vals << (measurement[:host].nil? ? '-' : measurement[:host])
|
141
|
+
vals << measurement[:key]
|
142
|
+
vals << measurement[:timestamp] if measurement[:timestamp]
|
143
|
+
|
144
|
+
value = measurement[:value] || ''
|
145
|
+
if value.include?(' ')
|
146
|
+
value.insert(0, "'")
|
147
|
+
value.insert(-1, "'")
|
148
|
+
end
|
149
|
+
vals << value
|
150
|
+
when Array
|
151
|
+
if measurement.length == 2
|
152
|
+
vals << '-'
|
153
|
+
vals.concat(measurement)
|
154
|
+
else
|
155
|
+
vals.concat(measurement)
|
156
|
+
end
|
157
|
+
else
|
158
|
+
return
|
159
|
+
end
|
160
|
+
end.map(&:to_s).join(' ')
|
161
|
+
end
|
162
|
+
|
127
163
|
def output_path
|
128
|
-
settings.rest.first
|
164
|
+
settings.rest && settings.rest.first
|
129
165
|
end
|
130
166
|
|
131
167
|
def stdout?
|
@@ -149,6 +185,7 @@ module Rubix
|
|
149
185
|
begin
|
150
186
|
@output = open(output_path, (File::WRONLY | File::NONBLOCK))
|
151
187
|
rescue Errno::ENXIO
|
188
|
+
nil
|
152
189
|
# FIFO's reader isn't alive...
|
153
190
|
end
|
154
191
|
else
|
@@ -3,29 +3,93 @@ require 'tempfile'
|
|
3
3
|
|
4
4
|
describe Rubix::Monitor do
|
5
5
|
|
6
|
+
def monitor_wrapper(&block)
|
7
|
+
Class.new(Rubix::Monitor).tap do |wrapper|
|
8
|
+
wrapper.class_eval do
|
9
|
+
define_method(:measure, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
before do
|
7
|
-
@
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
@wrapper = monitor_wrapper do
|
16
|
+
write ['key', 'value']
|
17
|
+
end
|
18
|
+
::ARGV.replace([])
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "making measurements" do
|
22
|
+
|
23
|
+
it "should accept a two-element Array of [key, value]" do
|
24
|
+
$stdout.should_receive(:puts).with('- key value')
|
25
|
+
@wrapper.run
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should accept a three-element Array of [host, key, value]" do
|
29
|
+
@wrapper = monitor_wrapper do
|
30
|
+
write ['host', 'key', 'value']
|
31
|
+
end
|
32
|
+
$stdout.should_receive(:puts).with('host key value')
|
33
|
+
@wrapper.run
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should accept a four-element Array of [host, key, timestamp, value]" do
|
37
|
+
@wrapper = monitor_wrapper do
|
38
|
+
write ['host', 'key', 1328875053, 'value']
|
39
|
+
end
|
40
|
+
$stdout.should_receive(:puts).with('host key 1328875053 value')
|
41
|
+
@wrapper.run
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should accept a hash with just a key and a value" do
|
45
|
+
@wrapper = monitor_wrapper do
|
46
|
+
write({ :key => 'key', :value => 'value' })
|
47
|
+
end
|
48
|
+
$stdout.should_receive(:puts).with('- key value')
|
49
|
+
@wrapper.run
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should accept a hash with a host, key, and a value" do
|
53
|
+
@wrapper = monitor_wrapper do
|
54
|
+
write({ :host => 'host', :key => 'key', :value => 'value' })
|
55
|
+
end
|
56
|
+
$stdout.should_receive(:puts).with('host key value')
|
57
|
+
@wrapper.run
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should accept a hash with a host, key, timestamp, and a value" do
|
61
|
+
@wrapper = monitor_wrapper do
|
62
|
+
write({ :host => 'host', :key => 'key', :timestamp => 1328875053, :value => 'value' })
|
63
|
+
end
|
64
|
+
$stdout.should_receive(:puts).with('host key 1328875053 value')
|
65
|
+
@wrapper.run
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should accept multiple values from a block" do
|
69
|
+
@wrapper = monitor_wrapper do
|
12
70
|
write do |data|
|
13
|
-
data << ['
|
71
|
+
data << ['key', 'value']
|
72
|
+
data << { :key => 'key', :value => 'value' }
|
14
73
|
end
|
74
|
+
$stdout.should_receive(:puts).with("key value\nkey value")
|
75
|
+
@wrapper.run
|
15
76
|
end
|
77
|
+
|
16
78
|
end
|
17
79
|
end
|
18
|
-
|
80
|
+
|
19
81
|
describe 'writing to STDOUT' do
|
20
82
|
|
21
|
-
|
83
|
+
before do
|
22
84
|
::ARGV.replace([])
|
23
|
-
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should be the default behavior when run with no arguments" do
|
88
|
+
$stdout.should_receive(:puts).with('- key value')
|
24
89
|
@wrapper.run
|
25
90
|
end
|
26
91
|
|
27
92
|
it "should flush after each write" do
|
28
|
-
::ARGV.replace([])
|
29
93
|
$stdout.stub!(:puts)
|
30
94
|
$stdout.should_receive(:flush).twice()
|
31
95
|
@wrapper.run
|
@@ -37,7 +101,7 @@ describe Rubix::Monitor do
|
|
37
101
|
|
38
102
|
before do
|
39
103
|
@file = Tempfile.new('monitor', '/tmp')
|
40
|
-
::ARGV.replace([@file.path])
|
104
|
+
::ARGV.replace([@file.path])
|
41
105
|
end
|
42
106
|
|
43
107
|
after do
|
@@ -47,13 +111,13 @@ describe Rubix::Monitor do
|
|
47
111
|
it "should create a new file if called with a path that doesn't exist" do
|
48
112
|
FileUtils.rm(@file.path) if File.exist?(@file.path)
|
49
113
|
@wrapper.run
|
50
|
-
File.read(@file.path).should match(
|
114
|
+
File.read(@file.path).should match('- key value')
|
51
115
|
end
|
52
116
|
|
53
117
|
it "should append to an existing file" do
|
54
118
|
File.open(@file.path, 'w') { |f| f.puts('old content') }
|
55
119
|
@wrapper.run
|
56
|
-
File.read(@file.path).should
|
120
|
+
File.read(@file.path).should include('- key value')
|
57
121
|
File.read(@file.path).should include('old content')
|
58
122
|
end
|
59
123
|
end
|
@@ -78,4 +142,3 @@ describe Rubix::Monitor do
|
|
78
142
|
end
|
79
143
|
|
80
144
|
end
|
81
|
-
|