sensu 0.18.1-java → 0.19.0.beta.1-java
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 +35 -0
- data/lib/sensu/api/process.rb +61 -0
- data/lib/sensu/client/process.rb +30 -8
- data/lib/sensu/constants.rb +1 -1
- data/lib/sensu/daemon.rb +11 -8
- data/lib/sensu/redis.rb +2 -2
- data/lib/sensu/server/process.rb +71 -5
- data/sensu.gemspec +5 -5
- metadata +61 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b14366e10ecd072a11321772c05290328d02a5d
|
4
|
+
data.tar.gz: d60538ee8e8fcc18f721d4c6bd89be1306804750
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 599e6341ce3a3c4f6c7260204d3daf92d6d812f2c747854bc8ef01372ff2cdeb1da08f3bb414bd002866a7640008f69d7057acdd65af41c32e437d6ad38ee54e
|
7
|
+
data.tar.gz: 2983af3cd6f4920658f4aa833af423e0dd7942a7562c187c4edfab32b56d643fd465b089a703cf171869034b2df837c0830c597b2b40d6fa32e2c6e8232edfde
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,38 @@
|
|
1
|
+
## 0.19.0 - TBD
|
2
|
+
|
3
|
+
### Features
|
4
|
+
|
5
|
+
Redis Sensu transport, a built-in alternative to the default RabbitMQ
|
6
|
+
transport. The Redis transport is currently considered experimental.
|
7
|
+
Configuring the transport name to be `redis` will enable the Redis
|
8
|
+
transport instead of RabbitMQ, e.g. `{"transport": {"name": "redis"}}`.
|
9
|
+
|
10
|
+
Round-robin client subscriptions, allowing check requests to be sent to a
|
11
|
+
single client in a subscription in a round-robin fashion. To create a
|
12
|
+
round-robin subscription, start its name with `roundrobin:` to specify the
|
13
|
+
type, e.g. "roundrobin:elasticsearch". Any check that targets the
|
14
|
+
"roundrobin:elasticsearch" subscription will have its check requests sent
|
15
|
+
to clients in a round-robin fashion.
|
16
|
+
|
17
|
+
Stale check result detection, using a defined check `ttl` and stored check
|
18
|
+
results. Sensu is now able to monitor check results, ensuring that checks
|
19
|
+
with a defined TTL (time to live) continue to be executed by clients. For
|
20
|
+
example, a standalone check could have an interval of 30 seconds and a ttl
|
21
|
+
of 50 seconds, Sensu would expect a result at least once every 50 seconds.
|
22
|
+
|
23
|
+
Check results API routes/endpoints: `/results`, `/results/:client`, and
|
24
|
+
`/results/:client/:check`. These new check result API routes/endpoints
|
25
|
+
enable new tooling, such as green light dashboards.
|
26
|
+
|
27
|
+
### Other
|
28
|
+
|
29
|
+
POSIX spawn libraries are now loaded upfront/immediately, not at child
|
30
|
+
process creation. This removes the possibility of load race conditions
|
31
|
+
when real threads are used.
|
32
|
+
|
33
|
+
Many Ruby EventMachine fixes and improvements, including FD_CLOEXEC for
|
34
|
+
the Sensu client UDP socket.
|
35
|
+
|
1
36
|
## 0.18.1 - 2015-05-11
|
2
37
|
|
3
38
|
### Other
|
data/lib/sensu/api/process.rb
CHANGED
@@ -725,6 +725,67 @@ module Sensu
|
|
725
725
|
end
|
726
726
|
end
|
727
727
|
end
|
728
|
+
|
729
|
+
aget "/results/?" do
|
730
|
+
response = Array.new
|
731
|
+
settings.redis.smembers("clients") do |clients|
|
732
|
+
unless clients.empty?
|
733
|
+
clients.each_with_index do |client_name, client_index|
|
734
|
+
settings.redis.smembers("result:#{client_name}") do |checks|
|
735
|
+
unless checks.empty?
|
736
|
+
checks.each_with_index do |check_name, check_index|
|
737
|
+
result_key = "result:#{client_name}:#{check_name}"
|
738
|
+
settings.redis.get(result_key) do |result_json|
|
739
|
+
check = MultiJson.load(result_json)
|
740
|
+
response << {:client => client_name, :check => check}
|
741
|
+
if client_index == clients.size - 1 && check_index == checks.size - 1
|
742
|
+
body MultiJson.dump(response)
|
743
|
+
end
|
744
|
+
end
|
745
|
+
end
|
746
|
+
else
|
747
|
+
body MultiJson.dump(response)
|
748
|
+
end
|
749
|
+
end
|
750
|
+
end
|
751
|
+
else
|
752
|
+
body MultiJson.dump(response)
|
753
|
+
end
|
754
|
+
end
|
755
|
+
end
|
756
|
+
|
757
|
+
aget %r{^/results?/([\w\.-]+)/?$} do |client_name|
|
758
|
+
response = Array.new
|
759
|
+
settings.redis.smembers("result:#{client_name}") do |checks|
|
760
|
+
unless checks.empty?
|
761
|
+
checks.each_with_index do |check_name, check_index|
|
762
|
+
result_key = "result:#{client_name}:#{check_name}"
|
763
|
+
settings.redis.get(result_key) do |result_json|
|
764
|
+
check = MultiJson.load(result_json)
|
765
|
+
response << {:client => client_name, :check => check}
|
766
|
+
if check_index == checks.size - 1
|
767
|
+
body MultiJson.dump(response)
|
768
|
+
end
|
769
|
+
end
|
770
|
+
end
|
771
|
+
else
|
772
|
+
not_found!
|
773
|
+
end
|
774
|
+
end
|
775
|
+
end
|
776
|
+
|
777
|
+
aget %r{^/results?/([\w\.-]+)/([\w\.-]+)/?$} do |client_name, check_name|
|
778
|
+
result_key = "result:#{client_name}:#{check_name}"
|
779
|
+
settings.redis.get(result_key) do |result_json|
|
780
|
+
unless result_json.nil?
|
781
|
+
check = MultiJson.load(result_json)
|
782
|
+
response = {:client => client_name, :check => check}
|
783
|
+
body MultiJson.dump(response)
|
784
|
+
else
|
785
|
+
not_found!
|
786
|
+
end
|
787
|
+
end
|
788
|
+
end
|
728
789
|
end
|
729
790
|
end
|
730
791
|
end
|
data/lib/sensu/client/process.rb
CHANGED
@@ -233,20 +233,42 @@ module Sensu
|
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
|
+
# Determine the Sensu transport subscribe options for a
|
237
|
+
# subscription. If a subscription begins with a transport pipe
|
238
|
+
# type, either "direct:" or "roundrobin:", the subscription uses
|
239
|
+
# a direct transport pipe, and the subscription name is used for
|
240
|
+
# both the pipe and the funnel names. If a subscription does not
|
241
|
+
# specify a transport pipe type, a fanout transport pipe is
|
242
|
+
# used, the subscription name is used for the pipe, and a unique
|
243
|
+
# funnel is created for the Sensu client. The unique funnel name
|
244
|
+
# for the Sensu client is created using a combination of the
|
245
|
+
# client name, the Sensu version, and the process start time
|
246
|
+
# (epoch).
|
247
|
+
#
|
248
|
+
# @param subscription [String]
|
249
|
+
# @return [Array] containing the transport subscribe options:
|
250
|
+
# the transport pipe type, pipe, and funnel.
|
251
|
+
def transport_subscribe_options(subscription)
|
252
|
+
_, raw_type = subscription.split(":", 2).reverse
|
253
|
+
case raw_type
|
254
|
+
when "direct", "roundrobin"
|
255
|
+
[:direct, subscription, subscription]
|
256
|
+
else
|
257
|
+
funnel = [@settings[:client][:name], VERSION, start_time].join("-")
|
258
|
+
[:fanout, subscription, funnel]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
236
262
|
# Set up Sensu client subscriptions. Subscriptions determine the
|
237
|
-
# kinds of check requests the client will receive.
|
238
|
-
# transport funnel is created for the Sensu client, using a
|
239
|
-
# combination of it's name, the Sensu version, and the current
|
240
|
-
# timestamp (epoch). The unique funnel is bound to each
|
241
|
-
# transport pipe, named after the client subscription. The Sensu
|
263
|
+
# kinds of check requests the client will receive. The Sensu
|
242
264
|
# client will receive JSON serialized check requests from its
|
243
|
-
#
|
265
|
+
# subscriptions, that get parsed and processed.
|
244
266
|
def setup_subscriptions
|
245
267
|
@logger.debug("subscribing to client subscriptions")
|
246
268
|
@settings[:client][:subscriptions].each do |subscription|
|
247
269
|
@logger.debug("subscribing to a subscription", :subscription => subscription)
|
248
|
-
|
249
|
-
@transport.subscribe(
|
270
|
+
options = transport_subscribe_options(subscription)
|
271
|
+
@transport.subscribe(*options) do |message_info, message|
|
250
272
|
begin
|
251
273
|
check = MultiJson.load(message)
|
252
274
|
@logger.info("received check request", :check => check)
|
data/lib/sensu/constants.rb
CHANGED
data/lib/sensu/daemon.rb
CHANGED
@@ -2,13 +2,13 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
gem "multi_json", "1.11.0"
|
4
4
|
|
5
|
-
gem "sensu-em", "2.
|
5
|
+
gem "sensu-em", "2.5.0.beta"
|
6
6
|
gem "sensu-logger", "1.0.0"
|
7
|
-
gem "sensu-settings", "1.
|
7
|
+
gem "sensu-settings", "1.9.0"
|
8
8
|
gem "sensu-extension", "1.1.2"
|
9
9
|
gem "sensu-extensions", "1.2.0"
|
10
|
-
gem "sensu-transport", "
|
11
|
-
gem "sensu-spawn", "1.
|
10
|
+
gem "sensu-transport", "3.0.0"
|
11
|
+
gem "sensu-spawn", "1.2.0"
|
12
12
|
|
13
13
|
require "time"
|
14
14
|
require "uri"
|
@@ -31,13 +31,16 @@ module Sensu
|
|
31
31
|
module Daemon
|
32
32
|
include Utilities
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
#
|
37
|
-
#
|
34
|
+
attr_reader :start_time
|
35
|
+
|
36
|
+
# Initialize the Sensu process. Set the start time, initial
|
37
|
+
# service state, set up the logger, load settings, load
|
38
|
+
# extensions, and optionally daemonize the process and/or create a
|
39
|
+
# PID file. A subclass may override this method.
|
38
40
|
#
|
39
41
|
# @param options [Hash]
|
40
42
|
def initialize(options={})
|
43
|
+
@start_time = Time.now.to_i
|
41
44
|
@state = :initializing
|
42
45
|
@timers = {:run => []}
|
43
46
|
setup_logger(options)
|
data/lib/sensu/redis.rb
CHANGED
data/lib/sensu/server/process.rb
CHANGED
@@ -436,6 +436,26 @@ module Sensu
|
|
436
436
|
end
|
437
437
|
end
|
438
438
|
|
439
|
+
# Determine the Sensu transport publish options for a
|
440
|
+
# subscription. If a subscription begins with a transport pipe
|
441
|
+
# type, either "direct:" or "roundrobin:", the subscription uses
|
442
|
+
# a direct transport pipe. If a subscription does not specify a
|
443
|
+
# transport pipe type, a fanout transport pipe is used.
|
444
|
+
#
|
445
|
+
# @param subscription [String]
|
446
|
+
# @return [Array] containing the transport publish options:
|
447
|
+
# the transport pipe type, pipe, and the message to be
|
448
|
+
# published.
|
449
|
+
def transport_publish_options(subscription, message)
|
450
|
+
_, raw_type = subscription.split(":", 2).reverse
|
451
|
+
case raw_type
|
452
|
+
when "direct", "roundrobin"
|
453
|
+
[:direct, subscription, message]
|
454
|
+
else
|
455
|
+
[:fanout, subscription, message]
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
439
459
|
# Publish a check request to the transport. A check request is
|
440
460
|
# composted of a check `:name`, an `:issued` timestamp, and a
|
441
461
|
# check `:command` if available. The check request is published
|
@@ -456,7 +476,8 @@ module Sensu
|
|
456
476
|
:subscribers => check[:subscribers]
|
457
477
|
})
|
458
478
|
check[:subscribers].each do |subscription|
|
459
|
-
|
479
|
+
options = transport_publish_options(subscription, MultiJson.dump(payload))
|
480
|
+
@transport.publish(*options) do |info|
|
460
481
|
if info[:error]
|
461
482
|
@logger.error("failed to publish check request", {
|
462
483
|
:subscription => subscription,
|
@@ -527,11 +548,11 @@ module Sensu
|
|
527
548
|
# serialization is used when publishing the check result payload
|
528
549
|
# to the transport pipe. Transport errors are logged.
|
529
550
|
#
|
530
|
-
# @param
|
551
|
+
# @param client_name [String]
|
531
552
|
# @param check [Hash]
|
532
|
-
def publish_check_result(
|
553
|
+
def publish_check_result(client_name, check)
|
533
554
|
payload = {
|
534
|
-
:client =>
|
555
|
+
:client => client_name,
|
535
556
|
:check => check
|
536
557
|
}
|
537
558
|
@logger.debug("publishing check result", :payload => payload)
|
@@ -606,7 +627,7 @@ module Sensu
|
|
606
627
|
check[:output] << "#{time_since_last_keepalive} seconds ago"
|
607
628
|
check[:status] = 0
|
608
629
|
end
|
609
|
-
publish_check_result(client, check)
|
630
|
+
publish_check_result(client[:name], check)
|
610
631
|
end
|
611
632
|
end
|
612
633
|
end
|
@@ -623,6 +644,50 @@ module Sensu
|
|
623
644
|
end
|
624
645
|
end
|
625
646
|
|
647
|
+
# Determine stale check results, those that have not executed in
|
648
|
+
# a specified amount of time (check TTL). This method iterates
|
649
|
+
# through the client registry and check results for checks with
|
650
|
+
# a defined TTL value (in seconds). If a check result has a
|
651
|
+
# defined TTL, the time since last check execution (in seconds)
|
652
|
+
# is calculated. If the time since last execution is equal to or
|
653
|
+
# greater than the check TTL, a warning check result is
|
654
|
+
# published with the appropriate check output.
|
655
|
+
def determine_stale_check_results
|
656
|
+
@logger.info("determining stale check results")
|
657
|
+
@redis.smembers("clients") do |clients|
|
658
|
+
clients.each do |client_name|
|
659
|
+
@redis.smembers("result:#{client_name}") do |checks|
|
660
|
+
checks.each do |check_name|
|
661
|
+
result_key = "#{client_name}:#{check_name}"
|
662
|
+
@redis.get("result:#{result_key}") do |result_json|
|
663
|
+
unless result_json.nil?
|
664
|
+
check = MultiJson.load(result_json)
|
665
|
+
next unless check[:ttl] && check[:executed]
|
666
|
+
time_since_last_execution = Time.now.to_i - check[:executed]
|
667
|
+
if time_since_last_execution >= check[:ttl]
|
668
|
+
check[:output] = "Last check execution was "
|
669
|
+
check[:output] << "#{time_since_last_execution} seconds ago"
|
670
|
+
check[:status] = 1
|
671
|
+
publish_check_result(client_name, check)
|
672
|
+
end
|
673
|
+
end
|
674
|
+
end
|
675
|
+
end
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
# Set up the check result monitor, a periodic timer to run
|
682
|
+
# `determine_stale_check_results()` every 30 seconds. The timer
|
683
|
+
# is stored in the timers hash under `:leader`.
|
684
|
+
def setup_check_result_monitor
|
685
|
+
@logger.debug("monitoring check results")
|
686
|
+
@timers[:leader] << EM::PeriodicTimer.new(30) do
|
687
|
+
determine_stale_check_results
|
688
|
+
end
|
689
|
+
end
|
690
|
+
|
626
691
|
# Prune check result aggregations (aggregates). Sensu only
|
627
692
|
# stores the 20 latest aggregations for a check, to keep the
|
628
693
|
# amount of data stored to a minimum.
|
@@ -672,6 +737,7 @@ module Sensu
|
|
672
737
|
def leader_duties
|
673
738
|
setup_check_request_publisher
|
674
739
|
setup_client_monitor
|
740
|
+
setup_check_result_monitor
|
675
741
|
setup_check_result_aggregation_pruner
|
676
742
|
end
|
677
743
|
|
data/sensu.gemspec
CHANGED
@@ -17,14 +17,14 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency "multi_json", "1.11.0"
|
18
18
|
s.add_dependency "uuidtools", "2.1.4"
|
19
19
|
s.add_dependency "eventmachine", "1.0.3"
|
20
|
-
s.add_dependency "sensu-em", "2.
|
20
|
+
s.add_dependency "sensu-em", "2.5.0.beta"
|
21
21
|
s.add_dependency "sensu-logger", "1.0.0"
|
22
|
-
s.add_dependency "sensu-settings", "1.
|
22
|
+
s.add_dependency "sensu-settings", "1.9.0"
|
23
23
|
s.add_dependency "sensu-extension", "1.1.2"
|
24
24
|
s.add_dependency "sensu-extensions", "1.2.0"
|
25
|
-
s.add_dependency "sensu-transport", "
|
26
|
-
s.add_dependency "sensu-spawn", "1.
|
27
|
-
s.add_dependency "em-redis-unified", "0.
|
25
|
+
s.add_dependency "sensu-transport", "3.0.0"
|
26
|
+
s.add_dependency "sensu-spawn", "1.2.0"
|
27
|
+
s.add_dependency "em-redis-unified", "1.0.0"
|
28
28
|
s.add_dependency "sinatra", "1.4.6"
|
29
29
|
s.add_dependency "async_sinatra", "1.2.0"
|
30
30
|
s.add_dependency "thin", "1.5.0" unless RUBY_PLATFORM =~ /java/
|
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.
|
4
|
+
version: 0.19.0.beta.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Sean Porter
|
@@ -9,232 +9,232 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-05-
|
12
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name: multi_json
|
16
|
-
version_requirements: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - '='
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 1.11.0
|
21
15
|
requirement: !ruby/object:Gem::Requirement
|
22
16
|
requirements:
|
23
17
|
- - '='
|
24
18
|
- !ruby/object:Gem::Version
|
25
19
|
version: 1.11.0
|
20
|
+
name: multi_json
|
26
21
|
prerelease: false
|
27
22
|
type: :runtime
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: uuidtools
|
30
23
|
version_requirements: !ruby/object:Gem::Requirement
|
31
24
|
requirements:
|
32
25
|
- - '='
|
33
26
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
27
|
+
version: 1.11.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - '='
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: 2.1.4
|
34
|
+
name: uuidtools
|
40
35
|
prerelease: false
|
41
36
|
type: :runtime
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: eventmachine
|
44
37
|
version_requirements: !ruby/object:Gem::Requirement
|
45
38
|
requirements:
|
46
39
|
- - '='
|
47
40
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.
|
41
|
+
version: 2.1.4
|
42
|
+
- !ruby/object:Gem::Dependency
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - '='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 1.0.3
|
48
|
+
name: eventmachine
|
54
49
|
prerelease: false
|
55
50
|
type: :runtime
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: sensu-em
|
58
51
|
version_requirements: !ruby/object:Gem::Requirement
|
59
52
|
requirements:
|
60
53
|
- - '='
|
61
54
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
55
|
+
version: 1.0.3
|
56
|
+
- !ruby/object:Gem::Dependency
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - '='
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version: 2.
|
61
|
+
version: 2.5.0.beta
|
62
|
+
name: sensu-em
|
68
63
|
prerelease: false
|
69
64
|
type: :runtime
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: sensu-logger
|
72
65
|
version_requirements: !ruby/object:Gem::Requirement
|
73
66
|
requirements:
|
74
67
|
- - '='
|
75
68
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
69
|
+
version: 2.5.0.beta
|
70
|
+
- !ruby/object:Gem::Dependency
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
73
|
- - '='
|
80
74
|
- !ruby/object:Gem::Version
|
81
75
|
version: 1.0.0
|
76
|
+
name: sensu-logger
|
82
77
|
prerelease: false
|
83
78
|
type: :runtime
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: sensu-settings
|
86
79
|
version_requirements: !ruby/object:Gem::Requirement
|
87
80
|
requirements:
|
88
81
|
- - '='
|
89
82
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.
|
83
|
+
version: 1.0.0
|
84
|
+
- !ruby/object:Gem::Dependency
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
87
|
- - '='
|
94
88
|
- !ruby/object:Gem::Version
|
95
|
-
version: 1.
|
89
|
+
version: 1.9.0
|
90
|
+
name: sensu-settings
|
96
91
|
prerelease: false
|
97
92
|
type: :runtime
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: sensu-extension
|
100
93
|
version_requirements: !ruby/object:Gem::Requirement
|
101
94
|
requirements:
|
102
95
|
- - '='
|
103
96
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
97
|
+
version: 1.9.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
106
100
|
requirements:
|
107
101
|
- - '='
|
108
102
|
- !ruby/object:Gem::Version
|
109
103
|
version: 1.1.2
|
104
|
+
name: sensu-extension
|
110
105
|
prerelease: false
|
111
106
|
type: :runtime
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: sensu-extensions
|
114
107
|
version_requirements: !ruby/object:Gem::Requirement
|
115
108
|
requirements:
|
116
109
|
- - '='
|
117
110
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.2
|
111
|
+
version: 1.1.2
|
112
|
+
- !ruby/object:Gem::Dependency
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
115
|
- - '='
|
122
116
|
- !ruby/object:Gem::Version
|
123
117
|
version: 1.2.0
|
118
|
+
name: sensu-extensions
|
124
119
|
prerelease: false
|
125
120
|
type: :runtime
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: sensu-transport
|
128
121
|
version_requirements: !ruby/object:Gem::Requirement
|
129
122
|
requirements:
|
130
123
|
- - '='
|
131
124
|
- !ruby/object:Gem::Version
|
132
|
-
version: 2.
|
125
|
+
version: 1.2.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
129
|
- - '='
|
136
130
|
- !ruby/object:Gem::Version
|
137
|
-
version:
|
131
|
+
version: 3.0.0
|
132
|
+
name: sensu-transport
|
138
133
|
prerelease: false
|
139
134
|
type: :runtime
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: sensu-spawn
|
142
135
|
version_requirements: !ruby/object:Gem::Requirement
|
143
136
|
requirements:
|
144
137
|
- - '='
|
145
138
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
139
|
+
version: 3.0.0
|
140
|
+
- !ruby/object:Gem::Dependency
|
147
141
|
requirement: !ruby/object:Gem::Requirement
|
148
142
|
requirements:
|
149
143
|
- - '='
|
150
144
|
- !ruby/object:Gem::Version
|
151
|
-
version: 1.
|
145
|
+
version: 1.2.0
|
146
|
+
name: sensu-spawn
|
152
147
|
prerelease: false
|
153
148
|
type: :runtime
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: em-redis-unified
|
156
149
|
version_requirements: !ruby/object:Gem::Requirement
|
157
150
|
requirements:
|
158
151
|
- - '='
|
159
152
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
153
|
+
version: 1.2.0
|
154
|
+
- !ruby/object:Gem::Dependency
|
161
155
|
requirement: !ruby/object:Gem::Requirement
|
162
156
|
requirements:
|
163
157
|
- - '='
|
164
158
|
- !ruby/object:Gem::Version
|
165
|
-
version: 0.
|
159
|
+
version: 1.0.0
|
160
|
+
name: em-redis-unified
|
166
161
|
prerelease: false
|
167
162
|
type: :runtime
|
168
|
-
- !ruby/object:Gem::Dependency
|
169
|
-
name: sinatra
|
170
163
|
version_requirements: !ruby/object:Gem::Requirement
|
171
164
|
requirements:
|
172
165
|
- - '='
|
173
166
|
- !ruby/object:Gem::Version
|
174
|
-
version: 1.
|
167
|
+
version: 1.0.0
|
168
|
+
- !ruby/object:Gem::Dependency
|
175
169
|
requirement: !ruby/object:Gem::Requirement
|
176
170
|
requirements:
|
177
171
|
- - '='
|
178
172
|
- !ruby/object:Gem::Version
|
179
173
|
version: 1.4.6
|
174
|
+
name: sinatra
|
180
175
|
prerelease: false
|
181
176
|
type: :runtime
|
182
|
-
- !ruby/object:Gem::Dependency
|
183
|
-
name: async_sinatra
|
184
177
|
version_requirements: !ruby/object:Gem::Requirement
|
185
178
|
requirements:
|
186
179
|
- - '='
|
187
180
|
- !ruby/object:Gem::Version
|
188
|
-
version: 1.
|
181
|
+
version: 1.4.6
|
182
|
+
- !ruby/object:Gem::Dependency
|
189
183
|
requirement: !ruby/object:Gem::Requirement
|
190
184
|
requirements:
|
191
185
|
- - '='
|
192
186
|
- !ruby/object:Gem::Version
|
193
187
|
version: 1.2.0
|
188
|
+
name: async_sinatra
|
194
189
|
prerelease: false
|
195
190
|
type: :runtime
|
196
|
-
- !ruby/object:Gem::Dependency
|
197
|
-
name: rake
|
198
191
|
version_requirements: !ruby/object:Gem::Requirement
|
199
192
|
requirements:
|
200
|
-
- -
|
193
|
+
- - '='
|
201
194
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
195
|
+
version: 1.2.0
|
196
|
+
- !ruby/object:Gem::Dependency
|
203
197
|
requirement: !ruby/object:Gem::Requirement
|
204
198
|
requirements:
|
205
199
|
- - ~>
|
206
200
|
- !ruby/object:Gem::Version
|
207
201
|
version: '10.3'
|
202
|
+
name: rake
|
208
203
|
prerelease: false
|
209
204
|
type: :development
|
210
|
-
- !ruby/object:Gem::Dependency
|
211
|
-
name: rspec
|
212
205
|
version_requirements: !ruby/object:Gem::Requirement
|
213
206
|
requirements:
|
214
207
|
- - ~>
|
215
208
|
- !ruby/object:Gem::Version
|
216
|
-
version: 3
|
209
|
+
version: '10.3'
|
210
|
+
- !ruby/object:Gem::Dependency
|
217
211
|
requirement: !ruby/object:Gem::Requirement
|
218
212
|
requirements:
|
219
213
|
- - ~>
|
220
214
|
- !ruby/object:Gem::Version
|
221
215
|
version: 3.0.0
|
216
|
+
name: rspec
|
222
217
|
prerelease: false
|
223
218
|
type: :development
|
224
|
-
- !ruby/object:Gem::Dependency
|
225
|
-
name: em-http-request
|
226
219
|
version_requirements: !ruby/object:Gem::Requirement
|
227
220
|
requirements:
|
228
221
|
- - ~>
|
229
222
|
- !ruby/object:Gem::Version
|
230
|
-
version:
|
223
|
+
version: 3.0.0
|
224
|
+
- !ruby/object:Gem::Dependency
|
231
225
|
requirement: !ruby/object:Gem::Requirement
|
232
226
|
requirements:
|
233
227
|
- - ~>
|
234
228
|
- !ruby/object:Gem::Version
|
235
229
|
version: '1.1'
|
230
|
+
name: em-http-request
|
236
231
|
prerelease: false
|
237
232
|
type: :development
|
233
|
+
version_requirements: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ~>
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '1.1'
|
238
238
|
description: A monitoring framework that aims to be simple, malleable, and scalable.
|
239
239
|
email:
|
240
240
|
- portertech@gmail.com
|
@@ -283,9 +283,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
283
283
|
version: '0'
|
284
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
285
|
requirements:
|
286
|
-
- - '
|
286
|
+
- - '>'
|
287
287
|
- !ruby/object:Gem::Version
|
288
|
-
version:
|
288
|
+
version: 1.3.1
|
289
289
|
requirements: []
|
290
290
|
rubyforge_project:
|
291
291
|
rubygems_version: 2.1.9
|