nagira 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +11 -0
  3. data/Rakefile +1 -1
  4. data/app/app.rb +44 -298
  5. data/app/concerns/host_status_name_concerneable.rb +18 -0
  6. data/app/concerns/output_typeable.rb +22 -0
  7. data/app/controllers/api_help_controller.rb +25 -0
  8. data/app/controllers/host_status_controller.rb +82 -0
  9. data/{lib/nagira/hostgroup.rb → app/controllers/hostgroup_controller.rb} +1 -1
  10. data/app/controllers/resource_status_controler.rb +65 -0
  11. data/app/controllers/service_status_controler.rb +50 -0
  12. data/{lib/nagira/servicegroup.rb → app/controllers/servicegroups_controller.rb} +1 -1
  13. data/app/filters/after.rb +76 -0
  14. data/app/filters/before.rb +156 -0
  15. data/app/filters/configure.rb +34 -0
  16. data/app/helpers/put_helpers.rb +11 -0
  17. data/{lib/nagira → app/loggers}/simple_logger.rb +0 -0
  18. data/{lib/nagira → app/parsers}/background_parse.rb +0 -0
  19. data/{lib/nagira → app/parsers}/parser.rb +1 -9
  20. data/app/routes/get.rb +50 -0
  21. data/app/routes/get/config.rb +11 -0
  22. data/app/{get → routes/get}/objects.rb +4 -24
  23. data/app/routes/get/status.rb +98 -0
  24. data/app/{get → routes/get}/status/hostgroups.rb +3 -14
  25. data/app/routes/get/status/servicegroups.rb +16 -0
  26. data/app/{put → routes/put}/host.rb +1 -4
  27. data/app/{put → routes/put}/status.rb +13 -20
  28. data/app/writers/external_command_writer.rb +52 -0
  29. data/bin/nagira +1 -1
  30. data/config/defaults.rb +20 -12
  31. data/config/environment.rb +2 -1
  32. data/lib/nagira/timed_parse.rb +1 -1
  33. data/spec/01_background_parser.rb +5 -5
  34. data/spec/01_data_format/01_nagira_response_spec.rb +6 -6
  35. data/spec/01_data_format/02_0_status_spec.rb +1 -1
  36. data/spec/01_data_format/02_nagira_data_spec.rb +8 -8
  37. data/spec/01_data_format/03_api_spec.rb +3 -3
  38. data/spec/get/status/comments_spec.rb +2 -2
  39. data/spec/get/status/endpoints_spec.rb +11 -11
  40. data/spec/get/status/hostgroup.rb +3 -3
  41. data/spec/get/status/hosts_spec.rb +1 -1
  42. data/spec/get/status/servicegroup.rb +4 -4
  43. data/spec/get/status/services_spec.rb +1 -1
  44. data/spec/put/host_spec.rb +4 -4
  45. data/spec/put/status_spec.rb +5 -5
  46. data/spec/put/support.rb +3 -3
  47. data/spec/spec_helper.rb +3 -3
  48. data/version.txt +1 -1
  49. metadata +70 -60
  50. data/app/get/config.rb +0 -24
  51. data/app/get/status.rb +0 -189
  52. data/app/get/status/servicegroups.rb +0 -28
  53. data/app/put.rb +0 -53
  54. data/lib/nagira.rb +0 -67
@@ -1,189 +0,0 @@
1
- require_relative 'status/hostgroups'
2
- require_relative 'status/servicegroups'
3
-
4
- class Nagira < Sinatra::Base
5
- # @!macro [attach] sinatra.get
6
- #
7
- # @overload get "$1"
8
- #
9
- # @return HTTP response. Hash formatted in the format defined by
10
- # requested output type(XML, YAML or JSON).
11
- #
12
- #
13
- #
14
- # @!macro [new] type
15
- # @param [String] :type Type is one of Nagios objects like hosts, hostgroupsroups, etc.
16
- #
17
- # @!macro [new] name
18
- # @param [String] :name
19
- #
20
- # @!macro [new] hostname
21
- # @param [String] :hostname Configured Nagios hostname
22
- #
23
- # @!macro [new] service_name
24
- # @param [String] :service_name Configured Nagios service for the host
25
- #
26
- # @!macro [new] accepted
27
- #
28
- # <b>Accepted output type modifiers:</b>
29
- #
30
- # @!macro [new] list
31
- #
32
- # - +/_list+ : Short list of available objects, depending on the
33
- # current request context: hosts, services, etc.
34
- #
35
- # @!macro [new] state
36
- #
37
- # - +/_state+ - Instead of full status information send only
38
- # current state. For hosts up/down, for services OK, Warn,
39
- # Critical, Unknown (0,1,2-1)
40
- #
41
- # @!macro [new] full
42
- #
43
- # - +/_full+ - Show full status information. When used in
44
- # /_status/_full call will display full hoststaus and
45
- # servicestatus information for each host.
46
- #
47
- #
48
-
49
- # Status routes
50
- # ============================================================
51
-
52
- ##
53
- # @method get_status_hostname_services_service_name
54
- # @overload get("/_status/:hostname/_services/:service_name")
55
- #
56
- # @!macro hostname
57
- # @!macro service_name
58
- #
59
- # Full or short status information for single service on single
60
- # host.
61
- #
62
- # @!macro accepted
63
- # @!macro state
64
- #
65
- get "/_status/:hostname/_services/:service_name" do |hostname,service|
66
-
67
- hostname = hostname.to_i if hostname =~ /^\d+$/
68
- if @status && @status[hostname]
69
- if @output == :state
70
- @data = @status[hostname]['servicestatus'][service].slice("hostname", "service_description", "current_state")
71
- else
72
- @data = @status[hostname]['servicestatus'][service]
73
- end
74
- end
75
- nil
76
- end
77
-
78
- ##
79
- # @method get_status_hostname_services
80
- # @!macro hostname
81
- #
82
- # Endpoints:
83
- # - GET /_status/:hostname/_services
84
- # - GET /_status/:hostname/_hostcomments
85
- # - GET /_status/:hostname/_servicecomments
86
- #
87
- # Read +services+, +hostcomments+ or +servicecomments+ for single
88
- # host.
89
- #
90
- # @!macro accepted
91
- # @!macro state
92
- # @!macro list
93
- # @!macro full
94
- get %r{^/_status/(?<hostname>#{hostname_regex})/_(?<service>(services|hostcomments|servicecomments))$} do |hostname,service|
95
-
96
- hostname = hostname.to_i if hostname =~ /^\d+$/
97
- key = case service
98
- when 'services'
99
- 'servicestatus'
100
- else
101
- service
102
- end
103
-
104
- if @status && @status[hostname]
105
- case @output
106
- when :list
107
- @data = @status[hostname][key].keys
108
- when :state
109
- @data = @status.each { |k,v| @data[k] = v.slice("host_name", "service_description", "current_state") }
110
- else
111
- @data = @status[hostname][key]
112
- end
113
- end
114
-
115
- nil
116
- end
117
-
118
- ##
119
- # @method get_status
120
- #
121
- # Return all hosts status.
122
- #
123
- # If no output modifier provided, outputs full hosttatus information
124
- # for each host. Not including services information. When +_full+
125
- # modifier is provided data include hoststatus, servicestatus and
126
- # all comments (servicecomments and hostcomments) for hosts.
127
- #
128
- # Alias: get /_status is the same thing as get /_status/_hosts with
129
- # ActiveResource compatibility, i.e. for */_hosts request Nagira
130
- # returns array instead of hash.
131
- #
132
- # @!macro accepted
133
- # @!macro state
134
- # @!macro list
135
- # @!macro full
136
- #
137
- # Support for (see API):
138
- # - plural resources: N/A
139
- # - object access by ID: N/A
140
-
141
- get /^\/_status(\/_hosts)?$/ do
142
-
143
- @data = @status.dup
144
-
145
- case @output
146
- when :state
147
- @data.each { |k,v| @data[k] = v['hoststatus'].slice("host_name", "current_state") }
148
- when :list
149
- @data = @data.keys
150
- when :full
151
- @data
152
- else
153
- @data.each { |k,v| @data[k] = v['hoststatus'] }
154
- end
155
-
156
- nil
157
- end
158
-
159
- # Hoststatus for single host
160
- #
161
- # @method get_status_hostname
162
- #
163
- # Endpoint
164
- #
165
- # - get "/_status/:hostname"
166
- #
167
- # @!macro hostname
168
- #
169
- # @!macro accepted
170
- # @!macro state
171
- #
172
- # Support for:
173
- # - plural resources: N/A
174
- # - object access by ID: NO (TODO)
175
-
176
- get %r{^/_status/(?<hostname>#{hostname_regex})$} do |hostname|
177
-
178
-
179
- hostname = hostname.to_i if hostname =~ /^\d+$/
180
- @data = @status[hostname]['hoststatus'].dup if @status.has_key? hostname
181
-
182
- if @output == :state
183
- @data = @data.slice("host_name", "current_state")
184
- end
185
-
186
- nil
187
- end
188
-
189
- end
@@ -1,28 +0,0 @@
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
- ##
12
- # @method get_status_servicegroup
13
- #
14
- # Endpoint:
15
- # - GET /_status/_servicegroup/:servicegroup
16
- #
17
- # Supported extensions: _state, _list
18
- #
19
-
20
- get "/_status/_servicegroup/:servicegroup" do |group_name|
21
-
22
- servicegroup = Servicegroup.new(group_name)
23
-
24
- @data = servicegroup.send(@output)
25
- nil
26
- end
27
-
28
- end
data/app/put.rb DELETED
@@ -1,53 +0,0 @@
1
- class Nagira < Sinatra::Base
2
-
3
- # @method parse_input_data
4
- # @overload before("Parse PUT request body")
5
- #
6
- # Process the data before on each HTTP request.
7
- #
8
- # @return [Array] @input Sets @input instance variable.
9
- #
10
- before do
11
- if request.put?
12
- data = request.body.read
13
- @input = case @format
14
- when :json then JSON.parse data
15
- when :xml then Hash.from_xml data
16
- when :yaml then YAML.load data
17
- end
18
- # Make sure we always return an Array
19
- @input = [@input] if @input.is_a? Hash
20
- end
21
- @input
22
- end
23
-
24
- # Define helpers for put methods
25
- helpers do
26
-
27
- # Helper to send PUT update to Nagios::ExternalCommands
28
- #
29
- # @param [Hash] params
30
- # @param [Symbol] action Nagios external command name
31
- #
32
- # FIXME: This only accepts single service. Modify to use Arrays too
33
- def put_update action, params
34
- res = Parser.commands.write(params.merge({ :action => action }))
35
- { :result => res[:result], :object => res[:data]}
36
- end
37
- end
38
-
39
- # Small helper to submit data to ::Nagios::ExternalCommands
40
- # object. For status updates sends external coond via
41
- # ::Nagios::ExternalCommands.send method.
42
- def update_service_status params
43
- put_update :PROCESS_SERVICE_CHECK_RESULT, params
44
- end
45
-
46
- # Small helper to submit data to ::Nagios::ExternalCommands
47
- # object. For host status updates sends external command via
48
- # ::Nagios::ExternalCommands.write method.
49
- def update_host_status params
50
- put_update :PROCESS_HOST_CHECK_RESULT, params
51
- end
52
-
53
- end
@@ -1,67 +0,0 @@
1
- require 'active_model/serialization'
2
- require 'active_model/serializers/xml' # for Hash.to_xml
3
-
4
- require 'active_support/inflector'
5
- require 'active_support/inflector/inflections'
6
- require 'active_support/core_ext/hash/slice' # for Hash.slice
7
-
8
- require 'json'
9
- require 'yaml'
10
- require 'sinatra'
11
- require 'sinatra/reloader'
12
- require 'singleton'
13
-
14
- $: << File.dirname(__FILE__) << File.dirname(File.dirname(__FILE__))
15
-
16
- require 'config/defaults'
17
-
18
- require "app/get/config"
19
- require "app/get/objects"
20
- require "app/get/status"
21
-
22
- require "nagira/hostgroup"
23
- require "nagira/servicegroup"
24
- require "nagira/hostservice"
25
-
26
- require "nagira/background_parse"
27
- require "nagira/parser"
28
- require "nagira/simple_logger"
29
-
30
-
31
- #
32
- # environment file must go after default, some settings override
33
- # defaults.
34
- #
35
- require 'config/environment'
36
- require 'nagira/nagios'
37
-
38
- class Nagira < Sinatra::Base
39
-
40
- VERSION = File.read(File.expand_path(File.dirname(__FILE__)) + '/../version.txt').strip
41
- GITHUB = "http://dmytro.github.com/nagira/"
42
-
43
- ##
44
- # When this prefix added to routes convert output to ActiveResource
45
- # compatible format (basically Array instead of Hash).
46
- #
47
- AR_PREFIX = "/ar"
48
-
49
- # Get all routes that Nagira provides.
50
- def api
51
- api = { }
52
-
53
- param_regex = Regexp.new '\(\[\^\\\\\/\?\#\]\+\)'
54
- Nagira.routes.keys.each do |method|
55
- api[method] ||= []
56
- Nagira.routes[method].each do |r|
57
- path = r[0].inspect[3..-3]
58
- r[1].each do |parm|
59
- path.sub!(param_regex,":#{parm}")
60
- end
61
- path.gsub!('\\','')
62
- api[method] << path unless path.empty?
63
- end
64
- end
65
- api
66
- end
67
- end