sensu 0.25.0.beta → 0.25.0.rc1
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/api/http_handler.rb +41 -25
- data/lib/sensu/api/process.rb +15 -6
- data/lib/sensu/api/routes/aggregates.rb +12 -8
- data/lib/sensu/api/routes/checks.rb +3 -1
- data/lib/sensu/api/routes/clients.rb +9 -3
- data/lib/sensu/api/routes/events.rb +7 -7
- data/lib/sensu/api/routes/health.rb +1 -0
- data/lib/sensu/api/routes/info.rb +1 -0
- data/lib/sensu/api/routes/request.rb +1 -0
- data/lib/sensu/api/routes/resolve.rb +1 -0
- data/lib/sensu/api/routes/results.rb +9 -8
- data/lib/sensu/api/routes/stashes.rb +8 -3
- data/lib/sensu/api/{validators.rb → validators/client.rb} +1 -3
- data/lib/sensu/api/validators/invalid.rb +8 -0
- data/lib/sensu/client/process.rb +9 -6
- data/lib/sensu/constants.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6d58b06b0ce22836e1207b27f5e270e943647acf
|
|
4
|
+
data.tar.gz: cfc35367183ebd01f250d3357498a8eb9eef6f59
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: adfef52a3dd93c3f21b4bbf906ce9bbb2d954fdff39113a5efe500b546e5ba965adea6b6c64cf336b42f2e2341534353cef88644146ee2879565f4f51efbc66b
|
|
7
|
+
data.tar.gz: a91f043f664beae6ddab0c3cedece51148533e584a5de451c969c2fd11b022382527c6e2dbaa79a5feafa98a3fc85132fd184e28b80acdfe3abeb0ca9eaaadfe
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require "sensu/api/validators"
|
|
2
1
|
require "sensu/api/routes"
|
|
3
2
|
|
|
4
3
|
gem "em-http-server", "0.1.8"
|
|
@@ -13,39 +12,56 @@ module Sensu
|
|
|
13
12
|
|
|
14
13
|
attr_accessor :logger, :settings, :redis, :transport
|
|
15
14
|
|
|
16
|
-
#
|
|
17
|
-
# address for the HTTP client
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@
|
|
23
|
-
|
|
15
|
+
# Create a hash containing the HTTP request details. This method
|
|
16
|
+
# determines the remote address for the HTTP client (using
|
|
17
|
+
# EventMachine Connection `get_peername()`).
|
|
18
|
+
#
|
|
19
|
+
# @result [Hash]
|
|
20
|
+
def request_details
|
|
21
|
+
return @request_details if @request_details
|
|
22
|
+
_, remote_address = Socket.unpack_sockaddr_in(get_peername)
|
|
23
|
+
@request_details = {
|
|
24
|
+
:remote_address => remote_address,
|
|
24
25
|
:user_agent => @http[:user_agent],
|
|
25
|
-
:
|
|
26
|
-
:
|
|
27
|
-
:
|
|
28
|
-
:
|
|
29
|
-
}
|
|
26
|
+
:method => @http_request_method,
|
|
27
|
+
:uri => @http_request_uri,
|
|
28
|
+
:query_string => @http_query_string,
|
|
29
|
+
:body => @http_content
|
|
30
|
+
}
|
|
31
|
+
if @http[:x_forwarded_for]
|
|
32
|
+
@request_details[:x_forwarded_for] = @http[:x_forwarded_for]
|
|
33
|
+
end
|
|
34
|
+
@request_details
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Log the HTTP request. The debug log level is used for requests
|
|
38
|
+
# as response logging includes the same information.
|
|
39
|
+
def log_request
|
|
40
|
+
@logger.debug("api request", request_details)
|
|
30
41
|
end
|
|
31
42
|
|
|
32
43
|
# Log the HTTP response.
|
|
33
44
|
def log_response
|
|
34
45
|
@logger.info("api response", {
|
|
35
|
-
:
|
|
36
|
-
:
|
|
37
|
-
:
|
|
38
|
-
:request_uri => @http_request_uri,
|
|
39
|
-
:request_query_string => @http_query_string,
|
|
40
|
-
:request_body => @http_content,
|
|
41
|
-
:response_status => @response.status,
|
|
42
|
-
:response_body => @response.content
|
|
46
|
+
:request => request_details,
|
|
47
|
+
:status => @response.status,
|
|
48
|
+
:content_length => @response.content.to_s.bytesize
|
|
43
49
|
})
|
|
44
50
|
end
|
|
45
51
|
|
|
46
|
-
# Parse the HTTP
|
|
47
|
-
#
|
|
48
|
-
#
|
|
52
|
+
# Parse the HTTP request URI using a regular expression,
|
|
53
|
+
# returning the URI unescaped match data values.
|
|
54
|
+
#
|
|
55
|
+
# @param regex [Regexp]
|
|
56
|
+
# @return [Array] URI unescaped match data values.
|
|
57
|
+
def parse_uri(regex)
|
|
58
|
+
uri_match = regex.match(@http_request_uri)[1..-1]
|
|
59
|
+
uri_match.map { |s| URI.unescape(s) }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Parse the HTTP request query string for parameters. This
|
|
63
|
+
# method creates `@params`, a hash of parsed query parameters,
|
|
64
|
+
# used by the API routes.
|
|
49
65
|
def parse_parameters
|
|
50
66
|
@params = {}
|
|
51
67
|
if @http_query_string
|
data/lib/sensu/api/process.rb
CHANGED
|
@@ -22,13 +22,13 @@ module Sensu
|
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
# Start the
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
port = api[:port] || 4567
|
|
25
|
+
# Start the API HTTP server. This method sets `@http_server`.
|
|
26
|
+
#
|
|
27
|
+
# @param bind [String] address to listen on.
|
|
28
|
+
# @param port [Integer] to listen on.
|
|
29
|
+
def start_http_server(bind, port)
|
|
31
30
|
@logger.info("api listening", {
|
|
31
|
+
:protocol => "http",
|
|
32
32
|
:bind => bind,
|
|
33
33
|
:port => port
|
|
34
34
|
})
|
|
@@ -38,6 +38,15 @@ module Sensu
|
|
|
38
38
|
handler.redis = @redis
|
|
39
39
|
handler.transport = @transport
|
|
40
40
|
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Start the Sensu API HTTP server. This method sets the service
|
|
44
|
+
# state to `:running`.
|
|
45
|
+
def start
|
|
46
|
+
api = @settings[:api] || {}
|
|
47
|
+
bind = api[:bind] || "0.0.0.0"
|
|
48
|
+
port = api[:port] || 4567
|
|
49
|
+
start_http_server(bind, port)
|
|
41
50
|
super
|
|
42
51
|
end
|
|
43
52
|
|
|
@@ -8,6 +8,7 @@ module Sensu
|
|
|
8
8
|
AGGREGATE_CHECKS_URI = /^\/aggregates\/([\w\.-]+)\/checks$/
|
|
9
9
|
AGGREGATE_RESULTS_SEVERITY_URI = /^\/aggregates\/([\w\.-]+)\/results\/([\w\.-]+)$/
|
|
10
10
|
|
|
11
|
+
# GET /aggregates
|
|
11
12
|
def get_aggregates
|
|
12
13
|
@redis.smembers("aggregates") do |aggregates|
|
|
13
14
|
aggregates.map! do |aggregate|
|
|
@@ -18,8 +19,9 @@ module Sensu
|
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
|
|
22
|
+
# GET /aggregates/:aggregate
|
|
21
23
|
def get_aggregate
|
|
22
|
-
aggregate = AGGREGATE_URI.
|
|
24
|
+
aggregate = parse_uri(AGGREGATE_URI).first
|
|
23
25
|
@redis.smembers("aggregates:#{aggregate}") do |aggregate_members|
|
|
24
26
|
unless aggregate_members.empty?
|
|
25
27
|
@response_content = {
|
|
@@ -75,8 +77,9 @@ module Sensu
|
|
|
75
77
|
end
|
|
76
78
|
end
|
|
77
79
|
|
|
80
|
+
# DELETE /aggregates/:aggregate
|
|
78
81
|
def delete_aggregate
|
|
79
|
-
aggregate = AGGREGATE_URI.
|
|
82
|
+
aggregate = parse_uri(AGGREGATE_URI).first
|
|
80
83
|
@redis.smembers("aggregates") do |aggregates|
|
|
81
84
|
if aggregates.include?(aggregate)
|
|
82
85
|
@redis.srem("aggregates", aggregate) do
|
|
@@ -90,8 +93,9 @@ module Sensu
|
|
|
90
93
|
end
|
|
91
94
|
end
|
|
92
95
|
|
|
96
|
+
# GET /aggregates/:aggregate/clients
|
|
93
97
|
def get_aggregate_clients
|
|
94
|
-
aggregate = AGGREGATE_CLIENTS_URI.
|
|
98
|
+
aggregate = parse_uri(AGGREGATE_CLIENTS_URI).first
|
|
95
99
|
@response_content = []
|
|
96
100
|
@redis.smembers("aggregates:#{aggregate}") do |aggregate_members|
|
|
97
101
|
unless aggregate_members.empty?
|
|
@@ -114,8 +118,9 @@ module Sensu
|
|
|
114
118
|
end
|
|
115
119
|
end
|
|
116
120
|
|
|
121
|
+
# GET /aggregates/:aggregate/checks
|
|
117
122
|
def get_aggregate_checks
|
|
118
|
-
aggregate = AGGREGATE_CHECKS_URI.
|
|
123
|
+
aggregate = parse_uri(AGGREGATE_CHECKS_URI).first
|
|
119
124
|
@response_content = []
|
|
120
125
|
@redis.smembers("aggregates:#{aggregate}") do |aggregate_members|
|
|
121
126
|
unless aggregate_members.empty?
|
|
@@ -138,14 +143,13 @@ module Sensu
|
|
|
138
143
|
end
|
|
139
144
|
end
|
|
140
145
|
|
|
146
|
+
# GET /aggregates/:aggregate/results/:severity
|
|
141
147
|
def get_aggregate_results_severity
|
|
142
|
-
|
|
143
|
-
aggregate = uri_match[1]
|
|
144
|
-
severity = uri_match[2]
|
|
145
|
-
@response_content = []
|
|
148
|
+
aggregate, severity = parse_uri(AGGREGATE_RESULTS_SEVERITY_URI)
|
|
146
149
|
if SEVERITIES.include?(severity)
|
|
147
150
|
@redis.smembers("aggregates:#{aggregate}") do |aggregate_members|
|
|
148
151
|
unless aggregate_members.empty?
|
|
152
|
+
@response_content = []
|
|
149
153
|
summaries = Hash.new
|
|
150
154
|
max_age = integer_parameter(@params[:max_age])
|
|
151
155
|
current_timestamp = Time.now.to_i
|
|
@@ -5,13 +5,15 @@ module Sensu
|
|
|
5
5
|
CHECKS_URI = /^\/checks$/
|
|
6
6
|
CHECK_URI = /^\/checks\/([\w\.-]+)$/
|
|
7
7
|
|
|
8
|
+
# GET /checks
|
|
8
9
|
def get_checks
|
|
9
10
|
@response_content = @settings.checks
|
|
10
11
|
respond
|
|
11
12
|
end
|
|
12
13
|
|
|
14
|
+
# GET /checks/:check_name
|
|
13
15
|
def get_check
|
|
14
|
-
check_name = CHECK_URI.
|
|
16
|
+
check_name = parse_uri(CHECK_URI).first
|
|
15
17
|
if @settings[:checks][check_name]
|
|
16
18
|
@response_content = @settings[:checks][check_name].merge(:name => check_name)
|
|
17
19
|
respond
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "sensu/api/validators/client"
|
|
1
2
|
require "sensu/api/utilities/resolve_event"
|
|
2
3
|
|
|
3
4
|
module Sensu
|
|
@@ -10,6 +11,7 @@ module Sensu
|
|
|
10
11
|
CLIENT_URI = /^\/clients\/([\w\.-]+)$/
|
|
11
12
|
CLIENT_HISTORY_URI = /^\/clients\/([\w\.-]+)\/history$/
|
|
12
13
|
|
|
14
|
+
# POST /clients
|
|
13
15
|
def post_clients
|
|
14
16
|
read_data do |client|
|
|
15
17
|
client[:keepalives] = client.fetch(:keepalives, false)
|
|
@@ -29,6 +31,7 @@ module Sensu
|
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
|
|
34
|
+
# GET /clients
|
|
32
35
|
def get_clients
|
|
33
36
|
@response_content = []
|
|
34
37
|
@redis.smembers("clients") do |clients|
|
|
@@ -53,8 +56,9 @@ module Sensu
|
|
|
53
56
|
end
|
|
54
57
|
end
|
|
55
58
|
|
|
59
|
+
# GET /clients/:client_name
|
|
56
60
|
def get_client
|
|
57
|
-
client_name = CLIENT_URI.
|
|
61
|
+
client_name = parse_uri(CLIENT_URI).first
|
|
58
62
|
@redis.get("client:#{client_name}") do |client_json|
|
|
59
63
|
unless client_json.nil?
|
|
60
64
|
@response_content = Sensu::JSON.load(client_json)
|
|
@@ -65,8 +69,9 @@ module Sensu
|
|
|
65
69
|
end
|
|
66
70
|
end
|
|
67
71
|
|
|
72
|
+
# GET /clients/:client_name/history
|
|
68
73
|
def get_client_history
|
|
69
|
-
client_name = CLIENT_HISTORY_URI.
|
|
74
|
+
client_name = parse_uri(CLIENT_HISTORY_URI).first
|
|
70
75
|
@response_content = []
|
|
71
76
|
@redis.smembers("result:#{client_name}") do |checks|
|
|
72
77
|
unless checks.empty?
|
|
@@ -104,8 +109,9 @@ module Sensu
|
|
|
104
109
|
end
|
|
105
110
|
end
|
|
106
111
|
|
|
112
|
+
# DELETE /clients/:client_name
|
|
107
113
|
def delete_client
|
|
108
|
-
client_name = CLIENT_URI.
|
|
114
|
+
client_name = parse_uri(CLIENT_URI).first
|
|
109
115
|
@redis.get("client:#{client_name}") do |client_json|
|
|
110
116
|
unless client_json.nil?
|
|
111
117
|
@redis.hgetall("events:#{client_name}") do |events|
|
|
@@ -10,6 +10,7 @@ module Sensu
|
|
|
10
10
|
EVENTS_CLIENT_URI = /^\/events\/([\w\.-]+)$/
|
|
11
11
|
EVENT_URI = /^\/events\/([\w\.-]+)\/([\w\.-]+)$/
|
|
12
12
|
|
|
13
|
+
# GET /events
|
|
13
14
|
def get_events
|
|
14
15
|
@response_content = []
|
|
15
16
|
@redis.smembers("clients") do |clients|
|
|
@@ -30,8 +31,9 @@ module Sensu
|
|
|
30
31
|
end
|
|
31
32
|
end
|
|
32
33
|
|
|
34
|
+
# GET /events/:client_name
|
|
33
35
|
def get_events_client
|
|
34
|
-
client_name = EVENTS_CLIENT_URI.
|
|
36
|
+
client_name = parse_uri(EVENTS_CLIENT_URI).first
|
|
35
37
|
@response_content = []
|
|
36
38
|
@redis.hgetall("events:#{client_name}") do |events|
|
|
37
39
|
events.each do |check_name, event_json|
|
|
@@ -41,10 +43,9 @@ module Sensu
|
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
|
46
|
+
# GET /events/:client_name/:check_name
|
|
44
47
|
def get_event
|
|
45
|
-
|
|
46
|
-
client_name = uri_match[1]
|
|
47
|
-
check_name = uri_match[2]
|
|
48
|
+
client_name, check_name = parse_uri(EVENT_URI)
|
|
48
49
|
@redis.hgetall("events:#{client_name}") do |events|
|
|
49
50
|
event_json = events[check_name]
|
|
50
51
|
unless event_json.nil?
|
|
@@ -56,10 +57,9 @@ module Sensu
|
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
|
|
60
|
+
# DELETE /events/:client_name/:check_name
|
|
59
61
|
def delete_event
|
|
60
|
-
|
|
61
|
-
client_name = uri_match[1]
|
|
62
|
-
check_name = uri_match[2]
|
|
62
|
+
client_name, check_name = parse_uri(EVENT_URI)
|
|
63
63
|
@redis.hgetall("events:#{client_name}") do |events|
|
|
64
64
|
if events.include?(check_name)
|
|
65
65
|
resolve_event(events[check_name])
|
|
@@ -10,6 +10,7 @@ module Sensu
|
|
|
10
10
|
RESULTS_CLIENT_URI = /^\/results\/([\w\.-]+)$/
|
|
11
11
|
RESULT_URI = /^\/results\/([\w\.-]+)\/([\w\.-]+)$/
|
|
12
12
|
|
|
13
|
+
# POST /results
|
|
13
14
|
def post_results
|
|
14
15
|
rules = {
|
|
15
16
|
:name => {:type => String, :nil_ok => false, :regex => /\A[\w\.-]+\z/},
|
|
@@ -24,6 +25,7 @@ module Sensu
|
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
# GET /results
|
|
27
29
|
def get_results
|
|
28
30
|
@response_content = []
|
|
29
31
|
@redis.smembers("clients") do |clients|
|
|
@@ -54,8 +56,9 @@ module Sensu
|
|
|
54
56
|
end
|
|
55
57
|
end
|
|
56
58
|
|
|
59
|
+
# GET /results/:client_name
|
|
57
60
|
def get_results_client
|
|
58
|
-
client_name = RESULTS_CLIENT_URI.
|
|
61
|
+
client_name = parse_uri(RESULTS_CLIENT_URI).first
|
|
59
62
|
@response_content = []
|
|
60
63
|
@redis.smembers("result:#{client_name}") do |checks|
|
|
61
64
|
unless checks.empty?
|
|
@@ -72,15 +75,14 @@ module Sensu
|
|
|
72
75
|
end
|
|
73
76
|
end
|
|
74
77
|
else
|
|
75
|
-
|
|
78
|
+
respond
|
|
76
79
|
end
|
|
77
80
|
end
|
|
78
81
|
end
|
|
79
82
|
|
|
83
|
+
# GET /results/:client_name/:check_name
|
|
80
84
|
def get_result
|
|
81
|
-
|
|
82
|
-
client_name = uri_match[1]
|
|
83
|
-
check_name = uri_match[2]
|
|
85
|
+
client_name, check_name = parse_uri(RESULT_URI)
|
|
84
86
|
result_key = "result:#{client_name}:#{check_name}"
|
|
85
87
|
@redis.get(result_key) do |result_json|
|
|
86
88
|
unless result_json.nil?
|
|
@@ -93,10 +95,9 @@ module Sensu
|
|
|
93
95
|
end
|
|
94
96
|
end
|
|
95
97
|
|
|
98
|
+
# DELETE /results/:client_name/:check_name
|
|
96
99
|
def delete_result
|
|
97
|
-
|
|
98
|
-
client_name = uri_match[1]
|
|
99
|
-
check_name = uri_match[2]
|
|
100
|
+
client_name, check_name = parse_uri(RESULT_URI)
|
|
100
101
|
result_key = "result:#{client_name}:#{check_name}"
|
|
101
102
|
@redis.exists(result_key) do |result_exists|
|
|
102
103
|
if result_exists
|
|
@@ -5,8 +5,9 @@ module Sensu
|
|
|
5
5
|
STASHES_URI = /^\/stashes$/
|
|
6
6
|
STASH_URI = /^\/stash(?:es)?\/(.*)$/
|
|
7
7
|
|
|
8
|
+
# POST /stash/:path or /stashes/:path
|
|
8
9
|
def post_stash
|
|
9
|
-
path = STASH_URI.
|
|
10
|
+
path = parse_uri(STASH_URI).first
|
|
10
11
|
read_data do |data|
|
|
11
12
|
@redis.set("stash:#{path}", Sensu::JSON.dump(data)) do
|
|
12
13
|
@redis.sadd("stashes", path) do
|
|
@@ -17,8 +18,9 @@ module Sensu
|
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
|
|
21
|
+
# GET /stash/:path or /stashes/:path
|
|
20
22
|
def get_stash
|
|
21
|
-
path = STASH_URI.
|
|
23
|
+
path = parse_uri(STASH_URI).first
|
|
22
24
|
@redis.get("stash:#{path}") do |stash_json|
|
|
23
25
|
unless stash_json.nil?
|
|
24
26
|
@response_content = Sensu::JSON.load(stash_json)
|
|
@@ -29,8 +31,9 @@ module Sensu
|
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
|
|
34
|
+
# DELETE /stash/:path or /stashes/:path
|
|
32
35
|
def delete_stash
|
|
33
|
-
path = STASH_URI.
|
|
36
|
+
path = parse_uri(STASH_URI).first
|
|
34
37
|
@redis.exists("stash:#{path}") do |stash_exists|
|
|
35
38
|
if stash_exists
|
|
36
39
|
@redis.srem("stashes", path) do
|
|
@@ -44,6 +47,7 @@ module Sensu
|
|
|
44
47
|
end
|
|
45
48
|
end
|
|
46
49
|
|
|
50
|
+
# GET /stashes
|
|
47
51
|
def get_stashes
|
|
48
52
|
@response_content = []
|
|
49
53
|
@redis.smembers("stashes") do |stashes|
|
|
@@ -74,6 +78,7 @@ module Sensu
|
|
|
74
78
|
end
|
|
75
79
|
end
|
|
76
80
|
|
|
81
|
+
# POST /stashes
|
|
77
82
|
def post_stashes
|
|
78
83
|
rules = {
|
|
79
84
|
:path => {:type => String, :nil_ok => false},
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
require "sensu/api/validators/invalid"
|
|
1
2
|
require "sensu/settings/rules"
|
|
2
3
|
require "sensu/settings/validators/client"
|
|
3
4
|
|
|
4
5
|
module Sensu
|
|
5
6
|
module API
|
|
6
7
|
module Validators
|
|
7
|
-
# The error class for validation.
|
|
8
|
-
class Invalid < RuntimeError; end
|
|
9
|
-
|
|
10
8
|
class Client
|
|
11
9
|
# Include Sensu Settings rules and client validator.
|
|
12
10
|
include Sensu::Settings::Rules
|
data/lib/sensu/client/process.rb
CHANGED
|
@@ -131,21 +131,24 @@ module Sensu
|
|
|
131
131
|
# the result. This method guards against multiple executions for
|
|
132
132
|
# the same check. Check attribute value tokens are substituted
|
|
133
133
|
# with the associated client attribute values, via
|
|
134
|
-
# `object_substitute_tokens()`.
|
|
135
|
-
#
|
|
136
|
-
#
|
|
137
|
-
# unmatched tokens
|
|
134
|
+
# `object_substitute_tokens()`. The original check command is
|
|
135
|
+
# always published, to guard against publishing
|
|
136
|
+
# sensitive/redacted client attribute values. If there are
|
|
137
|
+
# unmatched check attribute value tokens, the check will not be
|
|
138
|
+
# executed, instead a check result will be published reporting
|
|
139
|
+
# the unmatched tokens.
|
|
138
140
|
#
|
|
139
141
|
# @param check [Hash]
|
|
140
142
|
def execute_check_command(check)
|
|
141
143
|
@logger.debug("attempting to execute check command", :check => check)
|
|
142
144
|
unless @checks_in_progress.include?(check[:name])
|
|
143
145
|
@checks_in_progress << check[:name]
|
|
144
|
-
|
|
146
|
+
substituted, unmatched_tokens = object_substitute_tokens(check.dup)
|
|
147
|
+
check = substituted.merge(:command => check[:command])
|
|
145
148
|
if unmatched_tokens.empty?
|
|
146
149
|
started = Time.now.to_f
|
|
147
150
|
check[:executed] = started.to_i
|
|
148
|
-
Spawn.process(
|
|
151
|
+
Spawn.process(substituted[:command], :timeout => check[:timeout]) do |output, status|
|
|
149
152
|
check[:duration] = ("%.3f" % (Time.now.to_f - started)).to_f
|
|
150
153
|
check[:output] = output
|
|
151
154
|
check[:status] = status
|
data/lib/sensu/constants.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sensu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.25.0.
|
|
4
|
+
version: 0.25.0.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean Porter
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-06-
|
|
12
|
+
date: 2016-06-13 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: eventmachine
|
|
@@ -244,7 +244,8 @@ files:
|
|
|
244
244
|
- lib/sensu/api/utilities/publish_check_result.rb
|
|
245
245
|
- lib/sensu/api/utilities/resolve_event.rb
|
|
246
246
|
- lib/sensu/api/utilities/transport_info.rb
|
|
247
|
-
- lib/sensu/api/validators.rb
|
|
247
|
+
- lib/sensu/api/validators/client.rb
|
|
248
|
+
- lib/sensu/api/validators/invalid.rb
|
|
248
249
|
- lib/sensu/cli.rb
|
|
249
250
|
- lib/sensu/client/process.rb
|
|
250
251
|
- lib/sensu/client/socket.rb
|