sensu-extensions-check-deps 0.0.9 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40f101c6bb98a1784fd9f5782525d0b077226702
4
- data.tar.gz: 974f3b1f2b06644bf527b80e461912668494f96b
3
+ metadata.gz: 59be05b85439a80f8d74c90373dea64ea9247e0b
4
+ data.tar.gz: dbb25f5246f5aa96ff3ea55a65f56a5420bd55ed
5
5
  SHA512:
6
- metadata.gz: 3d278c7bcfff7cecd8c335fbdaa0a592fd96d7fc0f82f03759c659b0bcf6b9ec026b79bc45f84371a6d1161fee54742f925b073bf589de3d3c7ff5868a4a2e63
7
- data.tar.gz: a2d8af9eaf58df3a0553a25f109acbbe4f62315da787a1c95650e43c4b872898dcdc17e70756cb7159445b58bd9f491aac96bb80d61a0830bdef085e03ca16d1
6
+ metadata.gz: eb2ceb055ffab70b523c7d61798800b5bb1dcd8a225bcb290468d182b35456bc70dc2ff14c7831d03287af2a06d8df1d3cade9bd830eb129ac2cb9ee355d42a6
7
+ data.tar.gz: 0f351aca2dfed91df4d4e1e40fecb05829f854c729b9f9198e01542d45b735be552b1c43e52f6bf497c2715869f3440c2021842208c870981eb79d711ca49ad9
@@ -11,12 +11,12 @@ module Sensu
11
11
  end
12
12
 
13
13
  def description
14
- "filter events when an event exists and send to RabbitMQ event json"
14
+ "filter events when an event exists and send slack to channel sensu"
15
15
  end
16
16
 
17
17
  # Will post Slack message to channel sensu
18
- @webhook = "T02B3AJ9B/BAYDG2VHN/jOVR3fy8AG5O7Y4ftTfNzon7"
19
- def writeToSlack(message, webhook=@webhook, err=false)
18
+ def writeToSlack(message, err=false)
19
+ webhook = "T02B3AJ9B/BAYDG2VHN/jOVR3fy8AG5O7Y4ftTfNzon7"
20
20
  webhookUrl = "https://hooks.slack.com/services/" + webhook
21
21
  channel = "#sensu"
22
22
  begin
@@ -59,79 +59,82 @@ module Sensu
59
59
  path = "/events/#{client_name}/#{check_name}"
60
60
  response = sensu_api_get_request(path)
61
61
  response.code.to_i == 200
62
- end
62
+ end
63
63
 
64
- # Check to see if an event exists for a subscription/check pair. This
65
- # method is looking for a HTTP response code of `200`.
66
- #
67
- # @param subscription_name [String]
68
- # @param check_name [String]
69
- # @return [Boolean]
70
- def subscription_event_exists?(subscription_name, check_name)
71
- path = "/events"
72
- response = sensu_api_get_request(path)
73
- events = JSON.load(response.body)
74
- !events.select { |event| event[:client][:subscriptions].include?(subscription_name) && event[:check][:name] == check_name}.empty?
75
- end
64
+ # Check to see if an event exists for a subscription/check pair. This
65
+ # method is looking for a HTTP response code of `200`.
66
+ #
67
+ # @param subscription_name [String]
68
+ # @param check_name [String]
69
+ # @return [Boolean]
70
+ def subscription_event_exists?(subscription_name, check_name)
71
+ path = "/events"
72
+ response = sensu_api_get_request(path)
73
+ events = JSON.load(response.body)
74
+ !events.select { |event| event[:client][:subscriptions].include?(subscription_name) && event[:check][:name] == check_name}.empty?
75
+ end
76
76
 
77
- # Determine if an event exists for any of the check
78
- # dependencies declared in the event data, specified in array,
79
- # check `dependencies`. A check dependency can be a check
80
- # executed by the same Sensu client (eg. `check_app`), a
81
- # client/check pair (eg.`i-424242/check_mysql`), or a
82
- # subscription/check pair (eg. `subscription:mysql/check_mysql`).
83
- #
84
- # @param event [Hash]
85
- # @return [Boolean]
77
+ # Determine if an event exists for any of the check
78
+ # dependencies declared in the event data, specified in array,
79
+ # check `dependencies`. A check dependency can be a check
80
+ # executed by the same Sensu client (eg. `check_app`), a
81
+ # client/check pair (eg.`i-424242/check_mysql`), or a
82
+ # subscription/check pair (eg. `subscription:mysql/check_mysql`).
83
+ #
84
+ # @param event [Hash]
85
+ # @return [Boolean]
86
86
 
87
- def dependency_events_exist?(event)
88
- if event[:check][:dependencies][:dependency].is_a?(Array)
89
- event[:check][:dependencies][:dependency].any? do |dependency|
90
- begin
91
- check_name, entity = dependency.split("/").reverse
92
- if entity =~ /^subscription:.*$/
93
- subscription_name = entity.split(":")[1]
94
- subscription_event_exists?(subscription_name, check_name)
87
+ def dependency_events_exist?(event)
88
+ dependencies_string = event[:check][:dependencies][:dependency]
89
+ dependencies_array = dependencies_string.split(" ")
90
+ dependencies_array ||= []
91
+ if dependencies_array.is_a?(Array)
92
+ dependencies_array.any? do |dependency|
93
+ begin
94
+ check_name, entity = dependency.split("/").reverse
95
+ if entity =~ /^subscription:.*$/
96
+ subscription_name = entity.split(":")[1]
97
+ subscription_event_exists?(subscription_name, check_name)
98
+ else
99
+ client_name = entity
100
+ client_name ||= event[:client][:name]
101
+ client_event_exists?(client_name, check_name)
102
+ end
103
+ rescue => error
104
+ @logger.error("failed to query api for a check dependency event", :error => error)
105
+ false
106
+ end
107
+ end
95
108
  else
96
- client_name = entity
97
- client_name ||= event[:client][:name]
98
- client_event_exists?(client_name, check_name)
109
+ false
99
110
  end
100
- rescue => error
101
- @logger.error("failed to query api for a check dependency event", :error => error)
102
- false
103
111
  end
104
- end
105
- else
106
- false
107
- end
108
- end
109
112
 
110
- def run(event, &callback)
111
- filter = Proc.new do
112
- begin
113
- deps_list = event[:check][:dependencies][:dependency]
114
- deps_list ||= "empty"
115
- @logger.info("check_deps filter: Processing #{event[:check][:name]} #{event[:action]}")
116
- writeToSlack(":face_with_monocle: Processing #{event[:check][:name]} #{event[:action]}")
117
- Timeout::timeout(10) do
118
- if dependency_events_exist?(event)
119
- writeToSlack(":no_entry: event exists for check dependency")
120
- writeToSlack(":no_entry: Event: #{event[:check][:name]} will be blocked Action: #{event[:action]}. Deps list: #{deps_list}")
121
- ["event exists for check dependency", 1]
122
- else
123
- writeToSlack(":arrow_up: no current events for check dependencies")
124
- writeToSlack(":arrow_up: Event: #{event[:check][:name]} will pass. Action: #{event[:action]}. Deps list: #{deps_list}")
125
- ["no current events for check dependencies", 1]
126
- end
127
- end
128
- rescue => error
129
- @logger.error("check dependencies filter error", :error => error.to_s)
130
- ["check dependencies filter error: #{error}", 1]
131
- end
132
- end
133
- EM.defer(filter, callback)
134
- end
135
- end
136
- end
137
- end
113
+ def run(event, &callback)
114
+ filter = Proc.new do
115
+ begin
116
+ dependencies_string = event[:check][:dependencies][:dependency]
117
+ dependencies_string ||= "empty"
118
+ @logger.info("check_deps filter: Processing #{event[:check][:name]} #{event[:action]} dependencies: #{dependencies_string} ")
119
+ writeToSlack(":face_with_monocle: Processing #{event[:check][:name]} #{event[:action]}")
120
+ Timeout::timeout(10) do
121
+ if dependency_events_exist?(event)
122
+ #writeToSlack(":no_entry: event exists for check dependency")
123
+ writeToSlack(":no_entry: Event: #{event[:check][:name]} will be blocked Action: #{event[:action]}. Deps list: #{dependencies_string}")
124
+ ["event exists for check dependency", 1]
125
+ else
126
+ #writeToSlack(":arrow_up: no current events for check dependencies")
127
+ writeToSlack(":arrow_up: Event: #{event[:check][:name]} will pass. Action: #{event[:action]}. Deps list: #{dependencies_string}")
128
+ ["no current events for check dependencies", 1]
129
+ end
130
+ end
131
+ rescue => error
132
+ @logger.error("check dependencies filter error", :error => error.to_s)
133
+ ["check dependencies filter error: #{error}", 1]
134
+ end
135
+ end
136
+ EM.defer(filter, callback)
137
+ end
138
+ end
139
+ end
140
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-extensions-check-deps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Mevzos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-03 00:00:00.000000000 Z
11
+ date: 2018-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-extension
@@ -104,7 +104,6 @@ files:
104
104
  - CHANGELOG.md
105
105
  - LICENSE
106
106
  - README.md
107
- - lib/sensu/extensions/check-deps-any.rb
108
107
  - lib/sensu/extensions/check-deps.rb
109
108
  homepage: https://github.com/mau1024/sensu-extensions-check-deps
110
109
  licenses: []
@@ -1,132 +0,0 @@
1
- require "sensu/extension"
2
- require "timeout"
3
- require "net/http"
4
- require 'json'
5
-
6
- module Sensu
7
- module Extension
8
- class CheckDeps < Filter
9
- def name
10
- "check_deps"
11
- end
12
-
13
- def description
14
- "filter events when an event exists and send to RabbitMQ event json"
15
- end
16
-
17
- # Will post Slack message to channel sensu
18
- def writeToSlack(message, err=false)
19
- webhookUrl = "https://hooks.slack.com/services/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"
20
- channel = "#sensu"
21
- emoji = ":no_entry:"
22
- begin
23
- payload = {
24
- :channel => channel,
25
- :text => message,
26
- :icon_url => emoji
27
- }.to_json
28
- cmd = "curl -X POST --data-urlencode 'payload=#{payload}' #{webhookUrl}"
29
- system(cmd)
30
- rescue
31
- puts "failed to notify slack, proceeding..."
32
- end
33
- end
34
- #writeToSlack("Event was blocked: " + @event['check']['name'] + "becasuse some of dependencies was already triggered. Deps list: "+ @event['check']['dependencies'])
35
-
36
- # Make an HTTP GET request to the Sensu API, using the URI
37
- # path provided. Uses Sensu settings to determine how to
38
- # connect to the API.
39
- #
40
- # @param path [String]
41
- # @return [Object] http response object.
42
-
43
- def sensu_api_get_request(path)
44
- api = @settings[:api] || {}
45
- request = Net::HTTP::Get.new(path)
46
- if api[:user]
47
- request.basic_auth(api[:user], api[:password])
48
- end
49
- Net::HTTP.new(api[:host] || '127.0.0.1', api[:port] || 4567).start do |http|
50
- http.request(request)
51
- end
52
- end
53
-
54
- # Check to see if an event exists for a client/check pair. This
55
- # method is looking for a HTTP response code of `200`.
56
- #
57
- # @param client_name [String]
58
- # @param check_name [String]
59
- # @return [Boolean]
60
- def client_event_exists?(client_name, check_name)
61
- path = "/events/#{client_name}/#{check_name}"
62
- response = sensu_api_get_request(path)
63
- response.code.to_i == 200
64
- end
65
-
66
- # Check to see if an event exists for a subscription/check pair. This
67
- # method is looking for a HTTP response code of `200`.
68
- #
69
- # @param subscription_name [String]
70
- # @param check_name [String]
71
- # @return [Boolean]
72
- def subscription_event_exists?(subscription_name, check_name)
73
- path = "/events"
74
- response = sensu_api_get_request(path)
75
- events = JSON.load(response.body)
76
- !events.select { |event| event[:client][:subscriptions].include?(subscription_name) && event[:check][:name] == check_name}.empty?
77
- end
78
-
79
- # Determine if an event exists for any of the check
80
- # dependencies declared in the event data, specified in array,
81
- # check `dependencies`. A check dependency can be a check
82
- # executed by the same Sensu client (eg. `check_app`), a
83
- # client/check pair (eg.`i-424242/check_mysql`), or a
84
- # subscription/check pair (eg. `subscription:mysql/check_mysql`).
85
- #
86
- # @param event [Hash]
87
- # @return [Boolean]
88
-
89
- def dependency_events_exist?(event)
90
- if event[:check][:dependencies].is_a?(Array)
91
- event[:check][:dependencies].any? do |dependency|
92
- begin
93
- check_name, entity = dependency.split("/").reverse
94
- if entity =~ /^subscription:.*$/
95
- subscription_name = entity.split(":")[1]
96
- subscription_event_exists?(subscription_name, check_name)
97
- else
98
- client_name = entity
99
- client_name ||= event[:client][:name]
100
- client_event_exists?(client_name, check_name)
101
- end
102
- rescue => error
103
- @logger.error("failed to query api for a check dependency event", :error => error)
104
- false
105
- end
106
- end
107
- else
108
- false
109
- end
110
- end
111
-
112
- def run(event, &callback)
113
- filter = Proc.new do
114
- begin
115
- Timeout::timeout(10) do
116
- if dependency_events_exist?(event)
117
- ["event exists for check dependency", 1]
118
- writeToSlack("Event: " + event[check][name] + " will be blocked." "Some of dependencies were already triggered. Deps list: "+ event[check][dependencies])
119
- else
120
- ["no current events for check dependencies", 1]
121
- end
122
- end
123
- rescue => error
124
- @logger.error("check dependencies filter error", :error => error.to_s)
125
- ["check dependencies filter error: #{error}", 1]
126
- end
127
- end
128
- EM.defer(filter, callback)
129
- end
130
- end
131
- end
132
- end