nagios-splunk 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/nagios/splunk.rb +3 -0
- data/lib/nagios/splunk/check.rb +92 -18
- data/lib/nagios/splunk/cli.rb +23 -3
- data/lib/nagios/splunk/exception.rb +12 -0
- data/nagios-splunk.gemspec +1 -1
- metadata +5 -4
data/lib/nagios/splunk.rb
CHANGED
@@ -11,6 +11,9 @@ module Nagios
|
|
11
11
|
autoload :Check, "nagios/splunk/check"
|
12
12
|
autoload :RestClient, "nagios/splunk/rest_client"
|
13
13
|
autoload :CLI, "nagios/splunk/cli"
|
14
|
+
autoload :Exception, "nagios/splunk/exception"
|
15
|
+
autoload :NoPoolsFound, "nagios/splunk/exception"
|
16
|
+
autoload :NoLicensesFound, "nagios/splunk/exception"
|
14
17
|
|
15
18
|
end
|
16
19
|
end
|
data/lib/nagios/splunk/check.rb
CHANGED
@@ -15,43 +15,117 @@ module Nagios
|
|
15
15
|
@rest_client = client
|
16
16
|
end
|
17
17
|
|
18
|
+
# pool usage check
|
19
|
+
# @param [String] name of the pool
|
20
|
+
# @param [Integer] warn license usage threshhold
|
21
|
+
# @param [Integer] crit license usage threshhold
|
22
|
+
# @param [String] stack_id which pool is assigned to
|
23
|
+
# @return [Array<Integer, String>] exit code and message
|
24
|
+
def pool_usage(name, warn, crit)
|
25
|
+
quota = pool_quota(name)
|
26
|
+
used_quota = find_pool_by_name(name)["used_bytes"].to_i
|
27
|
+
|
28
|
+
code = check_threshold(used_quota, quota, warn, crit)
|
29
|
+
|
30
|
+
message = "License pool '#{name}' #{STATUS[code]}: #{used_quota * 100 / quota}% of license pool capacity is used"
|
31
|
+
message << " | quota: #{quota} B; used: #{used_quota} B"
|
32
|
+
return [code, message]
|
33
|
+
end
|
34
|
+
|
18
35
|
# license usage check
|
19
36
|
# @param [Integer] warn license usage threshhold
|
20
37
|
# @param [Integer] crit license usage threshhold
|
38
|
+
# @param [String] stack_id
|
21
39
|
# @return [Array<Integer, String>] exit code and message
|
22
|
-
def license_usage(warn, crit)
|
23
|
-
quota =
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
when used_quota > quota * crit.to_i / 100:
|
29
|
-
code = 2
|
30
|
-
when used_quota > quota * warn.to_i / 100:
|
31
|
-
code = 1
|
32
|
-
else
|
33
|
-
code = 0
|
34
|
-
end
|
40
|
+
def license_usage(warn, crit, stack_id = "enterprise")
|
41
|
+
quota = license_quota(stack_id)
|
42
|
+
used_quota = pools_in_stack_usage(stack_id)
|
43
|
+
|
44
|
+
code = check_threshold(used_quota, quota, warn, crit)
|
45
|
+
|
35
46
|
message = "License #{STATUS[code]}: #{used_quota * 100 / quota}% of license capacity is used"
|
36
47
|
message << " | quota: #{quota} B; used: #{used_quota} B"
|
37
48
|
return [code, message]
|
38
49
|
end
|
39
50
|
|
51
|
+
private
|
52
|
+
|
53
|
+
# Compare usage and quota with threshold
|
54
|
+
# @param [Integer] usage
|
55
|
+
# @param [Integer] quota
|
56
|
+
# @param [Integer] warn
|
57
|
+
# @param [Integer] crit
|
58
|
+
# @return [Integer] exit code
|
59
|
+
def check_threshold(usage, quota, warn, crit)
|
60
|
+
case true
|
61
|
+
when usage > quota * crit.to_i / 100:
|
62
|
+
return 2
|
63
|
+
when usage > quota * warn.to_i / 100:
|
64
|
+
return 1
|
65
|
+
else
|
66
|
+
return 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Find out pool quota
|
71
|
+
# @param [String] name of the pool
|
72
|
+
# @return [Integer] quota number of bytes
|
73
|
+
def pool_quota(name)
|
74
|
+
pool = find_pool_by_name(name)
|
75
|
+
# get license quota if it is not limited
|
76
|
+
pool["quota"] == "MAX" ? license_quota(pool["stack_id"]) : pool["quota"].to_i
|
77
|
+
end
|
78
|
+
|
79
|
+
# Find out license quota
|
80
|
+
# @param [String] stack_id licesne stack
|
81
|
+
# @return [Integer] license stack quota in bytes
|
82
|
+
def license_quota(stack_id)
|
83
|
+
find_licenses(stack_id).reduce(0) { |r,l| r+=l[1]["quota"].to_i }
|
84
|
+
end
|
85
|
+
|
86
|
+
# Find out pool(s) license usage
|
87
|
+
# @param [String] stack_id which pools are assigned to
|
88
|
+
# @retunr [Integer] number of bytes used by pool(s)
|
89
|
+
def pools_in_stack_usage(stack_id)
|
90
|
+
pools = find_pools(stack_id)
|
91
|
+
pools.reduce(0) {|r,p| r+=p[1]["used_bytes"].to_i }
|
92
|
+
end
|
93
|
+
|
40
94
|
# list of avialable licenses
|
95
|
+
# @param [String] stack_id
|
41
96
|
# @return [Array<Hash>]
|
42
|
-
def
|
97
|
+
def find_licenses(stack_id)
|
43
98
|
response = rest_client.get(LICENSE_LIST_URL)
|
44
|
-
response.code == "200" ? parse_data(response.body) : {}
|
99
|
+
result = response.code == "200" ? parse_data(response.body) : {}
|
100
|
+
# find all VALID licenses by stack_id
|
101
|
+
result.reject! {|k,v| v["stack_id"] != stack_id || v["status"] != "VALID" }
|
102
|
+
raise NoLicensesFound.new("No licenses are found in stack '#{stack_id}'") if result.empty?
|
103
|
+
result
|
45
104
|
end
|
46
105
|
|
47
106
|
# list of available pools
|
107
|
+
# @param [String] stack_id
|
48
108
|
# @return [Array<Hash>]
|
49
|
-
def
|
109
|
+
def find_pools(stack_id = nil)
|
50
110
|
response = rest_client.get(POOL_LIST_URL)
|
51
|
-
response.code == "200" ? parse_data(response.body) : {}
|
111
|
+
result = response.code == "200" ? parse_data(response.body) : {}
|
112
|
+
# find all license pools by stack_id
|
113
|
+
result.reject! {|k,v| v["stack_id"] != stack_id } unless stack_id.nil?
|
114
|
+
raise NoPoolsFound.new("No pools are found in stack '#{stack_id}'") if result.empty?
|
115
|
+
result
|
52
116
|
end
|
53
117
|
|
54
|
-
|
118
|
+
# Find pool by name
|
119
|
+
# param [String] name of the pool
|
120
|
+
# param [String] stack_id which pool is assigned to
|
121
|
+
# @return [Hash] pool
|
122
|
+
def find_pool_by_name(name)
|
123
|
+
pools = find_pools
|
124
|
+
result = pools.find { |k,v| k == name } # => ["pool-name", { "param1" => "value1" }]
|
125
|
+
raise NoPoolsFound.new("No pool named '#{name}' is found") if result.nil?
|
126
|
+
# return hash of parameters for the pool
|
127
|
+
result[1]
|
128
|
+
end
|
55
129
|
|
56
130
|
def parse_data(data)
|
57
131
|
doc = Nokogiri::Slop(data)
|
data/lib/nagios/splunk/cli.rb
CHANGED
@@ -7,8 +7,8 @@ module Nagios
|
|
7
7
|
include Mixlib::CLI
|
8
8
|
|
9
9
|
option(:server_url,
|
10
|
-
:short => "-
|
11
|
-
:long => "--server URL",
|
10
|
+
:short => "-u URL",
|
11
|
+
:long => "--server-url URL",
|
12
12
|
:required => true,
|
13
13
|
:description => "Splunk server url",
|
14
14
|
:on => :head)
|
@@ -25,13 +25,33 @@ module Nagios
|
|
25
25
|
:default => '90',
|
26
26
|
:description => "Critical % of license capacity usage (default: 90)")
|
27
27
|
|
28
|
+
option(:pool,
|
29
|
+
:short => "-p POOL",
|
30
|
+
:long => "--pool-name POOL",
|
31
|
+
:description => "Pool name wich usage is being checked.")
|
32
|
+
|
33
|
+
option(:stack_id,
|
34
|
+
:short => "-s STACK_ID",
|
35
|
+
:long => "--stack-id STACK_ID",
|
36
|
+
:default => 'enterprise',
|
37
|
+
:description => "License Stack ID.")
|
38
|
+
|
28
39
|
def run(argv = ARGV)
|
29
40
|
parse_options(argv)
|
30
41
|
|
31
42
|
client = RestClient.new(config[:server_url])
|
32
43
|
splunk = Check.new(client)
|
33
44
|
|
34
|
-
|
45
|
+
begin
|
46
|
+
if config[:pool]
|
47
|
+
status, message = splunk.pool_usage(config[:pool], config[:warn], config[:crit])
|
48
|
+
else
|
49
|
+
status, message = splunk.license_usage(config[:warn], config[:crit], config[:stack_id])
|
50
|
+
end
|
51
|
+
rescue Nagios::Splunk::Exception => e
|
52
|
+
message = e.message
|
53
|
+
status = 3
|
54
|
+
end
|
35
55
|
|
36
56
|
puts message
|
37
57
|
status
|
data/nagios-splunk.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nagios-splunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Max Horbul
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-07-19 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: nokogiri
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- bin/check_splunk
|
87
87
|
- lib/nagios/splunk/check.rb
|
88
88
|
- lib/nagios/splunk/cli.rb
|
89
|
+
- lib/nagios/splunk/exception.rb
|
89
90
|
- lib/nagios/splunk/rest_client.rb
|
90
91
|
- lib/nagios/splunk.rb
|
91
92
|
- test/test_helper.rb
|