nagira 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +11 -1
- data/lib/app.rb +50 -33
- data/lib/app/routes/get/config.rb +2 -0
- data/lib/app/routes/get/objects.rb +5 -8
- data/lib/app/routes/get/status.rb +36 -27
- data/lib/nagira.rb +6 -0
- data/version.txt +1 -1
- metadata +2 -2
data/History.md
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
+
### v.0.2.7
|
2
|
+
|
3
|
+
* Mon Apr 15 2013 -- Dmytro Kovalov
|
4
|
+
- Extend ActiveResource support
|
5
|
+
- add prefix /ar
|
6
|
+
- AR_PREFIX constant for the same
|
7
|
+
- covert all output ot Array if it's ActiveResource
|
8
|
+
- ActiveResource supportewd now in /_objects, /_status
|
9
|
+
|
1
10
|
### v.0.2.6
|
2
|
-
* Tue Mar 26 2013 -- Ivan Gusev
|
3
11
|
|
12
|
+
* Tue Mar 26 2013 -- Ivan Gusev
|
4
13
|
- Fix for long time parsing https://github.com/dmytro/nagira/issues/20
|
14
|
+
|
5
15
|
### v.0.2.5
|
6
16
|
|
7
17
|
* Fri Mar 15 2013 -- Dmytro Kovalov
|
data/lib/app.rb
CHANGED
@@ -19,16 +19,16 @@
|
|
19
19
|
# @!macro [new] service_name
|
20
20
|
# @param [String] :service_name Configured Nagios service for the host
|
21
21
|
#
|
22
|
-
# @!macro [new] accepted
|
22
|
+
# @!macro [new] accepted
|
23
23
|
#
|
24
24
|
# <b>Accepted output type modifiers:</b>
|
25
25
|
#
|
26
|
-
# @!macro [new] list
|
26
|
+
# @!macro [new] list
|
27
27
|
#
|
28
28
|
# - +/_list+ : Short list of available objects, depending on the
|
29
29
|
# current request context: hosts, services, etc.
|
30
30
|
#
|
31
|
-
# @!macro [new] state
|
31
|
+
# @!macro [new] state
|
32
32
|
#
|
33
33
|
# - +/_state+ - Instead of full status information send only
|
34
34
|
# current state. For hosts up/down, for services OK, Warn,
|
@@ -36,10 +36,10 @@
|
|
36
36
|
#
|
37
37
|
# @!macro [new] full
|
38
38
|
#
|
39
|
-
# - +/_full+ - Show full status information. When used in
|
40
|
-
# /_status/_full call will display full hoststaus and
|
39
|
+
# - +/_full+ - Show full status information. When used in
|
40
|
+
# /_status/_full call will display full hoststaus and
|
41
41
|
# servicestatus information for each host.
|
42
|
-
#
|
42
|
+
#
|
43
43
|
#
|
44
44
|
|
45
45
|
|
@@ -59,29 +59,29 @@ class Nagira < Sinatra::Base
|
|
59
59
|
#
|
60
60
|
# @method startup_configuration
|
61
61
|
# @overload before("Initial Config")
|
62
|
-
configure do
|
63
|
-
|
62
|
+
configure do
|
63
|
+
|
64
64
|
$nagios = { }
|
65
65
|
$nagios[:config] = Nagios::Config.new Nagira.settings.nagios_cfg
|
66
66
|
$nagios[:config].parse
|
67
67
|
|
68
|
-
$nagios.merge!({
|
69
|
-
status: Nagios::Status.new( Nagira.settings.status_cfg ||
|
68
|
+
$nagios.merge!({
|
69
|
+
status: Nagios::Status.new( Nagira.settings.status_cfg ||
|
70
70
|
$nagios[:config].status_file
|
71
71
|
),
|
72
|
-
objects: Nagios::Objects.new( Nagira.settings.objects_cfg ||
|
72
|
+
objects: Nagios::Objects.new( Nagira.settings.objects_cfg ||
|
73
73
|
$nagios[:config].object_cache_file
|
74
74
|
),
|
75
|
-
commands: Nagios::ExternalCommands.new( Nagira.settings.command_file ||
|
75
|
+
commands: Nagios::ExternalCommands.new( Nagira.settings.command_file ||
|
76
76
|
$nagios[:config].command_file
|
77
77
|
)
|
78
78
|
})
|
79
79
|
|
80
|
-
$nagios.merge!({
|
80
|
+
$nagios.merge!({
|
81
81
|
status_inflight: Nagios::Status.new( Nagira.settings.status_cfg ||
|
82
82
|
$nagios[:config].status_file
|
83
83
|
),
|
84
|
-
objects_inflight: Nagios::Objects.new( Nagira.settings.objects_cfg ||
|
84
|
+
objects_inflight: Nagios::Objects.new( Nagira.settings.objects_cfg ||
|
85
85
|
$nagios[:config].object_cache_file
|
86
86
|
)
|
87
87
|
}) if ::DEFAULT[:start_background_parser]
|
@@ -123,7 +123,7 @@ class Nagira < Sinatra::Base
|
|
123
123
|
# @method parse_nagios_files
|
124
124
|
# @overload before("Parse Nagios files")
|
125
125
|
|
126
|
-
before do
|
126
|
+
before do
|
127
127
|
|
128
128
|
if Nagira.settings.start_background_parser
|
129
129
|
unless $bg.alive?
|
@@ -132,9 +132,9 @@ class Nagira < Sinatra::Base
|
|
132
132
|
$nagios[:status].parse
|
133
133
|
$nagios[:objects].parse
|
134
134
|
end
|
135
|
-
$use_inflight_status ? @status = $nagios[:status_inflight].status['hosts']
|
135
|
+
$use_inflight_status ? @status = $nagios[:status_inflight].status['hosts']
|
136
136
|
: @status = $nagios[:status].status['hosts']
|
137
|
-
$use_inflight_objects ? @objects = $nagios[:objects_inflight].objects
|
137
|
+
$use_inflight_objects ? @objects = $nagios[:objects_inflight].objects
|
138
138
|
: @objects = $nagios[:objects].objects
|
139
139
|
else
|
140
140
|
$nagios[:config].parse
|
@@ -147,7 +147,7 @@ class Nagira < Sinatra::Base
|
|
147
147
|
|
148
148
|
##
|
149
149
|
# TODO: This stuff breaks XML valid. Will have to wait.
|
150
|
-
#
|
150
|
+
#
|
151
151
|
# idx = 0
|
152
152
|
# @status.keys.uniq.each do |hostname|
|
153
153
|
# @status[idx] = @status[hostname]
|
@@ -168,13 +168,13 @@ class Nagira < Sinatra::Base
|
|
168
168
|
#
|
169
169
|
# Clear values onf instance variables before start.
|
170
170
|
#
|
171
|
-
before do
|
171
|
+
before do
|
172
172
|
@data = []
|
173
173
|
@format = @output = nil
|
174
174
|
end
|
175
175
|
|
176
176
|
##
|
177
|
-
# @method strip_extensions
|
177
|
+
# @method strip_extensions
|
178
178
|
# @overload before("detect format")
|
179
179
|
#
|
180
180
|
# Detect and strip output format extension
|
@@ -187,19 +187,25 @@ class Nagira < Sinatra::Base
|
|
187
187
|
# \@format can be assigned one of the symbols: :xml, :json, :yaml.
|
188
188
|
#
|
189
189
|
# = Examples
|
190
|
-
#
|
190
|
+
#
|
191
191
|
# GET /_objects # => default format
|
192
192
|
# GET /_objects.json # => :json
|
193
193
|
# GET /_status/_list.yaml # => :yaml
|
194
|
-
#
|
195
|
-
before do
|
194
|
+
#
|
195
|
+
before do
|
196
196
|
request.path_info.sub!(/#{settings.format_extensions}/, '')
|
197
197
|
@format = ($1 || settings.format).to_sym
|
198
198
|
content_type "application/#{@format.to_s}"
|
199
199
|
end
|
200
200
|
|
201
|
+
before do
|
202
|
+
request.path_info.sub!(/^(#{Nagira::AR_PREFIX})\//, '/')
|
203
|
+
@active_resource = $1 ? true : false
|
204
|
+
end
|
205
|
+
|
206
|
+
|
201
207
|
##
|
202
|
-
# @method strip_output_type
|
208
|
+
# @method strip_output_type
|
203
209
|
# @overload before('detect output mode')
|
204
210
|
#
|
205
211
|
# Detect output mode modifier
|
@@ -228,14 +234,14 @@ class Nagira < Sinatra::Base
|
|
228
234
|
##
|
229
235
|
# @method find_jsonp_callback
|
230
236
|
# @overload before('find callback name')
|
231
|
-
#
|
237
|
+
#
|
232
238
|
# Detects if request is using jQuery JSON-P and sets @callback
|
233
239
|
# variable. @callback variable is used if after method and prepends
|
234
240
|
# JSON data with callback function name.
|
235
241
|
#
|
236
242
|
# = Example
|
237
243
|
#
|
238
|
-
#
|
244
|
+
# GET /_api?callback=jQuery12313123123 # @callback == jQuery12313123123
|
239
245
|
#
|
240
246
|
# JSONP support is based on the code from +sinatra/jsonp+ Gem
|
241
247
|
# https://github.com/shtirlic/sinatra-jsonp.
|
@@ -261,13 +267,23 @@ class Nagira < Sinatra::Base
|
|
261
267
|
# return unless request["REQUEST_METHOD"] == 'PUT'
|
262
268
|
if ! @data || @data.empty?
|
263
269
|
halt [404, {
|
264
|
-
:message => "Object not found or bad request",
|
270
|
+
:message => "Object not found or bad request",
|
265
271
|
:error => "HTTP::Notfound"
|
266
272
|
}.send("to_#{@format}")
|
267
273
|
]
|
268
274
|
end
|
269
275
|
end
|
270
276
|
|
277
|
+
|
278
|
+
##
|
279
|
+
# @method convert_to_active_resource
|
280
|
+
# @overload after("Return Array for ActiveResouce routes")
|
281
|
+
#
|
282
|
+
#
|
283
|
+
after do
|
284
|
+
@data = @data.values if @active_resource && @data.is_a?(Hash)
|
285
|
+
end
|
286
|
+
|
271
287
|
##
|
272
288
|
# @method return_jsonp_data
|
273
289
|
# @overload after("Return formatted data")
|
@@ -289,13 +305,14 @@ class Nagira < Sinatra::Base
|
|
289
305
|
|
290
306
|
|
291
307
|
|
308
|
+
|
292
309
|
##
|
293
310
|
# @method get_api
|
294
311
|
# @overload get(/_api)
|
295
312
|
#
|
296
|
-
# Provide information about API routes
|
313
|
+
# Provide information about API routes
|
297
314
|
#
|
298
|
-
get "/_api" do
|
315
|
+
get "/_api" do
|
299
316
|
@data = self.api
|
300
317
|
nil
|
301
318
|
end
|
@@ -305,12 +322,12 @@ class Nagira < Sinatra::Base
|
|
305
322
|
# @method get_runtime_config
|
306
323
|
# @overload get(/_runtime)
|
307
324
|
#
|
308
|
-
# Print out nagira runtime configuration
|
309
|
-
get "/_runtime" do
|
325
|
+
# Print out nagira runtime configuration
|
326
|
+
get "/_runtime" do
|
310
327
|
@data = {
|
311
328
|
application: self.class,
|
312
329
|
version: VERSION,
|
313
|
-
runtime: {
|
330
|
+
runtime: {
|
314
331
|
environment: Nagira.settings.environment,
|
315
332
|
home: ENV['HOME'],
|
316
333
|
user: ENV['LOGNAME'],
|
@@ -323,7 +340,7 @@ class Nagira < Sinatra::Base
|
|
323
340
|
# @method get_slash
|
324
341
|
# @overload get(/)
|
325
342
|
#
|
326
|
-
# Returns application information: name, version, github repository.
|
343
|
+
# Returns application information: name, version, github repository.
|
327
344
|
get "/" do
|
328
345
|
@data = {
|
329
346
|
:application => self.class,
|
@@ -14,10 +14,10 @@ class Nagira < Sinatra::Base
|
|
14
14
|
# @macro list
|
15
15
|
#
|
16
16
|
get "/_objects" do
|
17
|
-
|
17
|
+
|
18
18
|
@data = begin
|
19
19
|
@output == :list ? @objects.keys : @objects
|
20
|
-
rescue NoMethodError
|
20
|
+
rescue NoMethodError
|
21
21
|
nil
|
22
22
|
end
|
23
23
|
nil
|
@@ -31,16 +31,13 @@ class Nagira < Sinatra::Base
|
|
31
31
|
#
|
32
32
|
# @!macro accepted
|
33
33
|
# @!macro list
|
34
|
-
#
|
34
|
+
#
|
35
35
|
#
|
36
36
|
get "/_objects/:type" do |type|
|
37
37
|
begin
|
38
|
-
|
39
|
-
@data = @objects[type.to_sym]
|
40
|
-
else
|
41
|
-
@data = Array[@objects[type.to_sym]]
|
42
|
-
end
|
38
|
+
@data = @objects[type.to_sym]
|
43
39
|
@data = @data.keys if @output == :list
|
40
|
+
|
44
41
|
rescue NoMethodError
|
45
42
|
nil
|
46
43
|
end
|
@@ -94,36 +94,17 @@ class Nagira < Sinatra::Base
|
|
94
94
|
|
95
95
|
nil
|
96
96
|
end
|
97
|
-
|
98
|
-
# Hoststatus for single host
|
99
|
-
#
|
100
|
-
# @method get_status_hostname
|
101
|
-
#
|
102
|
-
# @!macro hostname
|
103
|
-
#
|
104
|
-
# @!macro accepted
|
105
|
-
# @!macro state
|
106
|
-
#
|
107
|
-
# Support for:
|
108
|
-
# - plural resources: N/A
|
109
|
-
# - object access by ID: NO (TODO)
|
110
|
-
|
111
|
-
get "/_status/:hostname" do |hostname|
|
112
|
-
|
113
|
-
hostname = hostname.to_i if hostname =~ /^\d+$/
|
114
|
-
@data = @status[hostname]['hoststatus'].dup if @status.has_key? hostname
|
115
|
-
|
116
|
-
if @output == :state
|
117
|
-
@data = @data.slice("host_name", "current_state")
|
118
|
-
end
|
119
|
-
|
120
|
-
nil
|
121
|
-
end
|
122
97
|
|
123
98
|
##
|
124
99
|
# @method get_status
|
125
100
|
#
|
126
|
-
#
|
101
|
+
# Return all hosts status.
|
102
|
+
#
|
103
|
+
# If no output modifier provided, outputs full hosttatus information for each host. Not including services information.
|
104
|
+
#
|
105
|
+
# Alias: get /_status is the same thing as get /_status/_hosts with
|
106
|
+
# ActiveResource compatibility, i.e. for */_hosts request Nagira
|
107
|
+
# returns array instead of hash.
|
127
108
|
#
|
128
109
|
# @!macro accepted
|
129
110
|
# @!macro state
|
@@ -134,7 +115,8 @@ class Nagira < Sinatra::Base
|
|
134
115
|
# - plural resources: N/A
|
135
116
|
# - object access by ID: N/A
|
136
117
|
|
137
|
-
get
|
118
|
+
get /^\/_status(\/_hosts)?/ do
|
119
|
+
|
138
120
|
@data = @status.dup
|
139
121
|
|
140
122
|
case @output
|
@@ -150,4 +132,31 @@ class Nagira < Sinatra::Base
|
|
150
132
|
|
151
133
|
nil
|
152
134
|
end
|
135
|
+
|
136
|
+
# Hoststatus for single host
|
137
|
+
#
|
138
|
+
# @method get_status_hostname
|
139
|
+
#
|
140
|
+
# @!macro hostname
|
141
|
+
#
|
142
|
+
# @!macro accepted
|
143
|
+
# @!macro state
|
144
|
+
#
|
145
|
+
# Support for:
|
146
|
+
# - plural resources: N/A
|
147
|
+
# - object access by ID: NO (TODO)
|
148
|
+
|
149
|
+
get "/_status/:hostname" do |hostname|
|
150
|
+
|
151
|
+
|
152
|
+
hostname = hostname.to_i if hostname =~ /^\d+$/
|
153
|
+
@data = @status[hostname]['hoststatus'].dup if @status.has_key? hostname
|
154
|
+
|
155
|
+
if @output == :state
|
156
|
+
@data = @data.slice("host_name", "current_state")
|
157
|
+
end
|
158
|
+
|
159
|
+
nil
|
160
|
+
end
|
161
|
+
|
153
162
|
end
|
data/lib/nagira.rb
CHANGED
@@ -33,6 +33,12 @@ class Nagira < Sinatra::Base
|
|
33
33
|
|
34
34
|
VERSION = File.read(File.expand_path(File.dirname(__FILE__)) + '/../version.txt').strip
|
35
35
|
GITHUB = "http://dmytro.github.com/nagira/"
|
36
|
+
|
37
|
+
##
|
38
|
+
# When this prefix added to routes convert output to ActiveResource
|
39
|
+
# compatible format (basically Array instead of Hash).
|
40
|
+
#
|
41
|
+
AR_PREFIX = "/ar"
|
36
42
|
|
37
43
|
# Get all routes that Nagira provides.
|
38
44
|
def api
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.7
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nagira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|