flapjack 0.6.37 → 0.6.38
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -3
- data/README.md +5 -0
- data/lib/flapjack/coordinator.rb +22 -14
- data/lib/flapjack/data/contact.rb +27 -8
- data/lib/flapjack/executive.rb +18 -2
- data/lib/flapjack/jabber.rb +3 -0
- data/lib/flapjack/oobetet.rb +0 -7
- data/lib/flapjack/pagerduty.rb +3 -0
- data/lib/flapjack/pikelet.rb +3 -3
- data/lib/flapjack/redis_pool.rb +40 -0
- data/lib/flapjack/version.rb +1 -1
- data/lib/flapjack/web.rb +17 -12
- data/lib/flapjack/web/views/contact.haml +23 -27
- data/lib/flapjack/web/views/self_stats.haml +4 -2
- data/spec/lib/flapjack/executive_spec.rb +1 -0
- data/spec/lib/flapjack/jabber_spec.rb +1 -0
- data/spec/lib/flapjack/web_spec.rb +4 -5
- metadata +3 -2
data/.travis.yml
CHANGED
@@ -5,6 +5,6 @@ gemfile:
|
|
5
5
|
- Gemfile
|
6
6
|
services:
|
7
7
|
- redis-server
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
before_script:
|
9
|
+
- mkdir -p ./log
|
10
|
+
script: bundle exec rspec spec && bundle exec cucumber features
|
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
Flapjack
|
2
2
|
========
|
3
3
|
|
4
|
+
[![Travis CI Status][id_travis_img]][id_travis_link]
|
5
|
+
|
6
|
+
[id_travis_link]: https://secure.travis-ci.org/#!/flpjck/flapjack
|
7
|
+
[id_travis_img]: https://secure.travis-ci.org/flpjck/flapjack.png
|
8
|
+
|
4
9
|
Flapjack is a highly scalable and distributed monitoring notification system.
|
5
10
|
|
6
11
|
Flapjack provides a scalable method for dealing with events representing changes in system state (OK -> WARNING -> CRITICAL transitions) and alerting appropriate people as necessary.
|
data/lib/flapjack/coordinator.rb
CHANGED
@@ -21,6 +21,7 @@ require 'flapjack/oobetet'
|
|
21
21
|
require 'flapjack/pagerduty'
|
22
22
|
require 'flapjack/notification/email'
|
23
23
|
require 'flapjack/notification/sms'
|
24
|
+
require 'flapjack/redis_pool'
|
24
25
|
require 'flapjack/web'
|
25
26
|
|
26
27
|
module Flapjack
|
@@ -158,12 +159,13 @@ module Flapjack
|
|
158
159
|
|
159
160
|
port = 3001 if (port.nil? || port <= 0 || port > 65535)
|
160
161
|
|
161
|
-
|
162
|
+
pool = Flapjack::RedisPool.new(:config => @redis_options)
|
163
|
+
pikelet_class.class_variable_set('@@redis', pool)
|
162
164
|
|
163
165
|
Thin::Logging.silent = true
|
164
166
|
|
165
167
|
pikelet = Thin::Server.new('0.0.0.0', port, pikelet_class, :signals => false)
|
166
|
-
@pikelets << {:instance => pikelet, :type => pikelet_type}
|
168
|
+
@pikelets << {:instance => pikelet, :type => pikelet_type, :pool => pool}
|
167
169
|
pikelet.start
|
168
170
|
@logger.debug "new thin server instance started for #{pikelet_type}"
|
169
171
|
end
|
@@ -179,8 +181,10 @@ module Flapjack
|
|
179
181
|
|
180
182
|
# set up connection pooling, stop resque errors (ensure that it's only
|
181
183
|
# done once)
|
184
|
+
pool = nil
|
182
185
|
if (['email_notifier', 'sms_notifier'] & @pikelets.collect {|p| p[:type]}).empty?
|
183
|
-
::
|
186
|
+
pool = Flapjack::RedisPool.new(:config => @redis_options)
|
187
|
+
::Resque.redis = pool
|
184
188
|
## NB: can override the default 'resque' namespace like this
|
185
189
|
#::Resque.redis.namespace = 'flapjack'
|
186
190
|
end
|
@@ -221,17 +225,13 @@ module Flapjack
|
|
221
225
|
stop
|
222
226
|
end
|
223
227
|
}
|
224
|
-
|
228
|
+
pikelet_values = {:fiber => f, :type => pikelet_type}
|
229
|
+
pikelet_values[:pool] = pool if pool
|
230
|
+
@pikelets << pikelet_values
|
225
231
|
f.resume
|
226
232
|
@logger.debug "new fiber created for #{pikelet_type}"
|
227
233
|
end
|
228
234
|
|
229
|
-
def build_redis_connection_pool(options = {})
|
230
|
-
EventMachine::Synchrony::ConnectionPool.new(:size => options[:size] || 5) do
|
231
|
-
::Redis.new(@redis_options)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
235
|
# # TODO rewrite to be less spammy -- print only initial state and changes
|
236
236
|
# def health_check
|
237
237
|
# @pikelets.each do |pik|
|
@@ -259,10 +259,8 @@ module Flapjack
|
|
259
259
|
}.resume
|
260
260
|
end
|
261
261
|
when EM::Resque::Worker
|
262
|
-
|
263
|
-
|
264
|
-
pik[:instance].shutdown
|
265
|
-
end
|
262
|
+
# resque is polling, so we don't need a shutdown object
|
263
|
+
pik[:instance].shutdown if pik[:fiber] && pik[:fiber].alive?
|
266
264
|
when Thin::Server # web, api
|
267
265
|
# drop from this side, as HTTP keepalive etc. means browsers
|
268
266
|
# keep connections alive for ages, and we'd be hanging around
|
@@ -280,6 +278,16 @@ module Flapjack
|
|
280
278
|
if fibers.any?(&:alive?) || thin_pikelets.any?{|tp| !tp.backend.empty? }
|
281
279
|
EM::Synchrony.sleep 0.25
|
282
280
|
else
|
281
|
+
@pikelets.select {|p| thin_pikelets.include?(p) }.each do |tp|
|
282
|
+
tp[:pool].empty!
|
283
|
+
end
|
284
|
+
|
285
|
+
rsq_p = @pikelets.detect {|p|
|
286
|
+
['email_notifier', 'sms_notifier'].include?(p[:type]) && !p[:pool].nil?
|
287
|
+
}
|
288
|
+
|
289
|
+
rsq_p[:pool].empty! if rsq_p
|
290
|
+
|
283
291
|
EM.stop
|
284
292
|
break
|
285
293
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# NB: use of redis.keys probably indicates we should maintain a data
|
4
4
|
# structure to avoid the need for this type of query
|
5
5
|
|
6
|
+
require 'set'
|
7
|
+
|
6
8
|
module Flapjack
|
7
9
|
|
8
10
|
module Data
|
@@ -85,18 +87,35 @@ module Flapjack
|
|
85
87
|
merge('service_key' => service_key)
|
86
88
|
end
|
87
89
|
|
88
|
-
def
|
89
|
-
@redis.keys('contacts_for:*').inject(
|
90
|
+
def entities_and_checks
|
91
|
+
@redis.keys('contacts_for:*').inject({}) {|ret, k|
|
90
92
|
if @redis.sismember(k, self.id)
|
91
|
-
k =~ /^contacts_for:(
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
if k =~ /^contacts_for:([a-zA-Z0-9][a-zA-Z0-9\.\-]*[a-zA-Z0-9])(?::(\w+))?$/
|
94
|
+
entity_id = $1
|
95
|
+
check = $2
|
96
|
+
|
97
|
+
unless ret.has_key?(entity_id)
|
98
|
+
ret[entity_id] = {}
|
99
|
+
if entity_name = @redis.hget("entity:#{entity_id}", 'name')
|
100
|
+
entity = Flapjack::Data::Entity.new(:name => entity_name,
|
101
|
+
:id => entity_id, :redis => @redis)
|
102
|
+
ret[entity_id][:entity] = entity
|
103
|
+
end
|
104
|
+
# using a set to ensure unique check values
|
105
|
+
ret[entity_id][:checks] = Set.new
|
106
|
+
end
|
107
|
+
|
108
|
+
if check
|
109
|
+
# just add this check for the entity
|
110
|
+
ret[entity_id][:checks] |= check
|
111
|
+
else
|
112
|
+
# registered for the entity so add all checks
|
113
|
+
ret[entity_id][:checks] |= entity.check_list
|
114
|
+
end
|
96
115
|
end
|
97
116
|
end
|
98
117
|
ret
|
99
|
-
}
|
118
|
+
}.values
|
100
119
|
end
|
101
120
|
|
102
121
|
def name
|
data/lib/flapjack/executive.rb
CHANGED
@@ -45,7 +45,10 @@ module Flapjack
|
|
45
45
|
@filters << Flapjack::Filters::Delays.new(options)
|
46
46
|
@filters << Flapjack::Filters::Acknowledgement.new(options)
|
47
47
|
|
48
|
-
@boot_time
|
48
|
+
@boot_time = Time.now
|
49
|
+
@fqdn = `/bin/hostname -f`.chomp
|
50
|
+
@pid = Process.pid
|
51
|
+
@instance_id = "#{@fqdn}:#{@pid}"
|
49
52
|
|
50
53
|
# FIXME: all of the below keys assume there is only ever one executive running;
|
51
54
|
# we could generate a fuid and save it to disk, and prepend it from that
|
@@ -61,6 +64,12 @@ module Flapjack
|
|
61
64
|
@redis.hset('event_counters', 'failure', 0)
|
62
65
|
@redis.hset('event_counters', 'action', 0)
|
63
66
|
end
|
67
|
+
|
68
|
+
@redis.zadd('executive_instances', @boot_time.to_i, @instance_id)
|
69
|
+
@redis.hset("event_counters:#{@instance_id}", 'all', 0)
|
70
|
+
@redis.hset("event_counters:#{@instance_id}", 'ok', 0)
|
71
|
+
@redis.hset("event_counters:#{@instance_id}", 'failure', 0)
|
72
|
+
@redis.hset("event_counters:#{@instance_id}", 'action', 0)
|
64
73
|
end
|
65
74
|
|
66
75
|
def main
|
@@ -73,6 +82,9 @@ module Flapjack
|
|
73
82
|
event = Flapjack::Data::Event.next(:persistence => @redis)
|
74
83
|
process_event(event) unless event.nil?
|
75
84
|
end
|
85
|
+
|
86
|
+
@redis.empty! if @redis
|
87
|
+
|
76
88
|
@logger.info("Exiting main loop.")
|
77
89
|
end
|
78
90
|
|
@@ -123,6 +135,7 @@ module Flapjack
|
|
123
135
|
result = { :skip_filters => false }
|
124
136
|
timestamp = Time.now.to_i
|
125
137
|
@event_count = @redis.hincrby('event_counters', 'all', 1)
|
138
|
+
@event_count = @redis.hincrby("event_counters:#{@instance_id}", 'all', 1)
|
126
139
|
|
127
140
|
# FIXME skip if entity_check.nil?
|
128
141
|
|
@@ -137,8 +150,10 @@ module Flapjack
|
|
137
150
|
|
138
151
|
if event.ok?
|
139
152
|
@redis.hincrby('event_counters', 'ok', 1)
|
153
|
+
@redis.hincrby("event_counters:#{@instance_id}", 'ok', 1)
|
140
154
|
elsif event.failure?
|
141
155
|
@redis.hincrby('event_counters', 'failure', 1)
|
156
|
+
@redis.hincrby("event_counters:#{@instance_id}", 'failure', 1)
|
142
157
|
@redis.hset('unacknowledged_failures', @event_count, event.id)
|
143
158
|
end
|
144
159
|
|
@@ -167,7 +182,8 @@ module Flapjack
|
|
167
182
|
when 'action'
|
168
183
|
# When an action event is processed, store the event.
|
169
184
|
@redis.hset(event.id + ':actions', timestamp, event.state)
|
170
|
-
@redis.hincrby('event_counters', 'action', 1)
|
185
|
+
@redis.hincrby('event_counters', 'action', 1)
|
186
|
+
@redis.hincrby("event_counters:#{@instance_id}", 'action', 1)
|
171
187
|
|
172
188
|
if event.acknowledgement? && event.acknowledgement_id
|
173
189
|
@redis.hdel('unacknowledged_failures', event.acknowledgement_id)
|
data/lib/flapjack/jabber.rb
CHANGED
data/lib/flapjack/oobetet.rb
CHANGED
@@ -3,19 +3,12 @@
|
|
3
3
|
#require 'socket'
|
4
4
|
|
5
5
|
require 'eventmachine'
|
6
|
-
# the redis/synchrony gems need to be required in this particular order, see # the redis-rb README for details
|
7
|
-
#require 'hiredis'
|
8
6
|
require 'em-synchrony'
|
9
|
-
#require 'redis/connection/synchrony'
|
10
|
-
#require 'redis'
|
11
|
-
|
12
|
-
#require 'chronic_duration'
|
13
7
|
|
14
8
|
require 'blather/client/client'
|
15
9
|
require 'em-synchrony/fiber_iterator'
|
16
10
|
require 'yajl/json_gem'
|
17
11
|
|
18
|
-
#require 'flapjack/data/entity_check'
|
19
12
|
require 'flapjack/pikelet'
|
20
13
|
require 'flapjack/utility'
|
21
14
|
|
data/lib/flapjack/pagerduty.rb
CHANGED
data/lib/flapjack/pikelet.rb
CHANGED
@@ -12,6 +12,8 @@ require 'log4r'
|
|
12
12
|
require 'log4r/outputter/consoleoutputters'
|
13
13
|
require 'log4r/outputter/syslogoutputter'
|
14
14
|
|
15
|
+
require 'flapjack/redis_pool'
|
16
|
+
|
15
17
|
module Flapjack
|
16
18
|
module Pikelet
|
17
19
|
attr_accessor :logger, :redis, :config
|
@@ -27,9 +29,7 @@ module Flapjack
|
|
27
29
|
def build_redis_connection_pool(options = {})
|
28
30
|
return unless @bootstrapped
|
29
31
|
if defined?(EventMachine) && defined?(EventMachine::Synchrony)
|
30
|
-
|
31
|
-
::Redis.new(@redis_config)
|
32
|
-
end
|
32
|
+
Flapjack::RedisPool.new(:config => @redis_config, :size => options[:size])
|
33
33
|
else
|
34
34
|
::Redis.new(@redis_config)
|
35
35
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'eventmachine'
|
4
|
+
# the redis/synchrony gems need to be required in this particular order, see
|
5
|
+
# the redis-rb README for details
|
6
|
+
require 'hiredis'
|
7
|
+
require 'em-synchrony'
|
8
|
+
require 'redis/connection/synchrony'
|
9
|
+
require 'redis'
|
10
|
+
|
11
|
+
# require 'eventmachine/synchrony/connection_pool'
|
12
|
+
|
13
|
+
module Flapjack
|
14
|
+
class RedisPool < EventMachine::Synchrony::ConnectionPool
|
15
|
+
|
16
|
+
def initialize(opts = {})
|
17
|
+
config = opts.delete(:config)
|
18
|
+
super(:size => opts[:size] || 5) {
|
19
|
+
::Redis.new(config)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def empty!
|
24
|
+
f = Fiber.current
|
25
|
+
|
26
|
+
until @available.empty? && @pending.empty?
|
27
|
+
begin
|
28
|
+
conn = acquire(f)
|
29
|
+
conn.quit
|
30
|
+
@available.delete(conn)
|
31
|
+
ensure
|
32
|
+
if pending = @pending.shift
|
33
|
+
pending.resume
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/flapjack/version.rb
CHANGED
data/lib/flapjack/web.rb
CHANGED
@@ -196,7 +196,9 @@ module Flapjack
|
|
196
196
|
@pagerduty_credentials = @contact.pagerduty_credentials
|
197
197
|
end
|
198
198
|
|
199
|
-
@
|
199
|
+
@entities_and_checks = @contact.entities_and_checks.sort_by {|ec|
|
200
|
+
ec[:entity].name
|
201
|
+
}
|
200
202
|
|
201
203
|
haml :contact
|
202
204
|
end
|
@@ -232,18 +234,21 @@ module Flapjack
|
|
232
234
|
end
|
233
235
|
|
234
236
|
def self_stats
|
237
|
+
@fqdn = `/bin/hostname -f`.chomp
|
238
|
+
@pid = Process.pid
|
239
|
+
@instance_id = "#{@fqdn}:#{@pid}"
|
240
|
+
|
235
241
|
@keys = @@redis.keys '*'
|
236
|
-
@count_failing_checks
|
237
|
-
@count_all_checks
|
238
|
-
@
|
239
|
-
@
|
240
|
-
@
|
241
|
-
@
|
242
|
-
@
|
243
|
-
@
|
244
|
-
@
|
245
|
-
|
246
|
-
(@event_counter_all.to_f / @uptime) : 0
|
242
|
+
@count_failing_checks = @@redis.zcard 'failed_checks'
|
243
|
+
@count_all_checks = @@redis.keys('check:*:*').length
|
244
|
+
@executive_instances = @@redis.zrange('executive_instances', '0', '-1', :withscores => true)
|
245
|
+
@event_counters = @@redis.hgetall('event_counters')
|
246
|
+
@event_counters_instance = @@redis.hgetall("event_counters:#{@instance_id}")
|
247
|
+
@boot_time = Time.at(@@redis.zscore('executive_instances', @instance_id).to_i)
|
248
|
+
@uptime = Time.now.to_i - @boot_time.to_i
|
249
|
+
@uptime_string = time_period_in_words(@uptime)
|
250
|
+
@event_rate_all = (@uptime > 0) ?
|
251
|
+
(@event_counters_instance['all'].to_f / @uptime) : 0
|
247
252
|
@events_queued = @@redis.llen('events')
|
248
253
|
end
|
249
254
|
|
@@ -11,40 +11,36 @@
|
|
11
11
|
%div#wrapper
|
12
12
|
= nav
|
13
13
|
%h1= @contact.name
|
14
|
-
- if @
|
14
|
+
- if @contact.media && !@contact.media.empty?
|
15
|
+
%ul
|
16
|
+
- @contact.media.each_pair do |mk, mv|
|
17
|
+
- if 'pagerduty'.eql?(mk)
|
18
|
+
%li= "PagerDuty: "
|
19
|
+
%ul
|
20
|
+
- @pagerduty_credentials.each_pair do |pk, pv|
|
21
|
+
- if 'password'.eql?(pk)
|
22
|
+
%li= "#{pk}: ..."
|
23
|
+
- else
|
24
|
+
%li= "#{pk}: #{pv}"
|
25
|
+
- else
|
26
|
+
%li= "#{mk.capitalize}: #{mv}"
|
27
|
+
- else
|
28
|
+
%p No media
|
29
|
+
- if @entities_and_checks && !@entities_and_checks.empty?
|
15
30
|
%table
|
16
31
|
%tr
|
17
32
|
%th Entity name
|
18
33
|
%th Checks
|
19
|
-
|
20
|
-
|
34
|
+
- @entities_and_checks.each do |ec|
|
35
|
+
- entity = ec[:entity]
|
36
|
+
- checks = ec[:checks]
|
21
37
|
%tr
|
22
38
|
%td
|
23
39
|
%p= entity.name
|
24
40
|
%td
|
25
|
-
- checks
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
%p
|
30
|
-
%a(title='check status' href=link) #{check}
|
31
|
-
- else
|
32
|
-
%p No checks
|
33
|
-
%td
|
34
|
-
- if @contact.media && !@contact.media.empty?
|
35
|
-
%ul
|
36
|
-
- @contact.media.each_pair do |mk, mv|
|
37
|
-
- if 'pagerduty'.eql?(mk)
|
38
|
-
%li= "PagerDuty: "
|
39
|
-
%ul
|
40
|
-
- @pagerduty_credentials.each_pair do |pk, pv|
|
41
|
-
- if 'password'.eql?(pk)
|
42
|
-
%li= "#{pk}: ..."
|
43
|
-
- else
|
44
|
-
%li= "#{pk}: #{pv}"
|
45
|
-
- else
|
46
|
-
%li= "#{mk.capitalize}: #{mv}"
|
47
|
-
- else
|
48
|
-
%p No media
|
41
|
+
- checks.each do |check|
|
42
|
+
- link = "/check?entity=#{entity.name}&check=#{check}"
|
43
|
+
%p
|
44
|
+
%a(title='check status' href=link) #{check}
|
49
45
|
- else
|
50
46
|
%p No entities
|
@@ -17,9 +17,11 @@
|
|
17
17
|
%h4
|
18
18
|
Number of failing services:
|
19
19
|
= @count
|
20
|
-
%p Events processed: #{@
|
21
|
-
%p
|
20
|
+
%p Events processed (all time): #{@event_counters['all']} (ok: #{@event_counters['ok']}, failure: #{@event_counters['failure']}, action: #{@event_counters['action']})
|
21
|
+
%p Events processed (this instance): #{@event_counters_instance['all']} (ok: #{@event_counters_instance['ok']}, failure: #{@event_counters_instance['failure']}, action: #{@event_counters_instance['action']})
|
22
|
+
%p Average rate (this instance): #{@event_rate_all} events per second
|
22
23
|
%p Total keys in redis: #{@keys.length}
|
23
24
|
%p Uptime: #{@uptime_string}
|
24
25
|
%p Boot time: #{@boot_time}
|
25
26
|
%p Current time: #{Time.now}
|
27
|
+
%p Executive Instances: #{@executive_instances.inspect}
|
@@ -36,6 +36,7 @@ describe Flapjack::Executive, :redis => true do
|
|
36
36
|
|
37
37
|
executive = Flapjack::Executive.new
|
38
38
|
executive.bootstrap(:config => {})
|
39
|
+
@redis.should_receive(:empty!)
|
39
40
|
executive.should_receive(:build_redis_connection_pool).and_return(@redis)
|
40
41
|
|
41
42
|
# hacky, but the behaviour it's mimicking (shutdown from another thread) isn't
|
@@ -25,11 +25,9 @@ describe Flapjack::Web, :sinatra => true, :redis => true do
|
|
25
25
|
@redis.should_receive(:keys).with('*').and_return([])
|
26
26
|
@redis.should_receive(:zcard).with('failed_checks')
|
27
27
|
@redis.should_receive(:keys).with('check:*:*').and_return([])
|
28
|
-
@redis.should_receive(:
|
29
|
-
@redis.should_receive(:
|
30
|
-
|
31
|
-
@redis.should_receive(:hget).with('event_counters', 'action')
|
32
|
-
@redis.should_receive(:get).with('boot_time').and_return(0)
|
28
|
+
@redis.should_receive(:zscore).with('executive_instances', anything).and_return(Time.now.to_i)
|
29
|
+
@redis.should_receive(:hgetall).twice.and_return({'all' => '8001', 'ok' => '8002'},
|
30
|
+
{'all' => '9001', 'ok' => '9002'}) #
|
33
31
|
@redis.should_receive(:llen).with('events')
|
34
32
|
end
|
35
33
|
|
@@ -67,6 +65,7 @@ describe Flapjack::Web, :sinatra => true, :redis => true do
|
|
67
65
|
end
|
68
66
|
|
69
67
|
it "shows a page listing failing checks" do
|
68
|
+
@redis.should_receive(:zrange).with("executive_instances", "0", "-1", :withscores => true)
|
70
69
|
@redis.should_receive(:zrange).with('failed_checks', 0, -1).and_return(["#{entity_name}:#{check}:states"])
|
71
70
|
|
72
71
|
expect_stats
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flapjack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.38
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-10-
|
14
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: daemons
|
@@ -453,6 +453,7 @@ files:
|
|
453
453
|
- lib/flapjack/persistence/sqlite3.rb
|
454
454
|
- lib/flapjack/persistence/sqlite3/sqlite3.rb
|
455
455
|
- lib/flapjack/pikelet.rb
|
456
|
+
- lib/flapjack/redis_pool.rb
|
456
457
|
- lib/flapjack/transports/beanstalkd.rb
|
457
458
|
- lib/flapjack/transports/result.rb
|
458
459
|
- lib/flapjack/utility.rb
|