sensu-plugins-outlyer 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/bin/outlyer-metrics.rb +46 -28
- data/lib/sensu-plugins-outlyer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a52863d6578923ee7abae3281e4bed498e6bae4c6ec66ebbffdfc8632f98bc4
|
4
|
+
data.tar.gz: 81c623f83b9e79fbf4af84dfdc8a13b33c27fd604a89b1643184bf0bed1bc05e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18aa3e82c81931a8336a2b1f609770e9abbd166fa0f0a8434b063faafab5f6182e00a63718ebebf8b71f194596bca9fada9266302b2572a66899d9c0d4f84af3
|
7
|
+
data.tar.gz: b602dcb494dcae20291440d5bea058c298231b78d37e2bb95ebc03eba3fe04169cf6c905d15b555100c1f72786b5d0379da2aea2e99f505dffdbafcb33b5d0e7
|
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
4
4
|
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
5
5
|
|
6
|
-
## [0.
|
6
|
+
## [0.7.0] - 2018-07-16
|
7
7
|
- Made debug flag boolean
|
8
8
|
- Added additional debug logging for troubleshooting
|
9
9
|
- Added Unit Tests
|
data/bin/outlyer-metrics.rb
CHANGED
@@ -71,11 +71,9 @@ class OutlyerMetrics < Sensu::Handler
|
|
71
71
|
def handle
|
72
72
|
|
73
73
|
output = @event['check']['output']
|
74
|
-
check_status = @event['check']['status'].to_f
|
75
74
|
@check_name = @event['check']['name']
|
76
75
|
@host = @event['client']['name'].strip.to_s
|
77
76
|
@environment = @event['client']['environment']
|
78
|
-
timestamp = @event['check']['executed'].to_i * 1000
|
79
77
|
|
80
78
|
if config[:debug]
|
81
79
|
puts "Handling check #{@check_name} for host #{@host} in environment #{@environment}"
|
@@ -88,31 +86,9 @@ class OutlyerMetrics < Sensu::Handler
|
|
88
86
|
parse_graphite_output(output)
|
89
87
|
end
|
90
88
|
|
91
|
-
# Add a service status metric
|
92
|
-
metrics.push(create_datapoint('service.status', check_status, timestamp, {service: "sensu.#{sanitize_value(@check_name)}"}))
|
93
89
|
# Post metrics to Outlyer
|
94
90
|
push_metrics(metrics)
|
95
91
|
end
|
96
|
-
|
97
|
-
# Create a single data point
|
98
|
-
#
|
99
|
-
# @param name [String] metric name
|
100
|
-
# @param value [Float] metric value
|
101
|
-
# @param time [Integer] epoch timestamp of metric in milliseconds
|
102
|
-
# @param labels [HashMap] (Optional) Additional labels to append to data point
|
103
|
-
# @param metric_host [String] (Optional) Set a host for the metric
|
104
|
-
#
|
105
|
-
def create_datapoint(name, value, time, labels = {}, metric_host=@host)
|
106
|
-
datapoint = {
|
107
|
-
host: metric_host,
|
108
|
-
labels: labels,
|
109
|
-
name: name,
|
110
|
-
timestamp: time,
|
111
|
-
type: 'gauge',
|
112
|
-
value: value
|
113
|
-
}
|
114
|
-
datapoint
|
115
|
-
end
|
116
92
|
|
117
93
|
# Parse the Nagios output format:
|
118
94
|
# <message> | <metric path 1>=<metric value 1>, <metric path 2>=<metric value 2>...
|
@@ -141,6 +117,7 @@ class OutlyerMetrics < Sensu::Handler
|
|
141
117
|
puts "The Nagios metric '#{metric}' could not be parsed: #{error.message}"
|
142
118
|
end
|
143
119
|
end
|
120
|
+
data.push(create_status_metric(@event['check']['status'].to_f))
|
144
121
|
data
|
145
122
|
end
|
146
123
|
|
@@ -161,15 +138,15 @@ class OutlyerMetrics < Sensu::Handler
|
|
161
138
|
end
|
162
139
|
|
163
140
|
# Parse the metric on each line in graphite format
|
141
|
+
metric_host = @host
|
164
142
|
output.split("\n").each do |metric|
|
165
143
|
m = metric.split
|
166
144
|
next unless m.count == 3
|
167
145
|
labels = {service: "sensu.#{sanitize_value(@check_name)}"}
|
168
|
-
metric_host = @host
|
169
146
|
|
170
147
|
# Check to see if we have a scheme filter that matches the metric name
|
171
|
-
template = nil
|
172
148
|
if schemes
|
149
|
+
template = nil
|
173
150
|
schemes.each do |scheme|
|
174
151
|
filter = Regexp.new("^#{Regexp.escape(scheme['filter']).gsub('\*','[^\.]*?')}$")
|
175
152
|
if m[0] =~ filter
|
@@ -215,8 +192,8 @@ class OutlyerMetrics < Sensu::Handler
|
|
215
192
|
puts "No scheme was found that matches the metric '#{m[0]}.'"
|
216
193
|
puts "Please configure a scheme for the check '#{@check_name}' "\
|
217
194
|
"on the Sensu client '#{@host}'."
|
218
|
-
|
219
|
-
|
195
|
+
data.push(create_status_metric(3))
|
196
|
+
return data
|
220
197
|
end
|
221
198
|
else
|
222
199
|
metric_name = sanitize_value(m[0])
|
@@ -227,9 +204,30 @@ class OutlyerMetrics < Sensu::Handler
|
|
227
204
|
point = create_datapoint(metric_name, value, time, labels, metric_host)
|
228
205
|
data.push(point)
|
229
206
|
end
|
207
|
+
if config[:debug]
|
208
|
+
puts "Parsed #{data.length} of #{output.split("\n").length} metrics"
|
209
|
+
end
|
210
|
+
data.push(create_status_metric(@event['check']['status'].to_f, metric_host))
|
230
211
|
data
|
231
212
|
end
|
232
213
|
|
214
|
+
# Create the status metric for the check with status:
|
215
|
+
#
|
216
|
+
# 0 - OK
|
217
|
+
# 1 - WARN
|
218
|
+
# 2 - CRITICAL
|
219
|
+
# 3 - UNKNOWN
|
220
|
+
#
|
221
|
+
# Unknown is used to tell Outlyer there was a parsing error for the check
|
222
|
+
#
|
223
|
+
# @param check_status [Integer] Check status code
|
224
|
+
# @param host [String] (Optional) hostname of host that ran the check
|
225
|
+
# @param timestamp [Integer] (Optional) timestamp of when host ran the check
|
226
|
+
#
|
227
|
+
def create_status_metric(check_status, host=@host, timestamp=@event['check']['executed'].to_i * 1000)
|
228
|
+
return create_datapoint('service.status', check_status, timestamp, {service: "sensu.#{sanitize_value(@check_name)}"}, host)
|
229
|
+
end
|
230
|
+
|
233
231
|
# Ensures all label values conform to Outlyer's data format requirements:
|
234
232
|
#
|
235
233
|
# * values can only contain the characters `-._A-Za-z0-9`, other characters
|
@@ -250,6 +248,26 @@ class OutlyerMetrics < Sensu::Handler
|
|
250
248
|
end
|
251
249
|
value
|
252
250
|
end
|
251
|
+
|
252
|
+
# Create a single data point
|
253
|
+
#
|
254
|
+
# @param name [String] metric name
|
255
|
+
# @param value [Float] metric value
|
256
|
+
# @param time [Integer] epoch timestamp of metric in milliseconds
|
257
|
+
# @param labels [HashMap] (Optional) Additional labels to append to data point
|
258
|
+
# @param metric_host [String] (Optional) Set a host for the metric
|
259
|
+
#
|
260
|
+
def create_datapoint(name, value, time, labels = {}, metric_host=@host)
|
261
|
+
datapoint = {
|
262
|
+
host: metric_host,
|
263
|
+
labels: labels,
|
264
|
+
name: name,
|
265
|
+
timestamp: time,
|
266
|
+
type: 'gauge',
|
267
|
+
value: value
|
268
|
+
}
|
269
|
+
datapoint
|
270
|
+
end
|
253
271
|
|
254
272
|
# Post check metrics to Outlyer's Series API:
|
255
273
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-outlyer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dataloop Software, INC. Trading as Outlyer
|
@@ -175,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
175
|
version: '0'
|
176
176
|
requirements: []
|
177
177
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.7.
|
178
|
+
rubygems_version: 2.7.6
|
179
179
|
signing_key:
|
180
180
|
specification_version: 4
|
181
181
|
summary: Sensu plugins for Outlyer
|