sensu-extensions-check-deps 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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