circactivator 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/cli_spec.rb ADDED
@@ -0,0 +1,119 @@
1
+ #
2
+ # Author:: Adam Leff (<aleff@webmd.net>)
3
+ # Copyright:: Copyright (c) 2015 WebMD, LLC
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe CircActivator::CLI do
22
+ before(:each) do
23
+ allow(CircActivator::Log).to receive(:debug)
24
+ allow(CircActivator::Log).to receive(:error)
25
+
26
+ @monitoring = CircActivator::Monitoring.new
27
+ allow(CircActivator::Monitoring).to receive(:new).and_return(@monitoring)
28
+ allow(@monitoring).to receive(:add_error_message)
29
+ allow(@monitoring).to receive(:set_error_file)
30
+ end
31
+
32
+ it 'calls run_updater for a single group' do
33
+ expect(subject).to receive(:run_updater).with('iad1-prod', 1, '.*')
34
+ expect(subject).to receive(:run_updater).with('iad1-prod', 2, 'api-web')
35
+ expect(subject).to receive(:exit_handler)
36
+ subject.update_group('iad1-prod')
37
+ end
38
+
39
+ it 'calls run_updater for all groups and check_bundles in the config' do
40
+ expect(subject).to receive(:run_updater).with('iad1-prod', 1, '.*')
41
+ expect(subject).to receive(:run_updater).with('iad1-prod', 2, 'api-web')
42
+ expect(subject).to receive(:run_updater).with('iad1-nonprod', 3, '.*')
43
+ expect(subject).to receive(:run_updater).with('iad1-nonprod', 4, '.*')
44
+ expect(subject).to receive(:exit_handler)
45
+ subject.update_all_groups
46
+ end
47
+
48
+ it 'runs a single CheckUpdater when update_check_bundle is called - no regex passed' do
49
+ updater = CircActivator::CheckUpdater.new(333)
50
+ expect(CircActivator::CheckUpdater).to receive(:new).with(333).and_return(updater)
51
+ expect(updater).to_not receive(:name_regex=)
52
+ expect(updater).to receive(:run).and_return([])
53
+ expect(subject).to receive(:exit_handler)
54
+ subject.update_check_bundle(333)
55
+ end
56
+
57
+ it 'runs a single CheckUpdater when update_check_bundle is called - regex passed' do
58
+ updater = CircActivator::CheckUpdater.new(333)
59
+ expect(CircActivator::CheckUpdater).to receive(:new).with(333).and_return(updater)
60
+ expect(updater).to receive(:name_regex=).with('myfilter')
61
+ expect(updater).to receive(:run).and_return([])
62
+ expect(subject).to receive(:exit_handler)
63
+ subject.update_check_bundle(333, 'myfilter')
64
+ end
65
+
66
+ it 'configures a CircActivator::CheckUpdater instance correctly with regex' do
67
+ updater = CircActivator::CheckUpdater.new(1)
68
+ expect(CircActivator::CheckUpdater).to receive(:new).and_return(updater)
69
+ expect(updater).to receive(:name_regex=).with('test.*name')
70
+ expect(updater).to receive(:run).and_return([])
71
+
72
+ subject.run_updater('group', 1, 'test.*name')
73
+ end
74
+
75
+ it 'appends an error message when run_updater raises an exception' do
76
+ updater = CircActivator::CheckUpdater.new(1)
77
+ expect(CircActivator::CheckUpdater).to receive(:new).and_return(updater)
78
+ expect(updater).to receive(:run).and_raise(CircActivator::Exception::CirconusError)
79
+ expect(subject).to receive(:log_error)
80
+
81
+ subject.run_updater('group', 1, '.*')
82
+ end
83
+
84
+ it 'log_error calls add_error_message and logs an error' do
85
+ expect(@monitoring).to receive(:add_error_message).with('my error')
86
+ expect(CircActivator::Log).to receive(:error).with('my error')
87
+ subject.log_error('my error')
88
+ end
89
+
90
+ context 'exit_handler' do
91
+ before(:each) do
92
+ allow(Kernel).to receive(:exit).with(0)
93
+ allow(Kernel).to receive(:exit).with(2)
94
+ end
95
+
96
+ it 'exits 0 when there are no errors' do
97
+ expect(Kernel).to receive(:exit).with(0)
98
+ subject.exit_handler
99
+ end
100
+
101
+ it 'exits 2 where there is an error' do
102
+ @monitoring.add_error_message('dummy error')
103
+ subject.exit_handler
104
+ end
105
+
106
+ it 'calls set_error_file by default' do
107
+ @monitoring.add_error_message('dummy error')
108
+ expect(@monitoring).to receive(:set_error_file)
109
+ subject.exit_handler
110
+ end
111
+
112
+ it 'does not call set_error_file when in debug mode' do
113
+ @monitoring.add_error_message('dummy error')
114
+ expect(@monitoring).to_not receive(:set_error_file)
115
+ subject.options = { debug: true }
116
+ subject.exit_handler
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Adam Leff (<aleff@webmd.net>)
3
+ # Copyright:: Copyright (c) 2015 WebMD, LLC
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe CircActivator::Monitoring do
22
+ before(:each) do
23
+ @monitoring = CircActivator::Monitoring.new
24
+ end
25
+
26
+ it 'appends an error message' do
27
+ @monitoring.add_error_message('my error')
28
+ expect(@monitoring.error_messages).to eq(['my error'])
29
+ end
30
+
31
+ it 'errors? returns true when there are errors' do
32
+ @monitoring.add_error_message('my error')
33
+ expect(@monitoring.errors?).to eq(true)
34
+ end
35
+
36
+ it 'errors? returns false when there are no errors' do
37
+ expect(@monitoring.errors?).to eq(false)
38
+ end
39
+
40
+ it 'writes out an error file if there are error messages' do
41
+ expect(File).to receive(:write).with(CircActivator::Config.monitoring.error_file, 'my error')
42
+ subject.add_error_message('my error')
43
+ subject.set_error_file
44
+ end
45
+
46
+ it 'deletes the error file when there are no error messages' do
47
+ expect(FileUtils).to receive(:rm_f).with(CircActivator::Config.monitoring.error_file)
48
+ subject.set_error_file
49
+ end
50
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # Author:: Adam Leff (<aleff@webmd.net>)
3
+ # Copyright:: Copyright (c) 2015 WebMD, LLC
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'circactivator'
20
+ require 'webmock/rspec'
21
+
22
+ RSpec.configure do |config|
23
+ config.before(:each) do
24
+ CircActivator::Config.load_from_file(File.join(File.dirname(__FILE__), 'support', 'fixtures', 'config', 'config.yml'))
25
+ end
26
+
27
+ WebMock.disable_net_connect!(:allow_localhost => true)
28
+ end
29
+
30
+ def format_webmock_url(url)
31
+ 'https://api.circonus.com/v2' + url
32
+ end
33
+
34
+ def webmock_sample_file(filename)
35
+ File.join(File.dirname(__FILE__), 'support', 'webmock', filename)
36
+ end
@@ -0,0 +1,20 @@
1
+ log:
2
+ file: /Users/adam/tmp/circactivator.log
3
+ level: debug
4
+ count: 7
5
+
6
+ circonus:
7
+ base_url: https://api.circonus.com/v2
8
+ api_key: a12345
9
+ api_app_name: my_app
10
+
11
+ monitoring:
12
+ error_file: /Users/adam/tmp/circactivator.err
13
+
14
+ check_bundles:
15
+ iad1-prod:
16
+ 1: .*
17
+ 2: api-web
18
+ iad1-nonprod:
19
+ 3: .*
20
+ 4: .*
@@ -0,0 +1,126 @@
1
+ {
2
+ "_created": 1421167755,
3
+ "status": "active",
4
+ "target": "1.2.3.4",
5
+ "_checks": [
6
+ "/check/124"
7
+ ],
8
+ "timeout": 10,
9
+ "metrics": [
10
+ {
11
+ "status": "available",
12
+ "name": "vserver1:80`actsvcs",
13
+ "type": "numeric"
14
+ },
15
+ {
16
+ "status": "available",
17
+ "name": "vserver1:80`curclntconnections",
18
+ "type": "numeric"
19
+ },
20
+ {
21
+ "status": "available",
22
+ "name": "vserver1:80`cursrvrconnections",
23
+ "type": "numeric"
24
+ },
25
+ {
26
+ "status": "available",
27
+ "name": "vserver1:80`inactsvcs",
28
+ "type": "numeric"
29
+ },
30
+ {
31
+ "status": "available",
32
+ "name": "vserver1:80`totalrequestbytes",
33
+ "type": "numeric"
34
+ },
35
+ {
36
+ "status": "available",
37
+ "name": "vserver1:80`totalrequests",
38
+ "type": "numeric"
39
+ },
40
+ {
41
+ "status": "available",
42
+ "name": "vserver1:80`totalresponsebytes",
43
+ "type": "numeric"
44
+ },
45
+ {
46
+ "status": "available",
47
+ "name": "vserver1:80`totalresponses",
48
+ "type": "numeric"
49
+ },
50
+ {
51
+ "status": "available",
52
+ "name": "vserver1:80`tothits",
53
+ "type": "numeric"
54
+ },
55
+ {
56
+ "status": "available",
57
+ "name": "vserver1:80`vslbhealth",
58
+ "type": "numeric"
59
+ },
60
+ {
61
+ "status": "active",
62
+ "name": "vserver2:80`actsvcs",
63
+ "type": "numeric"
64
+ },
65
+ {
66
+ "status": "active",
67
+ "name": "vserver2:80`curclntconnections",
68
+ "type": "numeric"
69
+ },
70
+ {
71
+ "status": "active",
72
+ "name": "vserver2:80`cursrvrconnections",
73
+ "type": "numeric"
74
+ },
75
+ {
76
+ "status": "active",
77
+ "name": "vserver2:80`inactsvcs",
78
+ "type": "numeric"
79
+ },
80
+ {
81
+ "status": "active",
82
+ "name": "vserver2:80`totalrequestbytes",
83
+ "type": "numeric"
84
+ },
85
+ {
86
+ "status": "active",
87
+ "name": "vserver2:80`totalrequests",
88
+ "type": "numeric"
89
+ },
90
+ {
91
+ "status": "active",
92
+ "name": "vserver2:80`totalresponsebytes",
93
+ "type": "numeric"
94
+ },
95
+ {
96
+ "status": "active",
97
+ "name": "vserver2:80`totalresponses",
98
+ "type": "numeric"
99
+ },
100
+ {
101
+ "status": "active",
102
+ "name": "vserver2:80`tothits",
103
+ "type": "numeric"
104
+ },
105
+ {
106
+ "status": "active",
107
+ "name": "vserver2:80`vslbhealth",
108
+ "type": "numeric"
109
+ }
110
+ ],
111
+ "_last_modified": 1429111510,
112
+ "brokers": [
113
+ "/broker/5"
114
+ ],
115
+ "_last_modified_by": "/user/10",
116
+ "period": 60,
117
+ "_cid": "/check_bundle/123",
118
+ "display_name": "Netscaler - LB Vservers",
119
+ "tags": [],
120
+ "notes": null,
121
+ "config": {
122
+ "url": "http://some.url.here.com",
123
+ "port": "80"
124
+ },
125
+ "type": "json"
126
+ }
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: circactivator
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Leff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.13.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.13.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: mixlib-log
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: settingslogic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.9
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.9
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.19.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.19.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.21'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.21'
125
+ description: Program to update Circonus check bundles to activate metrics for collection.
126
+ email:
127
+ - aleff@webmd.net
128
+ executables:
129
+ - circactivator
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.md
138
+ - bin/circactivator
139
+ - circactivator.gemspec
140
+ - lib/circactivator.rb
141
+ - lib/circactivator/checkupdater.rb
142
+ - lib/circactivator/cli.rb
143
+ - lib/circactivator/log.rb
144
+ - lib/circactivator/monitoring.rb
145
+ - lib/circactivator/version.rb
146
+ - spec/checkupdater_spec.rb
147
+ - spec/cli_spec.rb
148
+ - spec/monitoring_spec.rb
149
+ - spec/spec_helper.rb
150
+ - spec/support/fixtures/config/config.yml
151
+ - spec/support/webmock/lbvserver_check_bundle.json
152
+ homepage:
153
+ licenses:
154
+ - Apache 2.0
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 2.1.2
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.4.2
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Program to update Circonus check bundles to activate metrics for collection.
176
+ test_files:
177
+ - spec/checkupdater_spec.rb
178
+ - spec/cli_spec.rb
179
+ - spec/monitoring_spec.rb
180
+ - spec/spec_helper.rb
181
+ - spec/support/fixtures/config/config.yml
182
+ - spec/support/webmock/lbvserver_check_bundle.json
183
+ has_rdoc: