sensu-plugins-elasticsearch-boutetnico 1.0.4

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.
@@ -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: []