nagira 0.2.11 → 0.2.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef58ceb2eb909d1f350fe719b8178952f23a836a
4
- data.tar.gz: 3eb3dcdd3b8c40aa63c9aa40ab8095b0894421d7
3
+ metadata.gz: a336625df06fa45529696e6c76a24a514c658acc
4
+ data.tar.gz: 06c24925a8f55086540c180432c78a16012c9bf4
5
5
  SHA512:
6
- metadata.gz: 6f791716dbb7435f502d10adf55300dbdcfe92d5e19484f2aa1c3054234eab3487cea700ce75ee76a46e32e42725ccb95ee9b50f33842488dcbbf0a30058bc85
7
- data.tar.gz: 212b0cbade25d508b51cbd9dd402568d49f6008088f2b7b93adb715742dd85cb983a823bf62edf966a68bc039cbb9ab1e626cd1290c7f5cec16a9e15aec17e3b
6
+ metadata.gz: ea2dbe47313fa3f3b1a5ca50e328cff6e35df7869918fea89022a7ccb1856a54cab7a62bf123406d681394bb9bf9a735bbd140892fa6fee3b3a83d8ef0fd3ccd
7
+ data.tar.gz: 9008b71560d0196af7130b684d814d3512a22a6c694d2b966f6932841e5fc8703ddaf73fe53de514a1167b48304a011655eea8e5c33e059525c5b0b0e5d974eb
data/History.md CHANGED
@@ -1,3 +1,12 @@
1
+ ### v.0.2.12
2
+ * Thr Aug 08 2013 -- Dmytro Kovalov
3
+ - Implementation for GET comments endpoints:
4
+ - /_status/:hostname/_services
5
+ - /_status/:hostname/_hostcomments
6
+ - /_status/:hostname/_servicecomments
7
+ * July, Aug 2013
8
+ - RSpec tests
9
+ - GET endpoints checks
1
10
  ### v.0.2.10, v.0.2.11
2
11
  * Fri Jul 19 2013 -- Dmytro Kovalov
3
12
  - Gem versions fixes in gemspec, use gemspec in Gemfile.
@@ -60,7 +60,6 @@ class Nagira < Sinatra::Base
60
60
  #
61
61
  get "/_status/:hostname/_services/:service_name" do |hostname,service|
62
62
 
63
-
64
63
  hostname = hostname.to_i if hostname =~ /^\d+$/
65
64
  if @status && @status[hostname]
66
65
  if @output == :state
@@ -76,23 +75,36 @@ class Nagira < Sinatra::Base
76
75
  # @method get_status_hostname_services
77
76
  # @!macro hostname
78
77
  #
79
- # All services for single host.
78
+ # Endpoints:
79
+ # - GET /_status/:hostname/_services
80
+ # - GET /_status/:hostname/_hostcomments
81
+ # - GET /_status/:hostname/_servicecomments
82
+ #
83
+ # Read +services+, +hostcomments+ or +servicecomments+ for single
84
+ # host.
80
85
  #
81
86
  # @!macro accepted
82
87
  # @!macro state
83
88
  # @!macro list
84
89
  # @!macro full
85
- get "/_status/:hostname/_services" do |hostname|
90
+ get %r{^/_status/(?<hostname>[\w\-\.]+)/_(?<service>(services|hostcomments|servicecomments))$} do |hostname,service|
86
91
 
87
92
  hostname = hostname.to_i if hostname =~ /^\d+$/
93
+ key = case service
94
+ when 'services'
95
+ 'servicestatus'
96
+ else
97
+ service
98
+ end
99
+
88
100
  if @status && @status[hostname]
89
101
  case @output
90
102
  when :list
91
- @data = @status[hostname]['servicestatus'].keys
103
+ @data = @status[hostname][key].keys
92
104
  when :state
93
105
  @data = @status.each { |k,v| @data[k] = v.slice("host_name", "service_description", "current_state") }
94
106
  else
95
- @data = @status[hostname]['servicestatus']
107
+ @data = @status[hostname][key]
96
108
  end
97
109
  end
98
110
 
@@ -104,7 +116,10 @@ class Nagira < Sinatra::Base
104
116
  #
105
117
  # Return all hosts status.
106
118
  #
107
- # If no output modifier provided, outputs full hosttatus information for each host. Not including services information.
119
+ # If no output modifier provided, outputs full hosttatus information
120
+ # for each host. Not including services information. When +_full+
121
+ # modifier is provided data include hoststatus, servicestatus and
122
+ # all comments (servicecomments and hostcomments) for hosts.
108
123
  #
109
124
  # Alias: get /_status is the same thing as get /_status/_hosts with
110
125
  # ActiveResource compatibility, i.e. for */_hosts request Nagira
@@ -119,7 +134,7 @@ class Nagira < Sinatra::Base
119
134
  # - plural resources: N/A
120
135
  # - object access by ID: N/A
121
136
 
122
- get /^\/_status(\/_hosts)?/ do
137
+ get /^\/_status(\/_hosts)?$/ do
123
138
 
124
139
  @data = @status.dup
125
140
 
@@ -22,7 +22,7 @@ class Nagira < Sinatra::Base
22
22
  # $ curl -i -H "Accept: application/json" -d @host.json -X
23
23
  # PUT http://localhost:4567/_status/svaroh
24
24
  #
25
- # => {"status": true, "object": [{"data": {"host_name":"svaroh",
25
+ # => {"result": true, "object": [{"data": {"host_name":"svaroh",
26
26
  # "status_code": "0", "plugin_output": "ping OK", "action":
27
27
  # "PROCESS_HOST_CHECK_RESULT"}, "result":true, "messages": []}]}
28
28
  #
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ shared_examples_for :comment_data do
5
+
6
+ let(:data) { JSON.parse(last_response.body) }
7
+
8
+ subject do
9
+ case data
10
+ when Array
11
+ data.first
12
+ when Hash
13
+ data.values.first.first
14
+ end
15
+ end
16
+
17
+ it { should be_a_kind_of Hash }
18
+ it { should have_key 'comment_id' }
19
+ it { should have_key 'comment_data' }
20
+ it { should have_key 'author' }
21
+
22
+ end
23
+
24
+
25
+ describe Nagira do
26
+
27
+ set :environment, ENV['RACK_ENV'] || :test
28
+ include Rack::Test::Methods
29
+ def app
30
+ @app ||= Nagira
31
+ end
32
+
33
+ before :all do
34
+ get "/_status/_list.json"
35
+ @host = JSON.parse(last_response.body).first
36
+ end
37
+
38
+ context "/_status/:host/_hostcomments" do
39
+ before { get "/_status/#{@host}/_hostcomments.json" }
40
+ it_should_behave_like :comment_data
41
+ end
42
+
43
+
44
+ context "/_status/:host/_servicecomments" do
45
+ before { get "/_status/#{@host}/_servicecomments.json" }
46
+
47
+ it_should_behave_like :comment_data
48
+
49
+ let (:data) { JSON.parse(last_response.body).values.first.first }
50
+ it { data.should have_key 'service_description' }
51
+ it { data.should have_key 'host_name' }
52
+
53
+ end
54
+
55
+
56
+
57
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ #
4
+ # Specs for implemetned API endpoints. Only check response: OK or 404.
5
+ #
6
+
7
+ shared_examples_for :fail_on_random_url do |base|
8
+ RANDOM.each do |url|
9
+ ep = "#{base}/#{url}"
10
+ it "fails on #{ep} string" do
11
+ get ep
12
+ last_response.status.should be 404
13
+ end
14
+ end
15
+ end
16
+
17
+ shared_examples_for :respond_to_valid_url do |base, urls|
18
+ urls.each do |url|
19
+ ep = "#{base}/#{url}"
20
+ it "responds to #{ep}" do
21
+ get ep
22
+ last_response.should be_ok
23
+ end
24
+ end
25
+ end
26
+
27
+ shared_examples_for :fail_on_bad_url do |url|
28
+ before { get url }
29
+ it "fails on #{url}" do
30
+ last_response.status.should be 404
31
+ end
32
+ end
33
+
34
+ describe Nagira do
35
+
36
+ set :environment, :test # This should run only in test mode as it uses hardcoded host names
37
+ include Rack::Test::Methods
38
+ def app
39
+ @app ||= Nagira
40
+ end
41
+
42
+ context "API endpoints" do
43
+
44
+ host = IMPLEMENTED[:hosts].first
45
+
46
+ context :top do
47
+ it_should_behave_like :respond_to_valid_url, '', IMPLEMENTED[:top]
48
+ it_should_behave_like :fail_on_random_url, ''
49
+ end
50
+
51
+
52
+ context "/_status" do
53
+ it_should_behave_like :respond_to_valid_url, "/_status", IMPLEMENTED[:hosts]
54
+ it_should_behave_like :respond_to_valid_url, "/_status", IMPLEMENTED[:output] + ["_hosts"]
55
+ it_should_behave_like :fail_on_random_url, '/_status'
56
+ end
57
+
58
+ context "/_status/:host" do
59
+ it_should_behave_like :respond_to_valid_url, "/_status/#{host}", IMPLEMENTED[:status]
60
+ it_should_behave_like :fail_on_random_url, "/_status/#{host}"
61
+
62
+ context :unknown_host do
63
+ it_should_behave_like :fail_on_bad_url, '/_status/unknown_host'
64
+ it_should_behave_like :fail_on_random_url, "/_status/unknown_host"
65
+ end
66
+
67
+ end
68
+
69
+ end # API endpoints
70
+
71
+
72
+ end
@@ -1,4 +1,6 @@
1
1
  require 'spec_helper'
2
+ require_relative 'support'
3
+ require 'pp'
2
4
 
3
5
  describe Nagira do
4
6
 
@@ -8,45 +10,50 @@ describe Nagira do
8
10
  @app ||= Nagira
9
11
  end
10
12
 
11
- let (:content_type) { {'Content-Type' => 'application/json'} }
12
-
13
13
  before :all do
14
- @data = {
14
+ get "/_status/_list.json"
15
+ @host = JSON.parse(last_response.body).first
16
+ end
17
+
18
+ let (:content_type) { {'Content-Type' => 'application/json'} }
19
+ let (:host) { @host }
20
+ let (:input) {
21
+ {
15
22
  "status_code" => 0,
16
23
  "plugin_output" => "Plugin said: Bla"
17
24
  }
25
+ }
18
26
 
19
- get "/_status/_list.json"
20
- @host = JSON.parse(last_response.body).first
27
+ # --------------------------------------------
28
+ # Tests
29
+ #
21
30
 
22
- end
31
+ context "/_status" do
32
+ it { pending "Not implemented" }
33
+ end # ----------- "/_status" do
23
34
 
24
- context "updates /_status/:host" do
25
- let (:url) { "/_status/#{@host}" }
26
-
27
- context "single check" do
28
-
29
- it "with no hostname" do
30
- pending
31
- # put url, @data, content_type
32
-
33
- # pp [url, @data, last_response.body]
34
- # last_response.should be_ok
35
- end
35
+ context "/_status/:host_name" do
36
+ let (:url) { "/_status/#{host}"}
36
37
 
37
- it "with hostname" do
38
- put url, @data, content_type
39
- pp last_response.body
40
- last_response.should_not be_ok
41
- end
38
+ before (:each) do
39
+ put url, input.to_json, content_type
40
+ end
42
41
 
42
+ it_should_behave_like :put_status
43
43
 
44
+ it "should fail with missing data" do
45
+ input.keys.each do |key|
46
+ (inp = input.dup).delete key
47
+ put url, inp.to_json, content_type
48
+ last_response.status.should eq 400
49
+ end
44
50
  end
45
51
 
46
- it "Multiple checks" do
47
- pending
48
- end
52
+ context "/_host_status/:host_name" do
53
+ it { pending "Not implemented" }
54
+ end # ----------- "/_host_status/:host_name"
55
+
49
56
 
50
- end # /_status/:host
57
+ end # ----------- /_status/:host
51
58
 
52
59
  end
data/spec/put/support.rb CHANGED
@@ -38,7 +38,6 @@ shared_examples_for :json_success_response do
38
38
  end
39
39
  subject { @ret }
40
40
 
41
- #it { subject.}
42
41
  end
43
42
 
44
43
  shared_examples_for :write_to_nagios_cmd_file do
@@ -49,7 +48,7 @@ shared_examples_for :write_to_nagios_cmd_file do
49
48
 
50
49
  it "writes to nagios.cmd file" do
51
50
  File.should exist(cmd)
52
- File.read(cmd).should =~ /^\[\d+\] PROCESS_SERVICE_CHECK_RESULT;#{host}/
51
+ File.read(cmd).should =~ /^\[\d+\] PROCESS_(SERVICE|HOST)_CHECK_RESULT;#{host}/
53
52
  end
54
53
 
55
54
  after (:each) do
data/spec/spec_helper.rb CHANGED
@@ -2,3 +2,12 @@ $: << File.dirname(__FILE__) + '/../lib/'
2
2
  require_relative '../lib/nagira.rb'
3
3
  require_relative '../lib/app.rb'
4
4
  require 'rack/test'
5
+
6
+ IMPLEMENTED = {
7
+ top: %w{ _api _status _objects _config _runtime},
8
+ output: %w{ _list _state _full }, # Type of requests as in varaible @output
9
+ hosts: %w{ archive tv },
10
+ status: %w{ _services _servicecomments _hostcomments }
11
+ }
12
+
13
+ RANDOM = %w{ _bla _foo bla foo ahdhjdjda }
data/test/data/status.dat CHANGED
@@ -1650,3 +1650,30 @@ contactstatus {
1650
1650
  service_notifications_enabled=1
1651
1651
  }
1652
1652
 
1653
+ servicecomment {
1654
+ host_name=archive
1655
+ service_description=Disk space
1656
+ entry_type=4
1657
+ comment_id=38
1658
+ source=0
1659
+ persistent=0
1660
+ entry_time=1373457035
1661
+ expires=0
1662
+ expire_time=0
1663
+ author=dmytro
1664
+ comment_data=Need to verify what to delete.
1665
+ }
1666
+
1667
+ hostcomment {
1668
+ host_name=archive
1669
+ entry_type=1
1670
+ comment_id=40
1671
+ source=1
1672
+ persistent=1
1673
+ entry_time=1375778132
1674
+ expires=0
1675
+ expire_time=0
1676
+ author=dmytro
1677
+ comment_data=Testing Host Comment --dk
1678
+ }
1679
+
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.2.11
1
+ 0.2.12
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nagira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.11
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmytro Kovalov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-19 00:00:00.000000000 Z
11
+ date: 2013-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -292,13 +292,14 @@ files:
292
292
  - lib/nagira/background_parse.rb
293
293
  - lib/nagira/nagios.rb
294
294
  - lib/nagira/timed_parse.rb
295
- - lib/nagira/version.rb
296
295
  - lib/nagira.rb
297
296
  - spec/00_configuration_spec.rb
298
297
  - spec/01_data_format/01_nagira_response_spec.rb
299
298
  - spec/01_data_format/02_0_status_spec.rb
300
299
  - spec/01_data_format/02_nagira_data_spec.rb
301
300
  - spec/01_data_format/03_api_spec.rb
301
+ - spec/get/comments_spec.rb
302
+ - spec/get/endpoints_spec.rb
302
303
  - spec/get/hosts_spec.rb
303
304
  - spec/get/services_spec.rb
304
305
  - spec/put/host_spec.rb
@@ -1,4 +0,0 @@
1
- require 'sinatra'
2
- class Nagira < Sinatra::Base
3
- VERSION = File.read(File.expand_path(File.dirname(__FILE__)) + '/../../version.txt').strip
4
- end