nagira 0.2.6 → 0.2.7
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/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
|