icinga2 0.9.0.1 → 0.9.2.1
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 +4 -4
- data/README.md +51 -45
- data/doc/hosts.md +62 -21
- data/doc/services.md +215 -54
- data/doc/statistics.md +28 -10
- data/doc/usergroups.md +49 -11
- data/doc/users.md +64 -13
- data/examples/_blank.rb +72 -0
- data/examples/downtimes.rb +79 -0
- data/examples/hostgroups.rb +91 -0
- data/examples/hosts.rb +180 -0
- data/examples/informations.rb +95 -0
- data/examples/notifications.rb +109 -0
- data/examples/servicegroups.rb +102 -0
- data/examples/services.rb +202 -0
- data/examples/statistics.rb +137 -0
- data/examples/test.rb +32 -377
- data/examples/usergroups.rb +95 -0
- data/examples/users.rb +98 -0
- data/lib/icinga2.rb +4 -394
- data/lib/icinga2/client.rb +431 -0
- data/lib/icinga2/downtimes.rb +40 -20
- data/lib/icinga2/hostgroups.rb +38 -22
- data/lib/icinga2/hosts.rb +308 -92
- data/lib/icinga2/network.rb +211 -213
- data/lib/icinga2/notifications.rb +30 -28
- data/lib/icinga2/servicegroups.rb +43 -24
- data/lib/icinga2/services.rb +218 -130
- data/lib/icinga2/statistics.rb +14 -10
- data/lib/icinga2/tools.rb +1 -1
- data/lib/icinga2/usergroups.rb +12 -15
- data/lib/icinga2/users.rb +16 -17
- data/lib/icinga2/version.rb +1 -15
- data/lib/monkey_patches.rb +89 -0
- metadata +21 -8
@@ -0,0 +1,95 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# 07.10.2017 - Bodo Schulz
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Examples for Hostgroups
|
8
|
+
|
9
|
+
# -----------------------------------------------------------------------------
|
10
|
+
|
11
|
+
require_relative '../lib/icinga2'
|
12
|
+
|
13
|
+
# -----------------------------------------------------------------------------
|
14
|
+
|
15
|
+
icinga_host = ENV.fetch( 'ICINGA_HOST' , 'icinga2' )
|
16
|
+
icinga_api_port = ENV.fetch( 'ICINGA_API_PORT' , 5665 )
|
17
|
+
icinga_api_user = ENV.fetch( 'ICINGA_API_USER' , 'admin' )
|
18
|
+
icinga_api_pass = ENV.fetch( 'ICINGA_API_PASSWORD' , nil )
|
19
|
+
icinga_api_pki_path = ENV.fetch( 'ICINGA_API_PKI_PATH' , '/etc/icinga2' )
|
20
|
+
icinga_api_node_name = ENV.fetch( 'ICINGA_API_NODE_NAME' , nil )
|
21
|
+
icinga_cluster = ENV.fetch( 'ICINGA_CLUSTER' , false )
|
22
|
+
icinga_satellite = ENV.fetch( 'ICINGA_CLUSTER_SATELLITE', nil )
|
23
|
+
|
24
|
+
|
25
|
+
# convert string to bool
|
26
|
+
icinga_cluster = icinga_cluster.to_s.eql?('true') ? true : false
|
27
|
+
|
28
|
+
config = {
|
29
|
+
icinga: {
|
30
|
+
host: icinga_host,
|
31
|
+
api: {
|
32
|
+
port: icinga_api_port,
|
33
|
+
user: icinga_api_user,
|
34
|
+
password: icinga_api_pass,
|
35
|
+
pki_path: icinga_api_pki_path,
|
36
|
+
node_name: icinga_api_node_name
|
37
|
+
},
|
38
|
+
cluster: icinga_cluster,
|
39
|
+
satellite: icinga_satellite
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
# ---------------------------------------------------------------------------------------
|
44
|
+
|
45
|
+
i = Icinga2::Client.new( config )
|
46
|
+
|
47
|
+
unless( i.nil? )
|
48
|
+
|
49
|
+
# run tests ...
|
50
|
+
#
|
51
|
+
#
|
52
|
+
|
53
|
+
begin
|
54
|
+
|
55
|
+
puts ' ------------------------------------------------------------- '
|
56
|
+
puts ''
|
57
|
+
|
58
|
+
puts ' ==> USERGROUPS'
|
59
|
+
puts ''
|
60
|
+
|
61
|
+
['icingaadmins', 'linux-admins'].each do |h|
|
62
|
+
e = i.exists_usergroup?( h ) ? 'true' : 'false'
|
63
|
+
puts format( '= check if Usergroup \'%s\' exists : %s', h, e )
|
64
|
+
end
|
65
|
+
puts ''
|
66
|
+
|
67
|
+
puts '= add Usergroup \'foo\''
|
68
|
+
puts i.add_usergroup( user_group: 'foo', display_name: 'FOO' )
|
69
|
+
puts ''
|
70
|
+
|
71
|
+
puts 'list named Usergroup \'foo\''
|
72
|
+
puts i.usergroups( user_group: 'foo' )
|
73
|
+
puts ''
|
74
|
+
|
75
|
+
puts '= delete Usergroup \'foo\''
|
76
|
+
puts i.delete_usergroup( user_group: 'foo' )
|
77
|
+
puts ''
|
78
|
+
|
79
|
+
|
80
|
+
puts 'list all Usergroup'
|
81
|
+
puts i.usergroups
|
82
|
+
puts ''
|
83
|
+
puts ' ------------------------------------------------------------- '
|
84
|
+
puts ''
|
85
|
+
|
86
|
+
rescue => e
|
87
|
+
$stderr.puts( e )
|
88
|
+
$stderr.puts( e.backtrace.join("\n") )
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
# -----------------------------------------------------------------------------
|
94
|
+
|
95
|
+
# EOF
|
data/examples/users.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# 07.10.2017 - Bodo Schulz
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Examples for Hostgroups
|
8
|
+
|
9
|
+
# -----------------------------------------------------------------------------
|
10
|
+
|
11
|
+
require_relative '../lib/icinga2'
|
12
|
+
|
13
|
+
# -----------------------------------------------------------------------------
|
14
|
+
|
15
|
+
icinga_host = ENV.fetch( 'ICINGA_HOST' , 'icinga2' )
|
16
|
+
icinga_api_port = ENV.fetch( 'ICINGA_API_PORT' , 5665 )
|
17
|
+
icinga_api_user = ENV.fetch( 'ICINGA_API_USER' , 'admin' )
|
18
|
+
icinga_api_pass = ENV.fetch( 'ICINGA_API_PASSWORD' , nil )
|
19
|
+
icinga_api_pki_path = ENV.fetch( 'ICINGA_API_PKI_PATH' , '/etc/icinga2' )
|
20
|
+
icinga_api_node_name = ENV.fetch( 'ICINGA_API_NODE_NAME' , nil )
|
21
|
+
icinga_cluster = ENV.fetch( 'ICINGA_CLUSTER' , false )
|
22
|
+
icinga_satellite = ENV.fetch( 'ICINGA_CLUSTER_SATELLITE', nil )
|
23
|
+
|
24
|
+
|
25
|
+
# convert string to bool
|
26
|
+
icinga_cluster = icinga_cluster.to_s.eql?('true') ? true : false
|
27
|
+
|
28
|
+
config = {
|
29
|
+
icinga: {
|
30
|
+
host: icinga_host,
|
31
|
+
api: {
|
32
|
+
port: icinga_api_port,
|
33
|
+
user: icinga_api_user,
|
34
|
+
password: icinga_api_pass,
|
35
|
+
pki_path: icinga_api_pki_path,
|
36
|
+
node_name: icinga_api_node_name
|
37
|
+
},
|
38
|
+
cluster: icinga_cluster,
|
39
|
+
satellite: icinga_satellite
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
# ---------------------------------------------------------------------------------------
|
44
|
+
|
45
|
+
i = Icinga2::Client.new( config )
|
46
|
+
|
47
|
+
unless( i.nil? )
|
48
|
+
|
49
|
+
# run tests ...
|
50
|
+
#
|
51
|
+
#
|
52
|
+
|
53
|
+
begin
|
54
|
+
|
55
|
+
puts ' ------------------------------------------------------------- '
|
56
|
+
puts ''
|
57
|
+
|
58
|
+
puts ' ==> USERS'
|
59
|
+
puts ''
|
60
|
+
|
61
|
+
['icingaadmin', 'icinga-admin'].each do |h|
|
62
|
+
e = i.exists_user?( h ) ? 'true' : 'false'
|
63
|
+
puts format( '= check if User \'%s\' exists : %s', h, e )
|
64
|
+
end
|
65
|
+
puts ''
|
66
|
+
|
67
|
+
puts '= add User \'foo\''
|
68
|
+
puts i.add_user( user_name: 'foo', display_name: 'FOO', email: 'foo@bar.com', pager: '0000', groups: ['icingaadmins'] )
|
69
|
+
puts ''
|
70
|
+
puts '= add User \'foo\' (again)'
|
71
|
+
puts i.add_user( user_name: 'foo', display_name: 'FOO', email: 'foo@bar.com', pager: '0000', groups: ['icingaadmins'] )
|
72
|
+
puts ''
|
73
|
+
|
74
|
+
puts '= list named User \'foo\''
|
75
|
+
puts i.users( user_name: 'foo' )
|
76
|
+
puts ''
|
77
|
+
|
78
|
+
puts '= delete User \'foo\''
|
79
|
+
puts i.delete_user( user_name: 'foo' )
|
80
|
+
puts ''
|
81
|
+
|
82
|
+
puts '= list all User'
|
83
|
+
puts i.users
|
84
|
+
puts ''
|
85
|
+
|
86
|
+
puts ' ------------------------------------------------------------- '
|
87
|
+
puts ''
|
88
|
+
|
89
|
+
rescue => e
|
90
|
+
$stderr.puts( e )
|
91
|
+
$stderr.puts( e.backtrace.join("\n") )
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# -----------------------------------------------------------------------------
|
97
|
+
|
98
|
+
# EOF
|
data/lib/icinga2.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'ruby_dig' if RUBY_VERSION < '2.3'
|
4
|
+
|
3
5
|
require 'rest-client'
|
4
6
|
require 'openssl'
|
5
7
|
|
@@ -8,400 +10,8 @@ require 'net/http'
|
|
8
10
|
require 'uri'
|
9
11
|
|
10
12
|
require_relative 'logging'
|
11
|
-
require_relative '
|
12
|
-
require_relative 'icinga2/
|
13
|
-
require_relative 'icinga2/statistics'
|
14
|
-
require_relative 'icinga2/converts'
|
15
|
-
require_relative 'icinga2/tools'
|
16
|
-
require_relative 'icinga2/downtimes'
|
17
|
-
require_relative 'icinga2/notifications'
|
18
|
-
require_relative 'icinga2/hosts'
|
19
|
-
require_relative 'icinga2/hostgroups'
|
20
|
-
require_relative 'icinga2/services'
|
21
|
-
require_relative 'icinga2/servicegroups'
|
22
|
-
require_relative 'icinga2/users'
|
23
|
-
require_relative 'icinga2/usergroups'
|
13
|
+
require_relative 'monkey_patches'
|
14
|
+
require_relative 'icinga2/client'
|
24
15
|
|
25
|
-
# -------------------------------------------------------------------------------------------------------------------
|
26
|
-
#
|
27
|
-
# @abstract # Namespace for classes and modules that handle all Icinga2 API calls
|
28
|
-
#
|
29
|
-
# @author Bodo Schulz <bodo@boone-schulz.de>
|
30
|
-
#
|
31
|
-
#
|
32
16
|
module Icinga2
|
33
|
-
|
34
|
-
# static variable for hosts down
|
35
|
-
HOSTS_DOWN = 1
|
36
|
-
# static variable for hosts critical
|
37
|
-
HOSTS_CRITICAL = 2
|
38
|
-
# static variable for hosts unknown
|
39
|
-
HOSTS_UNKNOWN = 3
|
40
|
-
|
41
|
-
# static variables for handled warning
|
42
|
-
SERVICE_STATE_WARNING = 1
|
43
|
-
# static variables for handled critical
|
44
|
-
SERVICE_STATE_CRITICAL = 2
|
45
|
-
# static variables for handled unknown
|
46
|
-
SERVICE_STATE_UNKNOWN = 3
|
47
|
-
|
48
|
-
# Abstract base class for the API calls.
|
49
|
-
# Provides some helper methods
|
50
|
-
#
|
51
|
-
# @author Bodo Schulz
|
52
|
-
#
|
53
|
-
class Client
|
54
|
-
|
55
|
-
include Logging
|
56
|
-
|
57
|
-
include Icinga2::Version
|
58
|
-
include Icinga2::Network
|
59
|
-
include Icinga2::Statistics
|
60
|
-
include Icinga2::Converts
|
61
|
-
include Icinga2::Tools
|
62
|
-
include Icinga2::Downtimes
|
63
|
-
include Icinga2::Notifications
|
64
|
-
include Icinga2::Hosts
|
65
|
-
include Icinga2::Hostgroups
|
66
|
-
include Icinga2::Services
|
67
|
-
include Icinga2::Servicegroups
|
68
|
-
include Icinga2::Users
|
69
|
-
include Icinga2::Usergroups
|
70
|
-
|
71
|
-
# Returns a new instance of Client
|
72
|
-
#
|
73
|
-
# @param [Hash, #read] settings the settings for Icinga2
|
74
|
-
# @option settings [String] :host ('localhost') the Icinga2 Hostname
|
75
|
-
# @option settings [Integer] :port (5665) the Icinga2 API Port
|
76
|
-
# @option settings [String] :user the Icinga2 API User
|
77
|
-
# @option settings [String] :password the Icinga2 API Password
|
78
|
-
# @option settings [Integer] :version (1) the Icinga2 API Version
|
79
|
-
# @option settings [Bool] :cluster Icinga2 Cluster Mode
|
80
|
-
# @option settings [Bool] :notifications (false) enable Icinga2 Host Notifications
|
81
|
-
#
|
82
|
-
# @example to create an new Instance
|
83
|
-
# config = {
|
84
|
-
# icinga: {
|
85
|
-
# host: '192.168.33.5',
|
86
|
-
# api: {
|
87
|
-
# port: 5665,
|
88
|
-
# user: 'root',
|
89
|
-
# password: 'icinga',
|
90
|
-
# version: 1
|
91
|
-
# },
|
92
|
-
# cluster: false,
|
93
|
-
# satellite: true
|
94
|
-
# }
|
95
|
-
# }
|
96
|
-
#
|
97
|
-
# @icinga = Icinga2::Client.new(config)
|
98
|
-
#
|
99
|
-
# @return [instance, #read]
|
100
|
-
#
|
101
|
-
def initialize( settings )
|
102
|
-
|
103
|
-
raise ArgumentError.new('only Hash are allowed') unless( settings.is_a?(Hash) )
|
104
|
-
raise ArgumentError.new('missing settings') if( settings.size.zero? )
|
105
|
-
|
106
|
-
icinga_host = settings.dig(:icinga, :host) || 'localhost'
|
107
|
-
icinga_api_port = settings.dig(:icinga, :api, :port) || 5665
|
108
|
-
icinga_api_user = settings.dig(:icinga, :api, :user)
|
109
|
-
icinga_api_pass = settings.dig(:icinga, :api, :password)
|
110
|
-
icinga_api_version = settings.dig(:icinga, :api, :version) || 1
|
111
|
-
icinga_api_pki_path = settings.dig(:icinga, :api, :pki_path)
|
112
|
-
icinga_api_node_name = settings.dig(:icinga, :api, :node_name)
|
113
|
-
@icinga_cluster = settings.dig(:icinga, :cluster) || false
|
114
|
-
@icinga_satellite = settings.dig(:icinga, :satellite)
|
115
|
-
@icinga_notifications = settings.dig(:icinga, :notifications) || false
|
116
|
-
|
117
|
-
@icinga_api_url_base = format( 'https://%s:%d/v%s', icinga_host, icinga_api_port, icinga_api_version )
|
118
|
-
|
119
|
-
_has_cert, @options = cert?(
|
120
|
-
pki_path: icinga_api_pki_path,
|
121
|
-
node_name: icinga_api_node_name,
|
122
|
-
user: icinga_api_user,
|
123
|
-
password: icinga_api_pass
|
124
|
-
)
|
125
|
-
|
126
|
-
@headers = { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
|
127
|
-
|
128
|
-
self
|
129
|
-
end
|
130
|
-
|
131
|
-
# create a HTTP Header based on a Icinga2 Certificate or an User API Login
|
132
|
-
#
|
133
|
-
# @param [Hash, #read] params
|
134
|
-
# @option params [String] :pki_path the location of the Certificate Files
|
135
|
-
# @option params [String] :node_name the Icinga2 Hostname
|
136
|
-
# @option params [String] :user the Icinga2 API User
|
137
|
-
# @option params [String] :password the Icinga2 API Password
|
138
|
-
#
|
139
|
-
# @example with Certificate
|
140
|
-
# @icinga.cert?(pki_path: '/etc/icinga2', node_name: 'icinga2-dashing')
|
141
|
-
#
|
142
|
-
# @example with User
|
143
|
-
# @icinga.cert?(user: 'root', password: 'icinga')
|
144
|
-
#
|
145
|
-
# @return [Bool, #read]
|
146
|
-
#
|
147
|
-
def cert?( params )
|
148
|
-
|
149
|
-
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
150
|
-
raise ArgumentError.new('missing params') if( params.size.zero? )
|
151
|
-
|
152
|
-
pki_path = params.dig(:pki_path)
|
153
|
-
node_name = params.dig(:node_name)
|
154
|
-
user = params.dig(:user)
|
155
|
-
password = params.dig(:password)
|
156
|
-
|
157
|
-
if( node_name.nil? )
|
158
|
-
begin
|
159
|
-
node_name = Socket.gethostbyname(Socket.gethostname).first
|
160
|
-
logger.debug(format('node name: %s', node_name))
|
161
|
-
rescue SocketError => e
|
162
|
-
|
163
|
-
raise format("can't resolve hostname (%s)", e)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
ssl_cert_file = format( '%s/%s.crt', pki_path, node_name )
|
168
|
-
ssl_key_file = format( '%s/%s.key', pki_path, node_name )
|
169
|
-
ssl_ca_file = format( '%s/ca.crt', pki_path )
|
170
|
-
|
171
|
-
if( File.file?( ssl_cert_file ) && File.file?( ssl_key_file ) && File.file?( ssl_ca_file ) )
|
172
|
-
|
173
|
-
logger.debug( 'PKI found, using client certificates for connection to Icinga 2 API' )
|
174
|
-
|
175
|
-
ssl_cert_file = File.read( ssl_cert_file )
|
176
|
-
ssl_key_file = File.read( ssl_key_file )
|
177
|
-
ssl_ca_file = File.read( ssl_ca_file )
|
178
|
-
|
179
|
-
cert = OpenSSL::X509::Certificate.new( ssl_cert_file )
|
180
|
-
key = OpenSSL::PKey::RSA.new( ssl_key_file )
|
181
|
-
|
182
|
-
[true, {
|
183
|
-
ssl_client_cert: cert,
|
184
|
-
ssl_client_key: key,
|
185
|
-
ssl_ca_file: ssl_ca_file,
|
186
|
-
verify_ssl: OpenSSL::SSL::VERIFY_NONE
|
187
|
-
} ]
|
188
|
-
|
189
|
-
else
|
190
|
-
|
191
|
-
logger.debug( 'PKI not found, using basic auth for connection to Icinga 2 API' )
|
192
|
-
|
193
|
-
raise ArgumentError.new('Missing user_name') if( user.nil? )
|
194
|
-
raise ArgumentError.new('Missing password') if( password.nil? )
|
195
|
-
|
196
|
-
[false, {
|
197
|
-
user: user,
|
198
|
-
password: password,
|
199
|
-
verify_ssl: OpenSSL::SSL::VERIFY_NONE
|
200
|
-
} ]
|
201
|
-
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
-
# return Icinga2 Application data
|
206
|
-
#
|
207
|
-
# @example
|
208
|
-
# @icinga.application_data
|
209
|
-
#
|
210
|
-
# @return [Hash]
|
211
|
-
#
|
212
|
-
def application_data
|
213
|
-
|
214
|
-
data = Network.application_data(
|
215
|
-
url: format( '%s/status/IcingaApplication', @icinga_api_url_base ),
|
216
|
-
headers: @headers,
|
217
|
-
options: @options
|
218
|
-
)
|
219
|
-
|
220
|
-
return nil if( data.nil? )
|
221
|
-
|
222
|
-
app_data = data.dig('icingaapplication','app')
|
223
|
-
|
224
|
-
# version and revision
|
225
|
-
@version, @revision = parse_version(app_data.dig('version'))
|
226
|
-
|
227
|
-
# - node_name
|
228
|
-
@node_name = app_data.dig('node_name')
|
229
|
-
|
230
|
-
# - start_time
|
231
|
-
@start_time = Time.at(app_data.dig('program_start').to_f)
|
232
|
-
|
233
|
-
data
|
234
|
-
end
|
235
|
-
|
236
|
-
# return Icinga2 CIB
|
237
|
-
#
|
238
|
-
# @example
|
239
|
-
# @icinga.cib_data
|
240
|
-
#
|
241
|
-
# @return [Hash]
|
242
|
-
#
|
243
|
-
def cib_data
|
244
|
-
|
245
|
-
data = Network.application_data(
|
246
|
-
url: format( '%s/status/CIB', @icinga_api_url_base ),
|
247
|
-
headers: @headers,
|
248
|
-
options: @options
|
249
|
-
)
|
250
|
-
|
251
|
-
unless( data.nil? )
|
252
|
-
|
253
|
-
cib_data = data.clone
|
254
|
-
|
255
|
-
# extract
|
256
|
-
# - uptime
|
257
|
-
uptime = cib_data.dig('uptime').round(2)
|
258
|
-
@uptime = Time.at(uptime).utc.strftime('%H:%M:%S')
|
259
|
-
|
260
|
-
# - avg_latency / avg_execution_time
|
261
|
-
@avg_latency = cib_data.dig('avg_latency').round(2)
|
262
|
-
@avg_execution_time = cib_data.dig('avg_execution_time').round(2)
|
263
|
-
|
264
|
-
# - hosts
|
265
|
-
@hosts_up = cib_data.dig('num_hosts_up').to_i
|
266
|
-
@hosts_down = cib_data.dig('num_hosts_down').to_i
|
267
|
-
@hosts_pending = cib_data.dig('num_hosts_pending').to_i
|
268
|
-
@hosts_unreachable = cib_data.dig('num_hosts_unreachable').to_i
|
269
|
-
@hosts_in_downtime = cib_data.dig('num_hosts_in_downtime').to_i
|
270
|
-
@hosts_acknowledged = cib_data.dig('num_hosts_acknowledged').to_i
|
271
|
-
|
272
|
-
# - services
|
273
|
-
@services_ok = cib_data.dig('num_services_ok').to_i
|
274
|
-
@services_warning = cib_data.dig('num_services_warning').to_i
|
275
|
-
@services_critical = cib_data.dig('num_services_critical').to_i
|
276
|
-
@services_unknown = cib_data.dig('num_services_unknown').to_i
|
277
|
-
@services_pending = cib_data.dig('num_services_pending').to_i
|
278
|
-
@services_in_downtime = cib_data.dig('num_services_in_downtime').to_i
|
279
|
-
@services_acknowledged = cib_data.dig('num_services_acknowledged').to_i
|
280
|
-
|
281
|
-
# - check stats
|
282
|
-
@hosts_active_checks_1min = cib_data.dig('active_host_checks_1min')
|
283
|
-
@hosts_passive_checks_1min = cib_data.dig('passive_host_checks_1min')
|
284
|
-
@services_active_checks_1min = cib_data.dig('active_service_checks_1min')
|
285
|
-
@services_passive_checks_1min = cib_data.dig('passive_service_checks_1min')
|
286
|
-
|
287
|
-
end
|
288
|
-
|
289
|
-
data
|
290
|
-
end
|
291
|
-
|
292
|
-
# return Icinga2 Status Data
|
293
|
-
#
|
294
|
-
# @example
|
295
|
-
# @icinga.status_data
|
296
|
-
#
|
297
|
-
# @return [Hash]
|
298
|
-
#
|
299
|
-
def status_data
|
300
|
-
|
301
|
-
Network.application_data(
|
302
|
-
url: format( '%s/status', @icinga_api_url_base ),
|
303
|
-
headers: @headers,
|
304
|
-
options: @options
|
305
|
-
)
|
306
|
-
end
|
307
|
-
|
308
|
-
# return Icinga2 API Listener
|
309
|
-
#
|
310
|
-
# @example
|
311
|
-
# @icinga.api_listener
|
312
|
-
#
|
313
|
-
# @return [Hash]
|
314
|
-
#
|
315
|
-
def api_listener
|
316
|
-
|
317
|
-
Network.application_data(
|
318
|
-
url: format( '%s/status/ApiListener', @icinga_api_url_base ),
|
319
|
-
headers: @headers,
|
320
|
-
options: @options
|
321
|
-
)
|
322
|
-
end
|
323
|
-
|
324
|
-
# check the availability of a Icinga network connect
|
325
|
-
#
|
326
|
-
# @example
|
327
|
-
# @icinga.available?
|
328
|
-
#
|
329
|
-
# @return [Bool]
|
330
|
-
#
|
331
|
-
def available?
|
332
|
-
|
333
|
-
data = application_data
|
334
|
-
|
335
|
-
return true unless( data.nil? )
|
336
|
-
|
337
|
-
false
|
338
|
-
end
|
339
|
-
|
340
|
-
# return Icinga2 version and revision
|
341
|
-
#
|
342
|
-
# @example
|
343
|
-
# @icinga.application_data
|
344
|
-
# @icinga.version.values
|
345
|
-
#
|
346
|
-
# v = @icinga.version
|
347
|
-
# version = v.dig(:version)
|
348
|
-
#
|
349
|
-
# @return [Hash]
|
350
|
-
# * version
|
351
|
-
# * revision
|
352
|
-
#
|
353
|
-
def version
|
354
|
-
version = @version.nil? ? 0 : @version
|
355
|
-
revision = @revision.nil? ? 0 : @revision
|
356
|
-
|
357
|
-
{
|
358
|
-
version: version.to_s,
|
359
|
-
revision: revision.to_s
|
360
|
-
}
|
361
|
-
end
|
362
|
-
|
363
|
-
# return Icinga2 node_name
|
364
|
-
#
|
365
|
-
# @example
|
366
|
-
# @icinga.application_data
|
367
|
-
# @icinga.node_name
|
368
|
-
#
|
369
|
-
# @return [String]
|
370
|
-
#
|
371
|
-
def node_name
|
372
|
-
return @node_name if( @node_name )
|
373
|
-
|
374
|
-
nil
|
375
|
-
end
|
376
|
-
|
377
|
-
# return Icinga2 start time
|
378
|
-
#
|
379
|
-
# @example
|
380
|
-
# @icinga.application_data
|
381
|
-
# @icinga.start_time
|
382
|
-
#
|
383
|
-
# @return [String]
|
384
|
-
#
|
385
|
-
def start_time
|
386
|
-
return @start_time if( @start_time )
|
387
|
-
|
388
|
-
nil
|
389
|
-
end
|
390
|
-
|
391
|
-
# return Icinga2 uptime
|
392
|
-
#
|
393
|
-
# @example
|
394
|
-
# @icinga.cib_data
|
395
|
-
# @icinga.uptime
|
396
|
-
#
|
397
|
-
# @return [String]
|
398
|
-
#
|
399
|
-
def uptime
|
400
|
-
return @uptime if( @uptime )
|
401
|
-
|
402
|
-
nil
|
403
|
-
end
|
404
|
-
|
405
|
-
end
|
406
17
|
end
|
407
|
-
|