sensu 1.3.3 → 1.4.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: 4bc380a6f75dc29373bc57a1dec0a139392c2e60
4
- data.tar.gz: 73e77c54ac9c87e1c763a43c4695b51d7deaf67f
3
+ metadata.gz: 4df9a85ddc254d1263f15db61a541de388de666b
4
+ data.tar.gz: 4d3437ab1679588fbdc302eb31212e7d7354f5b0
5
5
  SHA512:
6
- metadata.gz: c9fb11006abf46863bbe65c92b28ed19ae08f83ce492833fed6fb98c7afb957dfd9ffce87cd69aa923088954855d3a70f70f6392e0f80798a9b979fe4868a7ea
7
- data.tar.gz: a1bb1a15629a9c8008b1a6acdf9268539492404a0fe0f35a1f264f8c27ec4eeda6f2f981bca1bed1024ee54364f11695ac918ecf59b7e315d5d2147a551b208d
6
+ metadata.gz: '0958335b7aa9b62c2ecab2a1ca02c9f62a004ad9a47879a618fef67f0eb3bc1bc21126bfbfdcfebefe34d38decec7f45995cf3bd3c822fcd92541f84dffe2c74'
7
+ data.tar.gz: 32de7e4fcb1e8f51f0dde8ff54cb304a0c729e9560303fc56914ae8c91bff56750b11ea648213761705a6cb54bbc7cf9e5dc9dea17dd308246352010bde842a0
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.4.0] - 2018-05-02
9
+
10
+ ### Added
11
+ - Sensu call-home mechanism, the Tessen client (opt-in). It sends anonymized data about the Sensu installation to the Tessen hosted service (Sensu Inc), on sensu-server startup and every 6 hours thereafter. All data reports are logged for transparency/awareness and transmitted over HTTPS. The anonymized data currently includes the flavour of Sensu (Core or Enterprise), the Sensu version, and the Sensu client and server counts.
12
+ - API list endpoints (e.g. /events) now all support pagination.
13
+
14
+ ### Changed
15
+ - Support for writing multiple check results to the client socket (in one payload).
16
+ - Improved event last_ok, now updating the value when storing latest check results for better accuracy.
17
+
18
+ ### Fixed
19
+ - Include child process (e.g. check execution) stop (SIGTERM/KILL) error message in timeout output. This helps when debugging defunct/zombie processes, e.g. "Execution timed out - Unable to TERM/KILL the process: Operation not permitted".
20
+
8
21
  ## [1.3.3] - 2018-04-18
9
22
 
10
23
  ### Fixed
@@ -11,6 +11,7 @@ module Sensu
11
11
  # GET /aggregates
12
12
  def get_aggregates
13
13
  @redis.smembers("aggregates") do |aggregates|
14
+ aggregates = pagination(aggregates)
14
15
  aggregates.map! do |aggregate|
15
16
  {:name => aggregate}
16
17
  end
@@ -7,7 +7,8 @@ module Sensu
7
7
 
8
8
  # GET /checks
9
9
  def get_checks
10
- @response_content = @settings.checks.reject { |check| check[:standalone] }
10
+ checks = @settings.checks.reject { |check| check[:standalone] }
11
+ @response_content = pagination(checks)
11
12
  respond
12
13
  end
13
14
 
@@ -13,14 +13,19 @@ module Sensu
13
13
  # GET /events
14
14
  def get_events
15
15
  @response_content = []
16
+ raw_event_json = []
16
17
  @redis.smembers("clients") do |clients|
17
18
  unless clients.empty?
18
19
  clients.each_with_index do |client_name, index|
19
20
  @redis.hgetall("events:#{client_name}") do |events|
20
21
  events.each do |check_name, event_json|
21
- @response_content << Sensu::JSON.load(event_json)
22
+ raw_event_json << event_json
22
23
  end
23
24
  if index == clients.length - 1
25
+ raw_event_json = pagination(raw_event_json)
26
+ raw_event_json.each do |event_json|
27
+ @response_content << Sensu::JSON.load(event_json)
28
+ end
24
29
  respond
25
30
  end
26
31
  end
@@ -35,8 +40,13 @@ module Sensu
35
40
  def get_events_client
36
41
  client_name = parse_uri(EVENTS_CLIENT_URI).first
37
42
  @response_content = []
43
+ raw_event_json = []
38
44
  @redis.hgetall("events:#{client_name}") do |events|
39
45
  events.each do |check_name, event_json|
46
+ raw_event_json << event_json
47
+ end
48
+ raw_event_json = pagination(raw_event_json)
49
+ raw_event_json.each do |event_json|
40
50
  @response_content << Sensu::JSON.load(event_json)
41
51
  end
42
52
  respond
@@ -30,30 +30,35 @@ module Sensu
30
30
  @response_content = []
31
31
  @redis.smembers("clients") do |clients|
32
32
  unless clients.empty?
33
+ result_keys = []
33
34
  clients.each_with_index do |client_name, client_index|
34
35
  @redis.smembers("result:#{client_name}") do |checks|
35
- if !checks.empty?
36
- checks.each_with_index do |check_name, check_index|
37
- result_key = "result:#{client_name}:#{check_name}"
38
- @redis.get(result_key) do |result_json|
39
- history_key = "history:#{client_name}:#{check_name}"
40
- @redis.lrange(history_key, -21, -1) do |history|
41
- history.map! do |status|
42
- status.to_i
43
- end
44
- unless result_json.nil?
45
- check = Sensu::JSON.load(result_json)
46
- check[:history] = history
47
- @response_content << {:client => client_name, :check => check}
48
- end
49
- if client_index == clients.length - 1 && check_index == checks.length - 1
50
- respond
36
+ checks.each do |check_name|
37
+ result_keys << "result:#{client_name}:#{check_name}"
38
+ end
39
+ if client_index == clients.length - 1
40
+ result_keys = pagination(result_keys)
41
+ unless result_keys.empty?
42
+ result_keys.each_with_index do |result_key, result_key_index|
43
+ @redis.get(result_key) do |result_json|
44
+ _, client_name, check_name = result_key.split(":")
45
+ history_key = "history:#{client_name}:#{check_name}"
46
+ @redis.lrange(history_key, -21, -1) do |history|
47
+ history.map! do |status|
48
+ status.to_i
49
+ end
50
+ unless result_json.nil?
51
+ check = Sensu::JSON.load(result_json)
52
+ check[:history] = history
53
+ @response_content << {:client => client_name, :check => check}
54
+ end
55
+ if result_key_index == result_keys.length - 1
56
+ respond
57
+ end
51
58
  end
52
59
  end
53
60
  end
54
- end
55
- elsif client_index == clients.length - 1
56
- @redis.ping do
61
+ else
57
62
  respond
58
63
  end
59
64
  end
@@ -70,6 +75,7 @@ module Sensu
70
75
  client_name = parse_uri(RESULTS_CLIENT_URI).first
71
76
  @response_content = []
72
77
  @redis.smembers("result:#{client_name}") do |checks|
78
+ checks = pagination(checks)
73
79
  unless checks.empty?
74
80
  checks.each_with_index do |check_name, check_index|
75
81
  result_key = "result:#{client_name}:#{check_name}"
@@ -126,8 +132,11 @@ module Sensu
126
132
  if result_exists
127
133
  @redis.srem("result:#{client_name}", check_name) do
128
134
  @redis.del(result_key) do
129
- @redis.del("history:#{client_name}:#{check_name}") do
130
- no_content!
135
+ history_key = "history:#{client_name}:#{check_name}"
136
+ @redis.del(history_key) do
137
+ @redis.del("#{history_key}:last_ok") do
138
+ no_content!
139
+ end
131
140
  end
132
141
  end
133
142
  end
@@ -129,8 +129,14 @@ module Sensu
129
129
  end
130
130
  if @http[:content_type] and @http[:content_type].include?("application/json") and @http_content
131
131
  begin
132
- check = Sensu::JSON::load(@http_content)
133
- process_check_result(check)
132
+ object = Sensu::JSON::load(@http_content)
133
+ if object.is_a?(Array)
134
+ object.each do |check|
135
+ process_check_result(check)
136
+ end
137
+ else
138
+ process_check_result(object)
139
+ end
134
140
  send_response(202, "OK", {:response => "ok"})
135
141
  rescue Sensu::JSON::ParseError, ArgumentError
136
142
  send_response(400, "Failed to parse JSON body", {:response => "Failed to parse JSON body"})
@@ -116,16 +116,22 @@ module Sensu
116
116
  end
117
117
  end
118
118
 
119
- # Parse a JSON check result. For UDP, immediately raise a parser
120
- # error. For TCP, record parser errors, so the connection
121
- # +watchdog+ can report them.
119
+ # Parse one or more JSON check results. For UDP, immediately
120
+ # raise a parser error. For TCP, record parser errors, so the
121
+ # connection +watchdog+ can report them.
122
122
  #
123
123
  # @param [String] data to parse for a check result.
124
124
  def parse_check_result(data)
125
125
  begin
126
- check = Sensu::JSON.load(data)
126
+ object = Sensu::JSON.load(data)
127
127
  cancel_watchdog
128
- process_check_result(check)
128
+ if object.is_a?(Array)
129
+ object.each do |check|
130
+ process_check_result(check)
131
+ end
132
+ else
133
+ process_check_result(object)
134
+ end
129
135
  respond("ok")
130
136
  rescue Sensu::JSON::ParseError, ArgumentError => error
131
137
  if @protocol == :tcp
@@ -1,7 +1,7 @@
1
1
  module Sensu
2
2
  unless defined?(Sensu::VERSION)
3
3
  # Sensu release version.
4
- VERSION = "1.3.3".freeze
4
+ VERSION = "1.4.0".freeze
5
5
 
6
6
  # Sensu release information.
7
7
  RELEASE_INFO = {
data/lib/sensu/daemon.rb CHANGED
@@ -4,11 +4,11 @@ gem "eventmachine", "1.2.5"
4
4
 
5
5
  gem "sensu-json", "2.1.1"
6
6
  gem "sensu-logger", "1.2.2"
7
- gem "sensu-settings", "10.13.1"
7
+ gem "sensu-settings", "10.14.0"
8
8
  gem "sensu-extension", "1.5.2"
9
9
  gem "sensu-extensions", "1.9.1"
10
10
  gem "sensu-transport", "7.1.0"
11
- gem "sensu-spawn", "2.4.1"
11
+ gem "sensu-spawn", "2.5.0"
12
12
  gem "sensu-redis", "2.3.0"
13
13
 
14
14
  require "time"
@@ -2,6 +2,7 @@ require "sensu/daemon"
2
2
  require "sensu/server/filter"
3
3
  require "sensu/server/mutate"
4
4
  require "sensu/server/handle"
5
+ require "sensu/server/tessen"
5
6
 
6
7
  module Sensu
7
8
  module Server
@@ -374,6 +375,9 @@ module Sensu
374
375
  @redis.sadd("ttl", result_key) if check[:ttl]
375
376
  @redis.rpush(history_key, check[:status])
376
377
  @redis.ltrim(history_key, -21, -1)
378
+ if check[:status] == 0
379
+ @redis.set("#{history_key}:last_ok", check.fetch(:executed, Time.now.to_i))
380
+ end
377
381
  @redis.exec do
378
382
  yield
379
383
  end
@@ -395,6 +399,8 @@ module Sensu
395
399
  # result exit status codes.
396
400
  # @yieldparam total_state_change [Float] percentage for the
397
401
  # check history (exit status codes).
402
+ # @yieldparam last_ok [Integer] execution timestamp of the last
403
+ # OK check result.
398
404
  def check_history(client, check)
399
405
  history_key = "history:#{client[:name]}:#{check[:name]}"
400
406
  @redis.lrange(history_key, -21, -1) do |history|
@@ -412,7 +418,10 @@ module Sensu
412
418
  end
413
419
  total_state_change = (state_changes.fdiv(20) * 100).to_i
414
420
  end
415
- yield(history, total_state_change)
421
+ @redis.get("#{history_key}:last_ok") do |last_ok|
422
+ last_ok = last_ok.to_i unless last_ok.nil?
423
+ yield(history, total_state_change, last_ok)
424
+ end
416
425
  end
417
426
  end
418
427
 
@@ -544,29 +553,27 @@ module Sensu
544
553
  # resulting event.
545
554
  # @yieldparam event [Hash]
546
555
  def create_event(client, check)
547
- check_history(client, check) do |history, total_state_change|
556
+ check_history(client, check) do |history, total_state_change, last_ok|
548
557
  check[:history] = history
549
558
  check[:total_state_change] = total_state_change
550
559
  @redis.hget("events:#{client[:name]}", check[:name]) do |event_json|
551
560
  stored_event = event_json ? Sensu::JSON.load(event_json) : nil
552
561
  flapping = check_flapping?(stored_event, check)
553
562
  event = {
563
+ :id => random_uuid,
554
564
  :client => client,
555
565
  :check => check,
556
566
  :occurrences => 1,
557
567
  :occurrences_watermark => 1,
568
+ :last_ok => last_ok,
558
569
  :action => (flapping ? :flapping : :create),
559
570
  :timestamp => Time.now.to_i
560
571
  }
561
572
  if stored_event
562
573
  event[:id] = stored_event[:id]
563
574
  event[:last_state_change] = stored_event[:last_state_change]
564
- event[:last_ok] = stored_event[:last_ok]
565
575
  event[:occurrences] = stored_event[:occurrences]
566
576
  event[:occurrences_watermark] = stored_event[:occurrences_watermark] || event[:occurrences]
567
- else
568
- event[:id] = random_uuid
569
- event[:last_ok] = event[:timestamp]
570
577
  end
571
578
  if check[:status] != 0 || flapping
572
579
  if history[-1] == history[-2]
@@ -582,9 +589,6 @@ module Sensu
582
589
  event[:last_state_change] = event[:timestamp]
583
590
  event[:action] = :resolve
584
591
  end
585
- if check[:status] == 0
586
- event[:last_ok] = event[:timestamp]
587
- end
588
592
  event_silenced?(event) do |event|
589
593
  yield(event)
590
594
  end
@@ -1056,6 +1060,8 @@ module Sensu
1056
1060
  # configuration, it's deep merged with the defaults. The check
1057
1061
  # `:name`, `:issued`, and `:executed` values are always
1058
1062
  # overridden to guard against an invalid definition.
1063
+ #
1064
+ # @return [Array] check definition, unmatched client tokens
1059
1065
  def create_keepalive_check(client)
1060
1066
  check = {
1061
1067
  :thresholds => {
@@ -1073,7 +1079,8 @@ module Sensu
1073
1079
  check = deep_merge(check, client[:keepalive])
1074
1080
  end
1075
1081
  timestamp = Time.now.to_i
1076
- check.merge(:name => "keepalive", :issued => timestamp, :executed => timestamp)
1082
+ check.merge!(:name => "keepalive", :issued => timestamp, :executed => timestamp)
1083
+ object_substitute_tokens(check, client)
1077
1084
  end
1078
1085
 
1079
1086
  # Create client keepalive check results. This method will
@@ -1098,7 +1105,7 @@ module Sensu
1098
1105
  unless client_json.nil?
1099
1106
  client = Sensu::JSON.load(client_json)
1100
1107
  next if client[:keepalives] == false
1101
- check = create_keepalive_check(client)
1108
+ check, unmatched_tokens = create_keepalive_check(client)
1102
1109
  time_since_last_keepalive = Time.now.to_i - client[:timestamp]
1103
1110
  check[:output] = "No keepalive sent from client for "
1104
1111
  check[:output] << "#{time_since_last_keepalive} seconds"
@@ -1114,6 +1121,10 @@ module Sensu
1114
1121
  check[:output] << "#{time_since_last_keepalive} seconds ago"
1115
1122
  check[:status] = 0
1116
1123
  end
1124
+ unless unmatched_tokens.empty?
1125
+ check[:output] << " - Unmatched client token(s): " + unmatched_tokens.join(", ")
1126
+ check[:status] = 1 if check[:status] == 0
1127
+ end
1117
1128
  publish_check_result(client[:name], check)
1118
1129
  end
1119
1130
  end
@@ -1430,6 +1441,8 @@ module Sensu
1430
1441
  :hexdigest => @settings.hexdigest
1431
1442
  }
1432
1443
  )
1444
+ tessen = @settings[:tessen] || {}
1445
+ tessen_enabled = tessen.fetch(:enabled, false)
1433
1446
  info = {
1434
1447
  :id => server_id,
1435
1448
  :hostname => system_hostname,
@@ -1442,6 +1455,9 @@ module Sensu
1442
1455
  }
1443
1456
  },
1444
1457
  :sensu => sensu,
1458
+ :tessen => {
1459
+ :enabled => tessen_enabled
1460
+ },
1445
1461
  :timestamp => Time.now.to_i
1446
1462
  }
1447
1463
  @redis.sadd("servers", server_id)
@@ -1464,6 +1480,16 @@ module Sensu
1464
1480
  end
1465
1481
  end
1466
1482
 
1483
+ # Set up Tessen, the call home mechanism.
1484
+ def setup_tessen
1485
+ @tessen = Tessen.new(
1486
+ :settings => @settings,
1487
+ :logger => @logger,
1488
+ :redis => @redis
1489
+ )
1490
+ @tessen.run if @tessen.enabled?
1491
+ end
1492
+
1467
1493
  # Unsubscribe from transport subscriptions (all of them). This
1468
1494
  # method is called when there are issues with connectivity, or
1469
1495
  # the process is stopping.
@@ -1497,6 +1523,7 @@ module Sensu
1497
1523
  setup_results
1498
1524
  setup_task_elections
1499
1525
  setup_server_registry_updater
1526
+ setup_tessen
1500
1527
  @state = :running
1501
1528
  end
1502
1529
 
@@ -1513,10 +1540,10 @@ module Sensu
1513
1540
  # Pause the Sensu server process, unless it is being paused or
1514
1541
  # has already been paused. The process/daemon `@state` is first
1515
1542
  # set to `:pausing`, to indicate that it's in progress. All run
1516
- # timers are cancelled, and the references are cleared. The
1517
- # Sensu server will unsubscribe from all transport
1518
- # subscriptions, relinquish any Sensu server tasks, then set the
1519
- # process/daemon `@state` to `:paused`.
1543
+ # timers are cancelled, their references are cleared, and Tessen
1544
+ # is stopped. The Sensu server will unsubscribe from all
1545
+ # transport subscriptions, relinquish any Sensu server tasks,
1546
+ # then set the process/daemon `@state` to `:paused`.
1520
1547
  def pause
1521
1548
  unless @state == :pausing || @state == :paused
1522
1549
  @state = :pausing
@@ -1524,6 +1551,7 @@ module Sensu
1524
1551
  timer.cancel
1525
1552
  end
1526
1553
  @timers[:run].clear
1554
+ @tessen.stop if @tessen
1527
1555
  unsubscribe
1528
1556
  relinquish_tasks
1529
1557
  @state = :paused
@@ -0,0 +1,168 @@
1
+ require "em-http-request"
2
+ require "sensu/constants"
3
+
4
+ module Sensu
5
+ module Server
6
+ class Tessen
7
+ attr_accessor :settings, :logger, :redis, :options
8
+ attr_reader :timers
9
+
10
+ # Create a new instance of Tessen. The instance variable
11
+ # `@timers` is use to track EventMachine timers for
12
+ # stopping/shutdown.
13
+ #
14
+ # @param options [Hash] containing the Sensu server Settings,
15
+ # Logger, and Redis connection.
16
+ def initialize(options={})
17
+ @timers = []
18
+ @settings = options[:settings]
19
+ @logger = options[:logger]
20
+ @redis = options[:redis]
21
+ @options = @settings.to_hash.fetch(:tessen, {})
22
+ end
23
+
24
+ # Determine if Tessen is enabled (opt-in).
25
+ #
26
+ # @return [TrueClass, FalseClass]
27
+ def enabled?
28
+ enabled = @options[:enabled] == true
29
+ unless enabled
30
+ note = "tessen collects anonymized data to help inform the sensu team about installations"
31
+ note << " - you can opt-in via configuration: {\"tessen\": {\"enabled\": true}}"
32
+ @logger.info("the tessen call-home mechanism is not enabled", :note => note)
33
+ end
34
+ enabled
35
+ end
36
+
37
+ # Run Tessen, scheduling data reports (every 6h).
38
+ def run
39
+ schedule_data_reports
40
+ end
41
+
42
+ # Stop Tessen, cancelling and clearing timers.
43
+ def stop
44
+ @timers.each do |timer|
45
+ timer.cancel
46
+ end
47
+ @timers.clear
48
+ end
49
+
50
+ # Schedule data reports, sending data to the Tessen service
51
+ # immediately and then every 6 hours after that.
52
+ def schedule_data_reports
53
+ send_data
54
+ @timers << EM::PeriodicTimer.new(21600) do
55
+ send_data
56
+ end
57
+ end
58
+
59
+ # Send data to the Tessen service.
60
+ def send_data(&block)
61
+ create_data do |data|
62
+ tessen_api_request(data, &block)
63
+ end
64
+ end
65
+
66
+ # Create data to be sent to the Tessen service.
67
+ #
68
+ # @return [Hash]
69
+ def create_data
70
+ get_install_id do |install_id|
71
+ get_client_count do |client_count|
72
+ get_server_count do |server_count|
73
+ identity_key = @options.fetch(:identity_key, "")
74
+ flavour, version = get_version_info
75
+ timestamp = Time.now.to_i
76
+ data = {
77
+ :tessen_identity_key => identity_key,
78
+ :install => {
79
+ :id => install_id,
80
+ :sensu_flavour => flavour,
81
+ :sensu_version => version
82
+ },
83
+ :metrics => {
84
+ :points => [
85
+ {
86
+ :name => "client_count",
87
+ :value => client_count,
88
+ :timestamp => timestamp
89
+ },
90
+ {
91
+ :name => "server_count",
92
+ :value => server_count,
93
+ :timestamp => timestamp
94
+ }
95
+ ]
96
+ }
97
+ }
98
+ yield data
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ # Get the Sensu installation ID. The ID is randomly generated
105
+ # and stored in Redis. This ID provides context and allows
106
+ # multiple Sensu servers to report data for the same installation.
107
+ def get_install_id
108
+ @redis.setnx("tessen:install_id", rand(36**12).to_s(36)) do |created|
109
+ @redis.get("tessen:install_id") do |install_id|
110
+ yield install_id
111
+ end
112
+ end
113
+ end
114
+
115
+ # Get the Sensu client count for the installation. This count
116
+ # currently includes proxy clients.
117
+ #
118
+ # @yield [count]
119
+ # @yieldparam [Integer] client count
120
+ def get_client_count
121
+ @redis.scard("clients") do |count|
122
+ yield count.to_i
123
+ end
124
+ end
125
+
126
+ # Get the Sensu server count for the installation.
127
+ #
128
+ # @yield [count]
129
+ # @yieldparam [Integer] server count
130
+ def get_server_count
131
+ @redis.scard("servers") do |count|
132
+ yield count.to_i
133
+ end
134
+ end
135
+
136
+ # Get the Sensu version info for the local Sensu service.
137
+ def get_version_info
138
+ if defined?(Sensu::Enterprise::VERSION)
139
+ ["enterprise", Sensu::Enterprise::VERSION]
140
+ else
141
+ ["core", Sensu::VERSION]
142
+ end
143
+ end
144
+
145
+ # Make a Tessen service API request.
146
+ #
147
+ # @param data [Hash]
148
+ def tessen_api_request(data)
149
+ @logger.debug("sending data to the tessen call-home service", {
150
+ :data => data,
151
+ :options => @options
152
+ })
153
+ connection = {}
154
+ connection[:proxy] = @options[:proxy] if @options[:proxy]
155
+ post_options = {:body => Sensu::JSON.dump(data)}
156
+ http = EM::HttpRequest.new("https://tessen.sensu.io/v1/data", connection).post(post_options)
157
+ http.callback do
158
+ @logger.debug("tessen call-home service response", :status => http.response_header.status)
159
+ yield if block_given?
160
+ end
161
+ http.errback do
162
+ @logger.debug("tessen call-home service error", :error => http.error)
163
+ yield if block_given?
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
data/sensu.gemspec CHANGED
@@ -15,11 +15,11 @@ Gem::Specification.new do |s|
15
15
  s.add_dependency "eventmachine", "1.2.5"
16
16
  s.add_dependency "sensu-json", "2.1.1"
17
17
  s.add_dependency "sensu-logger", "1.2.2"
18
- s.add_dependency "sensu-settings", "10.13.1"
18
+ s.add_dependency "sensu-settings", "10.14.0"
19
19
  s.add_dependency "sensu-extension", "1.5.2"
20
20
  s.add_dependency "sensu-extensions", "1.9.1"
21
21
  s.add_dependency "sensu-transport", "7.1.0"
22
- s.add_dependency "sensu-spawn", "2.4.1"
22
+ s.add_dependency "sensu-spawn", "2.5.0"
23
23
  s.add_dependency "sensu-redis", "2.3.0"
24
24
  s.add_dependency "em-http-server", "0.1.8"
25
25
  s.add_dependency "parse-cron", "0.1.4"
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency "rspec", "~> 3.0.0"
29
29
  s.add_development_dependency "em-http-request", "~> 1.1"
30
30
  s.add_development_dependency "addressable", "2.3.8"
31
+ s.add_development_dependency "webmock", "3.3.0"
31
32
 
32
33
  s.files = Dir.glob("{exe,lib}/**/*") + %w[sensu.gemspec README.md CHANGELOG.md MIT-LICENSE.txt]
33
34
  s.executables = s.files.grep(%r{^exe/}) { |file| File.basename(file) }
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: 1.3.3
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
@@ -31,7 +31,7 @@ cert_chain:
31
31
  jOeGyhtQa9j4FFmsEJDg59f5v/3hECXsa3Xuml3foaFHzX3Ya/YIyd2YFxvkFKIu
32
32
  GVbe7A3YdxzdkH2Es/Ym9twdxXaIDdXzj8sWhw==
33
33
  -----END CERTIFICATE-----
34
- date: 2018-04-18 00:00:00.000000000 Z
34
+ date: 2018-05-03 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: eventmachine
@@ -81,14 +81,14 @@ dependencies:
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 10.13.1
84
+ version: 10.14.0
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 10.13.1
91
+ version: 10.14.0
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: sensu-extension
94
94
  requirement: !ruby/object:Gem::Requirement
@@ -137,14 +137,14 @@ dependencies:
137
137
  requirements:
138
138
  - - '='
139
139
  - !ruby/object:Gem::Version
140
- version: 2.4.1
140
+ version: 2.5.0
141
141
  type: :runtime
142
142
  prerelease: false
143
143
  version_requirements: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - '='
146
146
  - !ruby/object:Gem::Version
147
- version: 2.4.1
147
+ version: 2.5.0
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: sensu-redis
150
150
  requirement: !ruby/object:Gem::Requirement
@@ -243,6 +243,20 @@ dependencies:
243
243
  - - '='
244
244
  - !ruby/object:Gem::Version
245
245
  version: 2.3.8
246
+ - !ruby/object:Gem::Dependency
247
+ name: webmock
248
+ requirement: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - '='
251
+ - !ruby/object:Gem::Version
252
+ version: 3.3.0
253
+ type: :development
254
+ prerelease: false
255
+ version_requirements: !ruby/object:Gem::Requirement
256
+ requirements:
257
+ - - '='
258
+ - !ruby/object:Gem::Version
259
+ version: 3.3.0
246
260
  description: A monitoring framework that aims to be simple, malleable, and scalable.
247
261
  email:
248
262
  - portertech@gmail.com
@@ -301,6 +315,7 @@ files:
301
315
  - lib/sensu/server/mutate.rb
302
316
  - lib/sensu/server/process.rb
303
317
  - lib/sensu/server/socket.rb
318
+ - lib/sensu/server/tessen.rb
304
319
  - lib/sensu/utilities.rb
305
320
  - sensu.gemspec
306
321
  homepage: http://sensuapp.org
metadata.gz.sig CHANGED
@@ -1 +1 @@
1
- ?���o�?'��p�=y"�c��Xḣ���9YɊ��� ����q|�26M$����H.lzQ����֤��� ���71,d�� f�:f�����4��Xq ?��qrVhY��u�i�/y_̕&��J��$6fG��$���qIǨSʬ
1
+ {]�j-��������[���T�Y�O����E��h��+�1�̔5�� H��?����u㊃��B��گٞh��zq��m�F���~����B$w8tº�X@���^���\&���F���#<�4.T:���T��V�:E�������<K0�NJ��|�mZ��5K��� k[��_�k���u��|�+�Q�-��8E'qdp�\T�����G�BW�e���������{��(