sensu-plugin 2.6.1 → 2.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/lib/sensu-handler.rb +12 -0
- data/lib/sensu-mutator.rb +13 -0
- data/lib/sensu-plugin.rb +1 -1
- data/lib/sensu-plugin/utils.rb +94 -0
- data/test/handle_2to1_test.rb +18 -0
- data/test/mutator_2to1_test.rb +24 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3933344846102d33bd69622c4134b3a53c687cce
|
4
|
+
data.tar.gz: 1cd15f9096d8e72250b667d425317739f30a0ed3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4205c698be3548741f7942566b00453ed58c3f3550d5dc51a98644ec6fcca092f2a0b418baa95c463d4d84123344260cd5a85ecbccfcb0d8ab182f534a2a70d7
|
7
|
+
data.tar.gz: 591c9f4bce7d7e178c2bb6c5f99e7e2682625f56f9efb5b663661b2beb4a665ede9f9a130cb3133db1e0d9795e0f3686d6fc616dd97c05ad34ae968129d29bf6
|
data/lib/sensu-handler.rb
CHANGED
@@ -9,6 +9,10 @@ module Sensu
|
|
9
9
|
class Handler
|
10
10
|
include Sensu::Plugin::Utils
|
11
11
|
include Mixlib::CLI
|
12
|
+
option :map_v2_event_into_v1,
|
13
|
+
description: 'Enable 2.x to 1.4 event mapping. Alternatively set envvar SENSU_MAP_V2_EVENT_INTO_V1=1.',
|
14
|
+
boolean: true,
|
15
|
+
long: '--map-v2-event-into-v1'
|
12
16
|
|
13
17
|
attr_accessor :argv
|
14
18
|
|
@@ -73,6 +77,14 @@ module Sensu
|
|
73
77
|
if @@autorun
|
74
78
|
handler = @@autorun.new
|
75
79
|
handler.read_event(STDIN)
|
80
|
+
|
81
|
+
TRUTHY_VALUES = %w[1 t true yes y].freeze
|
82
|
+
automap = ENV['SENSU_MAP_V2_EVENT_INTO_V1'].to_s.downcase
|
83
|
+
|
84
|
+
if handler.config[:map_v2_event_into_v1] || TRUTHY_VALUES.include?(automap)
|
85
|
+
new_event = handler.map_v2_event_into_v1
|
86
|
+
handler.event = new_event
|
87
|
+
end
|
76
88
|
handler.filter
|
77
89
|
handler.handle
|
78
90
|
end
|
data/lib/sensu-mutator.rb
CHANGED
@@ -34,6 +34,10 @@ module Sensu
|
|
34
34
|
class Mutator
|
35
35
|
include Sensu::Plugin::Utils
|
36
36
|
include Mixlib::CLI
|
37
|
+
option :map_v2_event_into_v1,
|
38
|
+
description: 'Enable 2.x to 1.4 event mapping. Alternatively set envvar SENSU_MAP_V2_EVENT_INTO_V1=1.',
|
39
|
+
boolean: true,
|
40
|
+
long: '--map-v2-event-into-v1'
|
37
41
|
|
38
42
|
attr_accessor :argv
|
39
43
|
|
@@ -67,6 +71,15 @@ module Sensu
|
|
67
71
|
return unless @@autorun
|
68
72
|
mutator = @@autorun.new
|
69
73
|
mutator.read_event(STDIN)
|
74
|
+
|
75
|
+
TRUTHY_VALUES = %w[1 t true yes y].freeze
|
76
|
+
automap = ENV['SENSU_MAP_V2_EVENT_INTO_V1'].to_s.downcase
|
77
|
+
|
78
|
+
if mutator.config[:map_v2_event_into_v1] || TRUTHY_VALUES.include?(automap)
|
79
|
+
new_event = mutator.map_v2_event_into_v1
|
80
|
+
mutator.event = new_event
|
81
|
+
end
|
82
|
+
|
70
83
|
mutator.mutate
|
71
84
|
mutator.dump
|
72
85
|
end
|
data/lib/sensu-plugin.rb
CHANGED
data/lib/sensu-plugin/utils.rb
CHANGED
@@ -23,6 +23,14 @@ module Sensu
|
|
23
23
|
@settings ||= config_files.map { |f| load_config(f) }.reduce { |a, b| deep_merge(a, b) }
|
24
24
|
end
|
25
25
|
|
26
|
+
def event
|
27
|
+
@event
|
28
|
+
end
|
29
|
+
|
30
|
+
def event=(value)
|
31
|
+
@event = value
|
32
|
+
end
|
33
|
+
|
26
34
|
def read_event(file)
|
27
35
|
@event = ::JSON.parse(file.read)
|
28
36
|
@event['occurrences'] ||= 1
|
@@ -33,6 +41,92 @@ module Sensu
|
|
33
41
|
exit 0
|
34
42
|
end
|
35
43
|
|
44
|
+
##
|
45
|
+
# Helper method to convert Sensu 2.0 event into Sensu 1.4 event
|
46
|
+
# This is here to help keep Sensu Plugin community handlers working
|
47
|
+
# until they natively support 2.0
|
48
|
+
# Takes 2.0 event json object as argument
|
49
|
+
# Returns event with 1.4 mapping included
|
50
|
+
#
|
51
|
+
# Note:
|
52
|
+
# The 1.4 mapping overwrites some attributes so the resulting event cannot
|
53
|
+
# be used in a 2.0 workflow. The top level boolean attribute "v2_event_mapped_into_v1"
|
54
|
+
# will be set to true as a hint to indicate this is a mapped event object.
|
55
|
+
#
|
56
|
+
##
|
57
|
+
def map_v2_event_into_v1(orig_event = nil)
|
58
|
+
orig_event ||= @event
|
59
|
+
|
60
|
+
# return orig_event if already mapped
|
61
|
+
return orig_event if orig_event['v2_event_mapped_into_v1']
|
62
|
+
|
63
|
+
# Deep copy of orig_event
|
64
|
+
event = Marshal.load(Marshal.dump(orig_event))
|
65
|
+
|
66
|
+
# Trigger mapping code if enity exists and client does not
|
67
|
+
client_missing = event['client'].nil? || event['client'].empty?
|
68
|
+
if event.key?('entity') && client_missing
|
69
|
+
##
|
70
|
+
# create the client hash from the entity hash
|
71
|
+
##
|
72
|
+
event['client'] = event['entity']
|
73
|
+
|
74
|
+
##
|
75
|
+
# Fill in missing client attributes
|
76
|
+
##
|
77
|
+
event['client']['name'] ||= event['entity']['id']
|
78
|
+
event['client']['subscribers'] ||= event['entity']['subscriptions']
|
79
|
+
|
80
|
+
##
|
81
|
+
# Fill in renamed check attributes expected in 1.4 event
|
82
|
+
# subscribers, source
|
83
|
+
##
|
84
|
+
event['check']['subscribers'] ||= event['check']['subscriptions']
|
85
|
+
event['check']['source'] ||= event['check']['proxy_entity_id']
|
86
|
+
|
87
|
+
##
|
88
|
+
# Mimic 1.4 event action based on 2.0 event state
|
89
|
+
# action used in logs and fluentd plugins handlers
|
90
|
+
##
|
91
|
+
action_state_mapping = {
|
92
|
+
'flapping' => 'flapping',
|
93
|
+
'passing' => 'resolve',
|
94
|
+
'failing' => 'create'
|
95
|
+
}
|
96
|
+
|
97
|
+
state = event['check']['state'] || 'unknown::2.0_event'
|
98
|
+
|
99
|
+
# Attempt to map 2.0 event state to 1.4 event action
|
100
|
+
event['action'] ||= action_state_mapping[state.downcase]
|
101
|
+
# Fallback action is 2.0 event state
|
102
|
+
event['action'] ||= state
|
103
|
+
|
104
|
+
##
|
105
|
+
# Mimic 1.4 event history based on 2.0 event history
|
106
|
+
# Note: This overwrites the same history attribute
|
107
|
+
# 2.x history is an array of hashes, each hash includes status
|
108
|
+
# 1.x history is an array of statuses
|
109
|
+
##
|
110
|
+
if event['check']['history']
|
111
|
+
# Let's save the original history
|
112
|
+
history_v2 = Marshal.load(Marshal.dump(event['check']['history']))
|
113
|
+
event['check']['history_v2'] = history_v2
|
114
|
+
legacy_history = []
|
115
|
+
event['check']['history'].each do |h|
|
116
|
+
legacy_history << h['status'].to_i.to_s || '3'
|
117
|
+
end
|
118
|
+
event['check']['history'] = legacy_history
|
119
|
+
end
|
120
|
+
|
121
|
+
##
|
122
|
+
# Setting flag indicating this function has already been called
|
123
|
+
##
|
124
|
+
event['v2_event_mapped_into_v1'] = true
|
125
|
+
end
|
126
|
+
# return the updated event
|
127
|
+
event
|
128
|
+
end
|
129
|
+
|
36
130
|
def net_http_req_class(method)
|
37
131
|
case method.to_s.upcase
|
38
132
|
when 'GET'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'English'
|
3
|
+
|
4
|
+
class TestHandle2to1 < MiniTest::Test
|
5
|
+
include SensuPluginTestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
set_script 'external/handle-2to1 --map-v2-event-into-v1'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_2to1_enabled
|
12
|
+
event = JSON.parse(fixture('basic_v2_event.json').read)
|
13
|
+
expected = "test_entity : test_check : test_proxy : test_output : 4 : create : sub1|sub2|sub3 : sub1^sub2^sub3 : 01230\n"
|
14
|
+
output = run_script_with_input(JSON.generate(event))
|
15
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
16
|
+
assert_match(expected, output)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'English'
|
3
|
+
|
4
|
+
require 'test_helper'
|
5
|
+
|
6
|
+
# Simple Heper to test mutator
|
7
|
+
class TestMutatorHelpers < MiniTest::Test
|
8
|
+
include SensuPluginTestHelper
|
9
|
+
def test_base_2to1_mutator
|
10
|
+
set_script 'external/mutator-trivial --map-v2-event-into-v1'
|
11
|
+
event = JSON.parse(fixture('basic_v2_event.json').read)
|
12
|
+
output = run_script_with_input(JSON.generate(event))
|
13
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
14
|
+
assert_equal(event['entity']['id'], JSON.parse(output)['client']['name'])
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_external_2to1_mutator
|
18
|
+
set_script 'external/mutator-helpers --map-v2-event-into-v1'
|
19
|
+
event = JSON.parse(fixture('basic_v2_event.json').read)
|
20
|
+
output = run_script_with_input(JSON.generate(event))
|
21
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
22
|
+
assert_equal(true, JSON.parse(output)['mutated'])
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Decklin Foster
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -116,9 +116,11 @@ files:
|
|
116
116
|
- test/external_handler_argument_test.rb
|
117
117
|
- test/external_handler_test.rb
|
118
118
|
- test/external_metric_test.rb
|
119
|
+
- test/handle_2to1_test.rb
|
119
120
|
- test/handle_api_request_test.rb
|
120
121
|
- test/handle_filter_test.rb
|
121
122
|
- test/handle_helper_test.rb
|
123
|
+
- test/mutator_2to1_test.rb
|
122
124
|
- test/mutator_test.rb
|
123
125
|
- test/test_helper.rb
|
124
126
|
homepage: https://github.com/sensu-plugins/sensu-plugin
|
@@ -152,7 +154,9 @@ test_files:
|
|
152
154
|
- test/test_helper.rb
|
153
155
|
- test/handle_filter_test.rb
|
154
156
|
- test/handle_helper_test.rb
|
157
|
+
- test/handle_2to1_test.rb
|
155
158
|
- test/external_handler_argument_test.rb
|
159
|
+
- test/mutator_2to1_test.rb
|
156
160
|
- test/deep_merge_test.rb
|
157
161
|
- test/cast_bool_value_test.rb
|
158
162
|
- test/external_handler_test.rb
|