nagira 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0be37e447b15c8087f82209470877a5fb202d77d
4
- data.tar.gz: e9670a022cfbe3184264353ac346d2133b6eb258
3
+ metadata.gz: fccef39db4a2a093a2f1012341d446dbd65da419
4
+ data.tar.gz: 2353f6f868237d0ac59d441c12395905af898659
5
5
  SHA512:
6
- metadata.gz: 065f49e0b3c74dffb37dbffaf9273407a8a7d329b4cfd4448ce1c143a2426218f3b1119a3423795ccaf283d37f36ad1e096dd41ff675b662e607fe69f911519a
7
- data.tar.gz: 7940f90fba42d4ab49f3fcb057a216654a2c7af9791a83fbc7d262dc99cdf48ba06d94c35cb5761d8f2817dc15a2653dba05c2b73355f95f1c8403e8a39ed285
6
+ metadata.gz: 11f7624063fe10514a995b2d6d97445b149aa59ed25452db6aca3a6f7a36565cc286ea8a0b10da51b71d026eeea341b437740c330baa423100086ce9690135e3
7
+ data.tar.gz: 9c1e64e4ca497953d794a5016473b94a401b4ef3e40095112d183a1fe3e5df7d687583737a7a1c1d85935d2318173a85978a0a2562a945862776ae9ca59057b1
data/History.md CHANGED
@@ -1,3 +1,10 @@
1
+ ### v0.4.0
2
+ * Wed Dec 24 2014 -- Dmytro Kovalov
3
+ - new API endpoints
4
+ - GET /\_status/_hosthgroup/:name
5
+ - GET /\_status/_hosthgroup/:name/_host
6
+ - GET /\_status/_hosthgroup/:name/_service
7
+ - update API docs (API.md)
1
8
 
2
9
  ### v.0.3.3
3
10
  * Tue May 27 2014 -- Dmytro Kovalov
@@ -43,11 +50,11 @@
43
50
 
44
51
  * Mon Apr 15 2013 -- Dmytro Kovalov
45
52
  - Extend ActiveResource support
46
- - add prefix /ar
53
+ - add prefix /ar
47
54
  - AR_PREFIX constant for the same
48
55
  - covert all output ot Array if it's ActiveResource
49
56
  - ActiveResource supportewd now in /_objects, /_status
50
-
57
+
51
58
  ### v.0.2.6
52
59
 
53
60
  * Tue Mar 26 2013 -- Ivan Gusev
@@ -69,24 +76,24 @@
69
76
  - Add partial ActiveSupport routes
70
77
  - `/_objects/host` works as well as `/_objects/hosts`
71
78
  - selection objects by ID is TODO
72
- * Feb 19, 2013 -- Dmytro Kovalov
73
- - Background parser.
74
-
79
+ * Feb 19, 2013 -- Dmytro Kovalov
80
+ - Background parser.
81
+
75
82
  To avoid delays on HTTP request from user. All data are parsed in separate thread.
76
83
  - configurable TTL for background parsing
77
84
  - can be disabled
78
- - Start-up section for the Nagira app.
85
+ - Start-up section for the Nagira app.
79
86
 
80
- All Nagios files are validated at start-up, rather than on first HTTP request.
87
+ All Nagios files are validated at start-up, rather than on first HTTP request.
81
88
 
82
89
  If there are permission problem or file don't exist error is reported to user.
83
- * Feb 9, 2013
90
+ * Feb 9, 2013
84
91
  - Merge all custom changes to `ruby-nagios` into upstream, use `ruby-nagios` as gem, not git sub-module
85
- - `nagios.cfg` file selection is in `ruby-nagios` now.
92
+ - `nagios.cfg` file selection is in `ruby-nagios` now.
86
93
 
87
94
  Look for config in `/etc/nagios*/` and `/usr/local/nagios/etc/`. Can be overridden by `NAGIOS_CFG_FILE` environment.
88
-
89
- ### v.0.2.1
95
+
96
+ ### v.0.2.1
90
97
 
91
98
  * Wed Dec 19 2012 - Dmytro Kovalov
92
99
  - fix for DOS formatted and spaces in config ; better error reporting for spec. fixes #8
@@ -96,49 +103,48 @@
96
103
  - ERB template for /etc/init./d file
97
104
  - Fixes for YARD formatting
98
105
  - Use Travis CI for Nagira testing
99
- * Thu Oct 4 19:45:00 JST 2012
106
+ * Thu Oct 4 19:45:00 JST 2012
100
107
 
101
108
  ### v.0.2.0
102
109
 
103
110
  - lot of bug fixes
104
111
  - API: first working PUT API for process host status and process service status external commands
105
112
  * 2012-09-28 Dmytro Kovalov - v. 0.1.5
106
- - many changes for testing files nagios.cfg, objects, status. Tested to work both in dev/test and production environments.
113
+ - many changes for testing files nagios.cfg, objects, status. Tested to work both in dev/test and production environments.
107
114
  - more documentation
108
115
  - API: additional modifier for output: `_full`. By default now `/_status` returns Hash with hoststatus only. Use ../_full to get both hoststatus and sevicestatus.
109
116
 
110
- ### v. 0.1.4
117
+ ### v. 0.1.4
111
118
 
112
- * 2012-09-26 Dmytro Kovalov -
119
+ * 2012-09-26 Dmytro Kovalov -
113
120
  - added support for JSON-P parameters (?callback=<nam>)
114
121
  - change API to have all keywords underscored, to avoid clashes with object names (`/_status`, `_objects`, `/_status/_list` etc).
115
122
 
116
- ### v. 0.1.3
123
+ ### v. 0.1.3
117
124
 
118
- * 2012-06-8 Dmytro Kovalov
125
+ * 2012-06-8 Dmytro Kovalov
119
126
  - specs for /config, /status, /objects - simple page loads and data
120
127
  checks;
121
128
  - /api route;
122
129
  - bugfixes;
123
130
  - YARD documentation;
124
131
 
125
- ### v. 0.1.2
132
+ ### v. 0.1.2
126
133
 
127
- * 2012-06-2 Dmytro Kovalov
128
- - spec for configuration files
134
+ * 2012-06-2 Dmytro Kovalov
135
+ - spec for configuration files
129
136
  - spec for basic responses from Sinatra (`GET /objects`, `GET /status`)
130
137
  - CONFIGURATION.rdoc
131
138
  - configuration cleanup
132
139
  * 2012-05-22 Dmytro Kovalov
133
- - start using Gemfile
140
+ - start using Gemfile
134
141
  - INSTALL.rdoc - simple description of installation procedure
135
142
  * 2012-01-12 Dmytro Kovalov
136
143
  - History.rdoc and version.txt files
137
144
  - Routes for objects configuration GET's
138
145
  - FEATURES.rdoc
139
- - YARD documentation
146
+ - YARD documentation
140
147
  * 2012-01-02 Dmytro Kovalov
141
148
  - First Sinatra application to return service state information
142
149
  * 2011-12-25 @dmytro
143
150
  - Started Github project
144
-
@@ -51,7 +51,6 @@ require 'nagira'
51
51
  # Nagios.
52
52
  #
53
53
  class Nagira < Sinatra::Base
54
-
55
54
  set :app_file, __FILE__
56
55
 
57
56
  ##
@@ -61,7 +60,7 @@ class Nagira < Sinatra::Base
61
60
  # @overload before("Initial Config")
62
61
  configure do
63
62
 
64
- $nagios = { }
63
+ $nagios = { }
65
64
  $nagios[:config] = Nagios::Config.new Nagira.settings.nagios_cfg
66
65
  $nagios[:config].parse
67
66
 
@@ -276,12 +275,12 @@ class Nagira < Sinatra::Base
276
275
 
277
276
 
278
277
  ##
279
- # @method argument_error
278
+ # @method argument_error
280
279
  # @overload after("ArgumentError")
281
280
  #
282
281
  # Return 400 if result of PUT operation is not success.
283
282
  #
284
- after do
283
+ after do
285
284
  return unless request.put?
286
285
  halt [400, @data.send("to_#{@format}") ] if ! @data[:result]
287
286
  end
@@ -370,6 +369,6 @@ class Nagira < Sinatra::Base
370
369
 
371
370
  end
372
371
 
373
- require "app/routes/put/status"
374
- require "app/routes/put/host"
375
- require "app/routes/put"
372
+ require "app/put/status"
373
+ require "app/put/host"
374
+ require "app/put"
File without changes
File without changes
@@ -1,3 +1,5 @@
1
+ require_relative 'status/hostgroups'
2
+
1
3
  class Nagira < Sinatra::Base
2
4
  # @!macro [attach] sinatra.get
3
5
  #
@@ -20,16 +22,16 @@ class Nagira < Sinatra::Base
20
22
  # @!macro [new] service_name
21
23
  # @param [String] :service_name Configured Nagios service for the host
22
24
  #
23
- # @!macro [new] accepted
25
+ # @!macro [new] accepted
24
26
  #
25
27
  # <b>Accepted output type modifiers:</b>
26
28
  #
27
- # @!macro [new] list
29
+ # @!macro [new] list
28
30
  #
29
31
  # - +/_list+ : Short list of available objects, depending on the
30
32
  # current request context: hosts, services, etc.
31
33
  #
32
- # @!macro [new] state
34
+ # @!macro [new] state
33
35
  #
34
36
  # - +/_state+ - Instead of full status information send only
35
37
  # current state. For hosts up/down, for services OK, Warn,
@@ -37,10 +39,10 @@ class Nagira < Sinatra::Base
37
39
  #
38
40
  # @!macro [new] full
39
41
  #
40
- # - +/_full+ - Show full status information. When used in
41
- # /_status/_full call will display full hoststaus and
42
+ # - +/_full+ - Show full status information. When used in
43
+ # /_status/_full call will display full hoststaus and
42
44
  # servicestatus information for each host.
43
- #
45
+ #
44
46
  #
45
47
 
46
48
  # Status routes
@@ -48,6 +50,7 @@ class Nagira < Sinatra::Base
48
50
 
49
51
  ##
50
52
  # @method get_status_hostname_services_service_name
53
+ # @overload get("/_status/:hostname/_services/:service_name")
51
54
  #
52
55
  # @!macro hostname
53
56
  # @!macro service_name
@@ -75,13 +78,13 @@ class Nagira < Sinatra::Base
75
78
  # @method get_status_hostname_services
76
79
  # @!macro hostname
77
80
  #
78
- # Endpoints:
81
+ # Endpoints:
79
82
  # - GET /_status/:hostname/_services
80
83
  # - GET /_status/:hostname/_hostcomments
81
84
  # - GET /_status/:hostname/_servicecomments
82
85
  #
83
86
  # Read +services+, +hostcomments+ or +servicecomments+ for single
84
- # host.
87
+ # host.
85
88
  #
86
89
  # @!macro accepted
87
90
  # @!macro state
@@ -91,12 +94,12 @@ class Nagira < Sinatra::Base
91
94
 
92
95
  hostname = hostname.to_i if hostname =~ /^\d+$/
93
96
  key = case service
94
- when 'services'
97
+ when 'services'
95
98
  'servicestatus'
96
99
  else
97
100
  service
98
101
  end
99
-
102
+
100
103
  if @status && @status[hostname]
101
104
  case @output
102
105
  when :list
@@ -114,7 +117,7 @@ class Nagira < Sinatra::Base
114
117
  ##
115
118
  # @method get_status
116
119
  #
117
- # Return all hosts status.
120
+ # Return all hosts status.
118
121
  #
119
122
  # If no output modifier provided, outputs full hosttatus information
120
123
  # for each host. Not including services information. When +_full+
@@ -133,12 +136,12 @@ class Nagira < Sinatra::Base
133
136
  # Support for (see API):
134
137
  # - plural resources: N/A
135
138
  # - object access by ID: N/A
136
-
139
+
137
140
  get /^\/_status(\/_hosts)?$/ do
138
141
 
139
142
  @data = @status.dup
140
143
 
141
- case @output
144
+ case @output
142
145
  when :state
143
146
  @data.each { |k,v| @data[k] = v['hoststatus'].slice("host_name", "current_state") }
144
147
  when :list
@@ -151,7 +154,7 @@ class Nagira < Sinatra::Base
151
154
 
152
155
  nil
153
156
  end
154
-
157
+
155
158
  # Hoststatus for single host
156
159
  #
157
160
  # @method get_status_hostname
@@ -174,7 +177,7 @@ class Nagira < Sinatra::Base
174
177
 
175
178
  hostname = hostname.to_i if hostname =~ /^\d+$/
176
179
  @data = @status[hostname]['hoststatus'].dup if @status.has_key? hostname
177
-
180
+
178
181
  if @output == :state
179
182
  @data = @data.slice("host_name", "current_state")
180
183
  end
@@ -0,0 +1,49 @@
1
+ class Nagira < Sinatra::Base
2
+ # @!macro [attach] sinatra.get
3
+ #
4
+ # @overload get "$1"
5
+ #
6
+ # @return HTTP response. Hash formatted in the format defined by
7
+ # requested output type(XML, YAML or JSON).
8
+ #
9
+
10
+
11
+ require 'pry'
12
+
13
+ register Sinatra::Namespace
14
+ namespace "/_status/_hostgroup" do
15
+
16
+ ##
17
+ # @method get_status_hostgroup
18
+ #
19
+ # Return full status of the hostgroup: including host status and
20
+ # service status.
21
+ #
22
+ get "/:hostgroup" do |hostgroup|
23
+ @data = Hostgroup.new(hostgroup).full
24
+ nil
25
+ end
26
+
27
+ ##
28
+ # @method get_status_hostgroup_service
29
+ #
30
+ # Endpoint:
31
+ # - GET /_status/_hostgroup/:hostgroup/_service
32
+ #
33
+ get "/:hostgroup/_service" do |hostgroup|
34
+ @data = Hostgroup.new(hostgroup).service_status
35
+ nil
36
+ end
37
+
38
+ ##
39
+ # @method get_status_hostgroup_host
40
+ # @overload get("/_status/_hostgroup/:hostgroup/_host")
41
+ #
42
+ # Endpoint:
43
+ # - GET /_status/_hostgroup/:host
44
+ get "/:hostgroup/_host" do |hostgroup|
45
+ @data = Hostgroup.new(hostgroup).host_status
46
+ nil
47
+ end
48
+ end
49
+ end
File without changes
File without changes
File without changes
data/bin/nagira CHANGED
@@ -4,8 +4,8 @@ begin
4
4
  require 'app.rb'
5
5
  rescue LoadError => e
6
6
  require 'rubygems'
7
- path = File.expand_path '../../lib', __FILE__
8
- $:.unshift(path) if File.directory?(path) && !$:.include?(path)
9
- require 'app.rb'
7
+ root = File.dirname(File.dirname(__FILE__))
8
+ $: << (File.expand_path 'lib', root) << (File.expand_path 'app', root)
9
+ require 'app'
10
10
  end
11
11
  Nagira.run!
@@ -11,7 +11,7 @@
11
11
 
12
12
 
13
13
  DEFAULT = {
14
-
14
+
15
15
  format_extensions: '\.(json|yaml|xml)$', # Regex for available
16
16
  # formats: xml, json, yaml
17
17
 
@@ -21,15 +21,15 @@ DEFAULT = {
21
21
 
22
22
  # No path to file configuration file by default. Main nagios config
23
23
  # is defined by +nagios_cfg_glob+ or by Sintra's
24
- # +settings.nagios_cfg+ variable.
24
+ # +settings.nagios_cfg+ variable.
25
25
  #
26
26
  # status_cfg and objects_cfg are defined by parsing of nagios_cfg
27
27
  # file. Sinatra's setting override parsed values.
28
- nagios_cfg: nil,
28
+ nagios_cfg: nil,
29
29
  status_cfg: nil,
30
30
  objects_cfg: nil,
31
31
  command_file: nil,
32
-
32
+
33
33
  ##
34
34
  # ttl used in Nagios::TimedParse module - extension
35
35
  # to Nagios modules.
@@ -40,9 +40,9 @@ DEFAULT = {
40
40
  # if file changes often, we do not want to parse it more often, then
41
41
  # this number of seconds. To disable timed parsing, set
42
42
  # ttl to 0 or negative number.
43
-
43
+
44
44
  ttl: ENV['NAGIRA_TTL'].to_i || 5,
45
-
45
+
46
46
  ##
47
47
  # start_background_parser used in Nagios::BackgroundParse class.
48
48
  #
@@ -59,13 +59,13 @@ DEFAULT = {
59
59
  # By default hostname regular expression accepts alpha-numerics,
60
60
  # dashes and dots, as specified by http://tools.ietf.org/html/rfc952
61
61
  # for hostnames. Extended to accept dots in the middle for FQHN's.
62
- #
62
+ #
63
63
  #
64
64
  # - default: '\w([\w\-\.]+)?\w'
65
65
  # - simple hostname: '\w([\w\-]+)?\w'
66
- # - allow space in hostname: '\w([\w\-\.(%20)]+)?\w'
66
+ # - allow space in hostname: '\w([\w\-\.(%20)]+)?\w'
67
67
  #
68
- # Explanation regarding spaces:
68
+ # Explanation regarding spaces:
69
69
  # ---------------------------------
70
70
  #
71
71
  # Nagios works OK with hostnames with spaces. This is against RFC's
@@ -75,7 +75,6 @@ DEFAULT = {
75
75
 
76
76
  hostname_regex: ENV['NAGIOS_HOST_CUSTOM_REGEX'] || '\w([\w\-\.]+)?\w'
77
77
 
78
-
79
78
  }
80
79
 
81
80
  require 'sinatra'
@@ -6,25 +6,24 @@ class Nagira < Sinatra::Base
6
6
 
7
7
  set :port, ENV['NAGIRA_PORT'].to_i if ENV['NAGIRA_PORT']
8
8
  set :bind, ENV['NAGIRA_BIND'] if ENV['NAGIRA_BIND']
9
+ set :root, File.dirname(File.dirname(__FILE__))
9
10
 
10
- configure do
11
+ configure do
11
12
  set :format, :json
12
13
  end
13
14
 
14
- if development?
15
- require 'sinatra/reloader'
16
- register Sinatra::Reloader
17
- also_reload(File.dirname(File.dirname(__FILE__))+"/*.rb")
18
- also_reload(File.dirname(File.dirname(__FILE__))+"/{app,lib}/**/*.rb")
19
- end
15
+ require 'sinatra/reloader' if development?
20
16
 
21
17
  ##
22
18
  # Development and test environments use local files located in the
23
19
  # development tree: ./test/data.
24
- configure :development, :test do
20
+ configure :development, :test do
21
+ register Sinatra::Reloader
22
+ also_reload("#{root}/*.rb")
23
+ also_reload("#{root}/{config,app,lib}/**/*.rb")
25
24
 
26
25
  dir = File.expand_path(File.dirname(__FILE__) + '/../test/data/')
27
-
26
+
28
27
  set :nagios_cfg, "#{dir}/nagios.cfg"
29
28
  set :status_cfg, "#{dir}/status.dat"
30
29
  set :objects_cfg, "#{dir}/objects.cache"
@@ -32,7 +31,7 @@ class Nagira < Sinatra::Base
32
31
 
33
32
  set :show_exceptions, false
34
33
  end
35
-
34
+
36
35
 
37
36
  # configure :production do
38
37
  # # If your nagios.cfg file is in 'standard' location (in RH and