sensu-plugins-elasticsearch-boutetnico 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ require 'sensu-plugins-elasticsearch/version'
2
+ require 'sensu-plugins-elasticsearch/elasticsearch-common'
3
+ require 'sensu-plugins-elasticsearch/elasticsearch-query'
@@ -0,0 +1,63 @@
1
+ #
2
+ # DESCRIPTION:
3
+ # Common helper methods
4
+ #
5
+ # DEPENDENCIES:
6
+ # gem: elasticsearch
7
+ # gem: sensu-plugin
8
+ #
9
+ # USAGE:
10
+ #
11
+ # NOTES:
12
+ #
13
+ # LICENSE:
14
+ # Brendan Gibat <brendan.gibat@gmail.com>
15
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
16
+ # for details.
17
+ #
18
+
19
+ require_relative 'elasticsearch-query.rb'
20
+
21
+ module ElasticsearchCommon
22
+ include ElasticsearchQuery
23
+ def initialize
24
+ super()
25
+ end
26
+
27
+ def client
28
+ transport_class = nil
29
+ if config[:transport] == 'AWS'
30
+ transport_class = Elasticsearch::Transport::Transport::HTTP::AWS
31
+ end
32
+
33
+ host = {
34
+ host: config[:host],
35
+ port: config[:port],
36
+ request_timeout: config[:timeout],
37
+ scheme: config[:scheme]
38
+ }
39
+
40
+ if !config[:user].nil? && !config[:password].nil?
41
+ host[:user] = config[:user]
42
+ host[:password] = config[:password]
43
+ host[:scheme] = 'https' unless config[:scheme]
44
+ end
45
+
46
+ transport_options = {}
47
+
48
+ if config[:headers]
49
+
50
+ headers = {}
51
+
52
+ config[:headers].split(',').each do |header|
53
+ h, v = header.split(':', 2)
54
+ headers[h.strip] = v.strip
55
+ end
56
+
57
+ transport_options[:headers] = headers
58
+
59
+ end
60
+
61
+ @client ||= Elasticsearch::Client.new(transport_class: transport_class, hosts: [host], region: config[:region], transport_options: transport_options)
62
+ end
63
+ end
@@ -0,0 +1,153 @@
1
+ #
2
+ # DESCRIPTION:
3
+ # Common search helper methods
4
+ #
5
+ # DEPENDENCIES:
6
+ # gem: elasticsearch
7
+ # gem: sensu-plugin
8
+ #
9
+ # USAGE:
10
+ #
11
+ # NOTES:
12
+ #
13
+ # LICENSE:
14
+ # Brendan Gibat <brendan.gibat@gmail.com>
15
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
16
+ # for details.
17
+ #
18
+
19
+ module ElasticsearchQuery
20
+ def initialize
21
+ super()
22
+ end
23
+
24
+ def indices(end_time)
25
+ if !config[:index].nil?
26
+ return config[:index]
27
+ elsif !config[:date_index].nil?
28
+ indices = []
29
+
30
+ curr = end_time.to_i
31
+ start = curr
32
+
33
+ if config[:minutes_previous] != 0
34
+ start -= (config[:minutes_previous] * 60)
35
+ end
36
+ if config[:hours_previous] != 0
37
+ start -= (config[:hours_previous] * 60 * 60)
38
+ end
39
+ if config[:days_previous] != 0
40
+ start -= (config[:days_previous] * 60 * 60 * 24)
41
+ end
42
+ if config[:weeks_previous] != 0
43
+ start -= (config[:weeks_previous] * 60 * 60 * 24 * 7)
44
+ end
45
+ if config[:months_previous] != 0
46
+ start -= (config[:months_previous] * 60 * 60 * 24 * 7 * 31)
47
+ end
48
+ total = 60 * 60 * 24
49
+ if config[:date_repeat_hourly]
50
+ total = 60 * 60
51
+ end
52
+ (start.to_i..curr.to_i).step(total) do |step|
53
+ indices.push(Time.at(step).utc.strftime config[:date_index])
54
+ end
55
+ unless indices.include?(Time.at(curr).utc.strftime config[:date_index])
56
+ indices.push(Time.at(curr).utc.strftime config[:date_index])
57
+ end
58
+ return indices.join(',')
59
+ end
60
+ ['_all']
61
+ end
62
+
63
+ def build_request_options
64
+ end_time = (Time.now.utc - config[:offset])
65
+ options = {
66
+
67
+ index: indices(end_time),
68
+ ignore_unavailable: true
69
+ }
70
+
71
+ unless config[:ignore_unavailable].nil?
72
+ options[:ignore_unavailable] = config[:ignore_unavailable]
73
+ end
74
+
75
+ unless config[:id].nil?
76
+ options[:id] = config[:id]
77
+ end
78
+
79
+ if !config[:body].nil?
80
+ options[:body] = config[:body]
81
+ elsif config[:aggr] == true
82
+ es_date_start = es_date_math_string end_time
83
+ options[:size] = 0
84
+ options[:body] = {
85
+ 'query' => {
86
+ 'bool' => {
87
+ 'must' => [{
88
+ 'query_string' => {
89
+ 'default_field' => config[:search_field],
90
+ 'query' => config[:query]
91
+ }
92
+ }, {
93
+ 'range' => {
94
+ config[:timestamp_field] => {
95
+ 'gt' => es_date_start,
96
+ 'lt' => end_time.strftime('%Y-%m-%dT%H:%M:%S')
97
+ }
98
+ }
99
+ }]
100
+ }
101
+ },
102
+ 'aggregations' => {
103
+ 'average' => { 'avg' => { 'field' => config[:aggr_field] } }
104
+ }
105
+ }
106
+ else
107
+ es_date_start = es_date_math_string end_time
108
+ unless es_date_start.nil?
109
+ options[:body] = {
110
+ 'query' => {
111
+ 'bool' => {
112
+ 'must' => [{
113
+ 'query_string' => {
114
+ 'default_field' => config[:search_field],
115
+ 'query' => config[:query]
116
+ }
117
+ }, {
118
+ 'range' => {
119
+ config[:timestamp_field] => {
120
+ 'gt' => es_date_start,
121
+ 'lt' => end_time.strftime('%Y-%m-%dT%H:%M:%S')
122
+ }
123
+ }
124
+ }]
125
+ }
126
+ }
127
+ }
128
+ end
129
+ end
130
+ unless config[:types].nil?
131
+ options[:type] = config[:types]
132
+ end
133
+ options
134
+ end
135
+
136
+ def es_date_math_string(end_time)
137
+ if config[:minutes_previous].zero? && \
138
+ config[:hours_previous].zero? && \
139
+ config[:days_previous].zero? && \
140
+ config[:weeks_previous].zero? && \
141
+ config[:months_previous].zero?
142
+ nil
143
+ else
144
+ es_math = "#{end_time.strftime '%Y-%m-%dT%H:%M:%S'}||"
145
+ es_math += "-#{config[:minutes_previous]}m" if config[:minutes_previous] != 0
146
+ es_math += "-#{config[:hours_previous]}h" if config[:hours_previous] != 0
147
+ es_math += "-#{config[:days_previous]}d" if config[:days_previous] != 0
148
+ es_math += "-#{config[:weeks_previous]}w" if config[:weeks_previous] != 0
149
+ es_math += "-#{config[:months_previous]}M" if config[:months_previous] != 0
150
+ es_math
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,9 @@
1
+ module SensuPluginsElasticsearch
2
+ module Version
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ PATCH = 4
6
+
7
+ VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,351 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sensu-plugins-elasticsearch-boutetnico
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Sensu Plugins and contributors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-es-transport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.14
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2.5'
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.1'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.1.14
47
+ - - "<"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.5'
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.1'
53
+ - !ruby/object:Gem::Dependency
54
+ name: elasticsearch
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 1.0.14
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 1.0.14
67
+ - !ruby/object:Gem::Dependency
68
+ name: rest-client
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '='
72
+ - !ruby/object:Gem::Version
73
+ version: 2.1.0
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '='
79
+ - !ruby/object:Gem::Version
80
+ version: 2.1.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: sensu-plugin
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '4.0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '4.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: bundler
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '2.1'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '2.1'
109
+ - !ruby/object:Gem::Dependency
110
+ name: codeclimate-test-reporter
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '0.4'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '0.4'
123
+ - !ruby/object:Gem::Dependency
124
+ name: github-markup
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.3'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '1.3'
137
+ - !ruby/object:Gem::Dependency
138
+ name: kitchen-docker
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '2.6'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '2.6'
151
+ - !ruby/object:Gem::Dependency
152
+ name: mixlib-shellout
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "<"
156
+ - !ruby/object:Gem::Version
157
+ version: 2.3.0
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '2.2'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "<"
166
+ - !ruby/object:Gem::Version
167
+ version: 2.3.0
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '2.2'
171
+ - !ruby/object:Gem::Dependency
172
+ name: pry
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '0.10'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '0.10'
185
+ - !ruby/object:Gem::Dependency
186
+ name: rake
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '10.0'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '10.0'
199
+ - !ruby/object:Gem::Dependency
200
+ name: redcarpet
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: '3.2'
206
+ type: :development
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: '3.2'
213
+ - !ruby/object:Gem::Dependency
214
+ name: rspec
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '3.1'
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '3.1'
227
+ - !ruby/object:Gem::Dependency
228
+ name: rubocop
229
+ requirement: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - "~>"
232
+ - !ruby/object:Gem::Version
233
+ version: 0.51.0
234
+ type: :development
235
+ prerelease: false
236
+ version_requirements: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - "~>"
239
+ - !ruby/object:Gem::Version
240
+ version: 0.51.0
241
+ - !ruby/object:Gem::Dependency
242
+ name: test-kitchen
243
+ requirement: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - "~>"
246
+ - !ruby/object:Gem::Version
247
+ version: 1.16.0
248
+ type: :development
249
+ prerelease: false
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: 1.16.0
255
+ - !ruby/object:Gem::Dependency
256
+ name: yard
257
+ requirement: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: 0.9.11
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - "~>"
267
+ - !ruby/object:Gem::Version
268
+ version: 0.9.11
269
+ description: |-
270
+ This plugin provides native ElasticSearch instrumentation
271
+ for monitoring and metrics collection, including:
272
+ service health and metrics for cluster, node, and more.
273
+ email: "<sensu-users@googlegroups.com>"
274
+ executables:
275
+ - check-es-query-count.rb
276
+ - check-es-cluster-status.rb
277
+ - metrics-es-node.rb
278
+ - check-es-query-average.rb
279
+ - check-es-cluster-health.rb
280
+ - check-es-shard-allocation-status.rb
281
+ - check-es-query-ratio.rb
282
+ - handler-es-delete-indices.rb
283
+ - check-es-indexes.rb
284
+ - check-es-circuit-breakers.rb
285
+ - check-es-node-status.rb
286
+ - check-es-indices-field-count.rb
287
+ - metrics-es-cluster.rb
288
+ - metrics-es-node-graphite.rb
289
+ - check-es-file-descriptors.rb
290
+ - check-es-heap.rb
291
+ - check-es-indices-sizes.rb
292
+ - check-es-query-exists.rb
293
+ extensions: []
294
+ extra_rdoc_files: []
295
+ files:
296
+ - CHANGELOG.md
297
+ - LICENSE
298
+ - README.md
299
+ - bin/check-es-circuit-breakers.rb
300
+ - bin/check-es-cluster-health.rb
301
+ - bin/check-es-cluster-status.rb
302
+ - bin/check-es-file-descriptors.rb
303
+ - bin/check-es-heap.rb
304
+ - bin/check-es-indexes.rb
305
+ - bin/check-es-indices-field-count.rb
306
+ - bin/check-es-indices-sizes.rb
307
+ - bin/check-es-node-status.rb
308
+ - bin/check-es-query-average.rb
309
+ - bin/check-es-query-count.rb
310
+ - bin/check-es-query-exists.rb
311
+ - bin/check-es-query-ratio.rb
312
+ - bin/check-es-shard-allocation-status.rb
313
+ - bin/handler-es-delete-indices.rb
314
+ - bin/metrics-es-cluster.rb
315
+ - bin/metrics-es-node-graphite.rb
316
+ - bin/metrics-es-node.rb
317
+ - lib/sensu-plugins-elasticsearch.rb
318
+ - lib/sensu-plugins-elasticsearch/elasticsearch-common.rb
319
+ - lib/sensu-plugins-elasticsearch/elasticsearch-query.rb
320
+ - lib/sensu-plugins-elasticsearch/version.rb
321
+ homepage: https://github.com/boutetnico/sensu-plugins-elasticsearch
322
+ licenses:
323
+ - MIT
324
+ metadata:
325
+ maintainer: sensu-plugin
326
+ development_status: active
327
+ production_status: unstable - testing recommended
328
+ release_draft: 'false'
329
+ release_prerelease: 'false'
330
+ post_install_message: You can use the embedded Ruby by setting EMBEDDED_RUBY=true
331
+ in /etc/default/sensu
332
+ rdoc_options: []
333
+ require_paths:
334
+ - lib
335
+ required_ruby_version: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - ">="
338
+ - !ruby/object:Gem::Version
339
+ version: 2.3.0
340
+ required_rubygems_version: !ruby/object:Gem::Requirement
341
+ requirements:
342
+ - - ">="
343
+ - !ruby/object:Gem::Version
344
+ version: '0'
345
+ requirements: []
346
+ rubyforge_project:
347
+ rubygems_version: 2.6.14.4
348
+ signing_key:
349
+ specification_version: 4
350
+ summary: Sensu plugins for elasticsearch
351
+ test_files: []