hq-sms-global-balance-check 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,65 @@
1
+ Feature: Basic functionality
2
+
3
+ Background:
4
+
5
+ Given a file "default.config":
6
+ """
7
+ <hq-sms-global-balance-check-config>
8
+ <server url="${server-url}"/>
9
+ <account name="account" username="USER" password="PASS"/>
10
+ </hq-sms-global-balance-check-config>
11
+ """
12
+
13
+ Scenario: Balance ok
14
+
15
+ Given that the balance is 750
16
+
17
+ When I run the script with args:
18
+ """
19
+ --config default.config
20
+ --account account
21
+ --warning 500
22
+ --critical 100
23
+ """
24
+
25
+ Then the status should be 0
26
+ And the output should be:
27
+ """
28
+ SMS Global account OK: 750 credits
29
+ """
30
+
31
+ Scenario: Balance warning
32
+
33
+ Given that the balance is 250
34
+
35
+ When I run the script with args:
36
+ """
37
+ --config default.config
38
+ --account account
39
+ --warning 500
40
+ --critical 100
41
+ """
42
+
43
+ Then the status should be 1
44
+ And the output should be:
45
+ """
46
+ SMS Global account WARNING: 250 credits (warning is 500)
47
+ """
48
+
49
+ Scenario: Balance critical
50
+
51
+ Given that the balance is 50
52
+
53
+ When I run the script with args:
54
+ """
55
+ --config default.config
56
+ --account account
57
+ --warning 500
58
+ --critical 100
59
+ """
60
+
61
+ Then the status should be 2
62
+ And the output should be:
63
+ """
64
+ SMS Global account CRITICAL: 50 credits (critical is 100)
65
+ """
File without changes
@@ -0,0 +1,48 @@
1
+ require "shellwords"
2
+
3
+ require "hq/sms-global/balance-check/script"
4
+
5
+ Given /^a file "(.*?)":$/ do
6
+ |file_name, file_contents|
7
+
8
+ File.open file_name, "w" do
9
+ |file_io|
10
+
11
+ file_contents =
12
+ file_contents.gsub "${server-url}", $web_url
13
+
14
+ file_io.write file_contents
15
+
16
+ end
17
+
18
+ end
19
+
20
+ Given /^that the balance is (\d+)$/ do
21
+ |balance_str|
22
+
23
+ $balance = balance_str.to_f
24
+
25
+ end
26
+
27
+ When /^I run the script with args:$/ do
28
+ |args_str|
29
+
30
+ @script = HQ::SmsGlobal::BalanceCheck::Script.new
31
+ @script.args = Shellwords.split args_str
32
+
33
+ @script.stdout = StringIO.new
34
+ @script.stderr = StringIO.new
35
+
36
+ @script.main
37
+
38
+ end
39
+
40
+ Then /^the status should be (\d+)$/ do
41
+ |status_str|
42
+ @script.status.should == status_str.to_i
43
+ end
44
+
45
+ Then /^the output should be:$/ do
46
+ |expected_output|
47
+ @script.stdout.string.strip.should == expected_output
48
+ end
@@ -0,0 +1,16 @@
1
+ require "tmpdir"
2
+
3
+ Before do
4
+
5
+ @old_dir = Dir.pwd
6
+ @temp_dir = Dir.mktmpdir
7
+ Dir.chdir @temp_dir
8
+
9
+ end
10
+
11
+ After do
12
+
13
+ FileUtils.remove_entry_secure @temp_dir
14
+ Dir.chdir @old_dir
15
+
16
+ end
@@ -0,0 +1,40 @@
1
+ require "webrick"
2
+
3
+ $web_config = {
4
+ :Port => 0,
5
+ :AccessLog => [],
6
+ :Logger => WEBrick::Log::new("/dev/null", 7),
7
+ :DoNotReverseLookup => true,
8
+ }
9
+
10
+ $web_server =
11
+ WEBrick::HTTPServer.new \
12
+ $web_config
13
+
14
+ $web_port =
15
+ $web_server.listeners[0].local_address.ip_port
16
+
17
+ $web_url =
18
+ "http://localhost:#{$web_port}"
19
+
20
+ Thread.new do
21
+ $web_server.start
22
+ end
23
+
24
+ at_exit do
25
+ $web_server.shutdown
26
+ end
27
+
28
+ $web_server.mount_proc "/balance-api.php" do
29
+ |request, response|
30
+
31
+ request.query["user"].should == "USER"
32
+ request.query["password"].should == "PASS"
33
+
34
+ response.body = "BALANCE: #{$balance}; USER: USER"
35
+
36
+ end
37
+
38
+ Before do
39
+ $balance = 0.0
40
+ end
@@ -0,0 +1,125 @@
1
+ require "hq/tools/check-script"
2
+ require "hq/tools/escape"
3
+ require "hq/tools/getopt"
4
+
5
+ require "net/http"
6
+
7
+ require "xml"
8
+
9
+ module HQ
10
+ module SmsGlobal
11
+ module BalanceCheck
12
+
13
+ class Script < Tools::CheckScript
14
+
15
+ include Tools::Escape
16
+
17
+ def process_args
18
+
19
+ @opts, @args =
20
+ Tools::Getopt.process @args, [
21
+
22
+ { :name => :config,
23
+ :required => true },
24
+
25
+ { :name => :account,
26
+ :required => true },
27
+
28
+ { :name => :warning,
29
+ :convert => :to_f,
30
+ :required => true },
31
+
32
+ { :name => :critical,
33
+ :convert => :to_f,
34
+ :required => true },
35
+
36
+ ]
37
+
38
+ raise "Extra args" unless @args.empty?
39
+
40
+ @name = "SMS Global #{@opts[:account]}"
41
+
42
+ end
43
+
44
+ def prepare
45
+
46
+ load_config
47
+
48
+ end
49
+
50
+ def load_config
51
+
52
+ config_doc =
53
+ XML::Document.file @opts[:config]
54
+
55
+ @config_elem =
56
+ config_doc.root
57
+
58
+ @server_elem =
59
+ @config_elem.find_first "server"
60
+
61
+ @account_elem =
62
+ @config_elem.find_first "account [
63
+ @name = #{esc_xp @opts[:account]}
64
+ ]"
65
+
66
+ end
67
+
68
+ def perform_checks
69
+
70
+ url =
71
+ URI.parse "#{@server_elem["url"]}/balance-api.php"
72
+
73
+ url.query =
74
+ URI.encode_www_form({
75
+ "user" => @account_elem["username"],
76
+ "password" => @account_elem["password"],
77
+ })
78
+
79
+ Net::HTTP.start url.host, url.port do
80
+ |http|
81
+
82
+
83
+ request = Net::HTTP::Get.new "#{url.path}?#{url.query}"
84
+
85
+ response = http.request request
86
+
87
+ raise "Error 1" \
88
+ unless response.code == "200"
89
+
90
+ raise "Error 2" \
91
+ unless response.body =~ /^BALANCE: ([^;]+); USER: (.+)$/
92
+
93
+ actual_balance = $1.to_f
94
+
95
+ if actual_balance < @opts[:critical]
96
+
97
+ critical "%s credits (critical is %s)" % [
98
+ actual_balance.to_i,
99
+ @opts[:critical].to_i,
100
+ ]
101
+
102
+ elsif actual_balance < @opts[:warning]
103
+
104
+ warning "%s credits (warning is %s)" % [
105
+ actual_balance.to_i,
106
+ @opts[:warning].to_i,
107
+ ]
108
+
109
+ else
110
+
111
+ message "%s credits" % [
112
+ actual_balance.to_i,
113
+ ]
114
+
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+ end
125
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hq-sms-global-balance-check
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Pharaoh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hq-tools
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: libxml-ruby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.6.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.6.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: cucumber
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.1
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: hq-dev
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.2
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.0.2
78
+ - !ruby/object:Gem::Dependency
79
+ name: json
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.7.7
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.7.7
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 10.0.4
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 10.0.4
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 2.13.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 2.13.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec_junit_formatter
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 0.1.6
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: 0.1.6
142
+ - !ruby/object:Gem::Dependency
143
+ name: simplecov
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: 0.7.1
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: 0.7.1
158
+ description: HQ nagios/icinga plugin to check balance of SMS global account
159
+ email:
160
+ - james@phsys.co.uk
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - lib/hq/sms-global/balance-check/script.rb
166
+ - features/basic.feature
167
+ - features/support/temp-dir.rb
168
+ - features/support/steps.rb
169
+ - features/support/env.rb
170
+ - features/support/web-server.rb
171
+ homepage: https://github.com/jamespharaoh/hq-sms-global-balance-check
172
+ licenses: []
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: 1.3.6
189
+ requirements: []
190
+ rubyforge_project: hq-sms-global-balance-check
191
+ rubygems_version: 1.8.23
192
+ signing_key:
193
+ specification_version: 3
194
+ summary: HQ SMS Global balance check
195
+ test_files:
196
+ - features/basic.feature
197
+ - features/support/temp-dir.rb
198
+ - features/support/steps.rb
199
+ - features/support/env.rb
200
+ - features/support/web-server.rb