hq-sms-global-balance-check 0.0.0
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.
- data/features/basic.feature +65 -0
- data/features/support/env.rb +0 -0
- data/features/support/steps.rb +48 -0
- data/features/support/temp-dir.rb +16 -0
- data/features/support/web-server.rb +40 -0
- data/lib/hq/sms-global/balance-check/script.rb +125 -0
- metadata +200 -0
@@ -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,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
|