flapjack 1.2.0rc1 → 1.2.0rc2
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 +6 -0
- data/Gemfile-ruby1.9.lock +1 -1
- data/lib/flapjack/cli/import.rb +5 -1
- data/lib/flapjack/cli/maintenance.rb +7 -5
- data/lib/flapjack/cli/purge.rb +6 -1
- data/lib/flapjack/cli/receiver.rb +27 -42
- data/lib/flapjack/cli/simulate.rb +5 -1
- data/lib/flapjack/coordinator.rb +1 -1
- data/lib/flapjack/data/entity.rb +67 -45
- data/lib/flapjack/data/entity_check.rb +55 -42
- data/lib/flapjack/data/event.rb +12 -7
- data/lib/flapjack/data/migration.rb +121 -0
- data/lib/flapjack/gateways/jabber.rb +3 -2
- data/lib/flapjack/gateways/jsonapi.rb +1 -1
- data/lib/flapjack/gateways/jsonapi/check_presenter.rb +1 -0
- data/lib/flapjack/gateways/jsonapi/contact_methods.rb +2 -8
- data/lib/flapjack/gateways/pagerduty.rb +1 -1
- data/lib/flapjack/gateways/web.rb +1 -1
- data/lib/flapjack/notifier.rb +1 -1
- data/lib/flapjack/pikelet.rb +2 -2
- data/lib/flapjack/processor.rb +1 -1
- data/lib/flapjack/redis_pool.rb +9 -2
- data/lib/flapjack/version.rb +1 -1
- data/spec/lib/flapjack/data/entity_check_spec.rb +2 -1
- data/spec/lib/flapjack/data/entity_spec.rb +14 -83
- data/spec/lib/flapjack/data/event_spec.rb +31 -0
- data/spec/lib/flapjack/redis_pool_spec.rb +2 -0
- data/spec/service_consumers/pacts/flapjack-diner_v1.0.json +2573 -2573
- data/tasks/entities.rake +6 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b10a01932fb4fd6a466e2b975764c3c6ff777e9c
|
4
|
+
data.tar.gz: e25026116bccc9209d8ca98c05585e89dc4b7ce3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1e4aeba827545b5b18bc56bd549adff1b93b43bf368cd426d37b847c2d2801ea4e83f22c1af4e87579e947cf8d911a2abcb6025d778d476abcaad4b2ac934ab
|
7
|
+
data.tar.gz: e6956faf10c9a12bf9cd08bf56fbe87be986063967ec27e35e77b5ed313b8a3cff6b50ea14a5d58019b9b8f4c29f6bad483d0ecf739e7a0f609f26e3d9dedfeb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## Flapjack Changelog
|
2
2
|
|
3
|
+
# 1.2.0rc2 - 2014-10-17
|
4
|
+
- Feature: Cache entity and check name <-> id lookups #682 (@ali-graham)
|
5
|
+
- Chore: Add last_change field to status_reports in the API (closes: #678) #679 (@Hobbsee)
|
6
|
+
- Chore: Move archive cache responsibility to mirror source. #683 (@ali-graham)
|
7
|
+
- Bug: jsonapi: GET /entities is non performant #674 (@ali-graham)
|
8
|
+
|
3
9
|
# 1.2.0rc1 - 2014-10-08
|
4
10
|
- Feature: Allow updating an entities name via PATCH /entities/id[,id...] #628 (@ali-graham)
|
5
11
|
- Feature: Pact specs for flapjack-diner compatability testing #663 (@ali-graham)
|
data/Gemfile-ruby1.9.lock
CHANGED
data/lib/flapjack/cli/import.rb
CHANGED
@@ -5,6 +5,7 @@ require 'redis'
|
|
5
5
|
require 'flapjack/configuration'
|
6
6
|
require 'flapjack/data/contact'
|
7
7
|
require 'flapjack/data/entity'
|
8
|
+
require 'flapjack/data/migration'
|
8
9
|
|
9
10
|
module Flapjack
|
10
11
|
module CLI
|
@@ -61,7 +62,10 @@ module Flapjack
|
|
61
62
|
private
|
62
63
|
|
63
64
|
def redis
|
64
|
-
@redis
|
65
|
+
return @redis unless @redis.nil?
|
66
|
+
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
67
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
68
|
+
@redis
|
65
69
|
end
|
66
70
|
|
67
71
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'eventmachine'
|
4
|
-
require 'em-synchrony'
|
5
3
|
require 'redis'
|
6
|
-
require '
|
4
|
+
require 'hiredis'
|
7
5
|
|
8
6
|
require 'flapjack/configuration'
|
9
7
|
require 'flapjack/data/event'
|
10
8
|
require 'flapjack/data/entity_check'
|
9
|
+
require 'flapjack/data/migration'
|
11
10
|
require 'terminal-table'
|
12
11
|
|
13
12
|
module Flapjack
|
@@ -26,7 +25,7 @@ module Flapjack
|
|
26
25
|
exit_now! "No config data for environment '#{FLAPJACK_ENV}' found in '#{global_options[:config]}'"
|
27
26
|
end
|
28
27
|
|
29
|
-
@redis_options = config.for_redis
|
28
|
+
@redis_options = config.for_redis
|
30
29
|
@options[:redis] = redis
|
31
30
|
end
|
32
31
|
|
@@ -67,7 +66,10 @@ module Flapjack
|
|
67
66
|
private
|
68
67
|
|
69
68
|
def redis
|
70
|
-
@redis
|
69
|
+
return @redis unless @redis.nil?
|
70
|
+
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
71
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
72
|
+
@redis
|
71
73
|
end
|
72
74
|
|
73
75
|
end
|
data/lib/flapjack/cli/purge.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'hiredis'
|
4
4
|
require 'flapjack/configuration'
|
5
5
|
|
6
|
+
require 'flapjack/data/migration'
|
7
|
+
|
6
8
|
module Flapjack
|
7
9
|
module CLI
|
8
10
|
class Purge
|
@@ -50,7 +52,10 @@ module Flapjack
|
|
50
52
|
private
|
51
53
|
|
52
54
|
def redis
|
53
|
-
@redis
|
55
|
+
return @redis unless @redis.nil?
|
56
|
+
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
57
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
58
|
+
@redis
|
54
59
|
end
|
55
60
|
|
56
61
|
end
|
@@ -6,6 +6,7 @@ require 'hiredis'
|
|
6
6
|
|
7
7
|
require 'flapjack/configuration'
|
8
8
|
require 'flapjack/data/event'
|
9
|
+
require 'flapjack/data/migration'
|
9
10
|
require 'flapjack/patches'
|
10
11
|
|
11
12
|
# TODO options should be overridden by similar config file options
|
@@ -19,20 +20,17 @@ module Flapjack
|
|
19
20
|
@options = options
|
20
21
|
|
21
22
|
@config = Flapjack::Configuration.new
|
23
|
+
@config.load(global_options[:config])
|
24
|
+
@config_env = @config.all
|
22
25
|
|
23
|
-
if
|
24
|
-
|
26
|
+
if @config_env.nil? || @config_env.empty?
|
27
|
+
unless 'mirror'.eql?(@options[:type])
|
28
|
+
exit_now! "No config data for environment '#{FLAPJACK_ENV}' found in '#{global_options[:config]}'"
|
29
|
+
end
|
25
30
|
|
26
31
|
@config_env = {}
|
27
32
|
@config_runner = {}
|
28
33
|
else
|
29
|
-
@config.load(global_options[:config])
|
30
|
-
@config_env = @config.all
|
31
|
-
|
32
|
-
if @config_env.nil? || @config_env.empty?
|
33
|
-
exit_now! "No config data for environment '#{FLAPJACK_ENV}' found in '#{global_options[:config]}'"
|
34
|
-
end
|
35
|
-
|
36
34
|
@config_runner = @config_env["#{@options[:type]}-receiver"] || {}
|
37
35
|
end
|
38
36
|
|
@@ -135,7 +133,10 @@ module Flapjack
|
|
135
133
|
private
|
136
134
|
|
137
135
|
def redis
|
138
|
-
@redis
|
136
|
+
return @redis unless @redis.nil?
|
137
|
+
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
138
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
139
|
+
@redis
|
139
140
|
end
|
140
141
|
|
141
142
|
def runner(type)
|
@@ -363,11 +364,18 @@ module Flapjack
|
|
363
364
|
source_redis = Redis.new(:url => source_addr, :driver => :hiredis)
|
364
365
|
|
365
366
|
dest_addr = opts[:dest]
|
366
|
-
dest_redis =
|
367
|
+
dest_redis = case dest_addr
|
368
|
+
when Hash
|
369
|
+
Redis.new(dest_addr.merge(:driver => :hiredis))
|
370
|
+
when String
|
371
|
+
Redis.new(:url => dest_addr, :driver => :hiredis)
|
372
|
+
else
|
373
|
+
exit_now! "could not understand destination Redis config"
|
374
|
+
end
|
375
|
+
|
376
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => dest_redis)
|
367
377
|
|
368
|
-
|
369
|
-
archives = mirror_get_archive_keys_stats(source_addr, :source => source_redis,
|
370
|
-
:dest => dest_redis)
|
378
|
+
archives = mirror_get_archive_keys_stats(:source => source_redis)
|
371
379
|
raise "found no archives!" if archives.empty?
|
372
380
|
|
373
381
|
puts "found archives: #{archives.inspect}"
|
@@ -410,16 +418,9 @@ module Flapjack
|
|
410
418
|
next
|
411
419
|
end
|
412
420
|
|
413
|
-
archives = mirror_get_archive_keys_stats(
|
414
|
-
:
|
415
|
-
|
416
|
-
if archives.any? {|a| a[:size] == 0}
|
417
|
-
# data may be out of date -- refresh, then reject any immediately
|
418
|
-
# expired keys directly; don't keep chasing updated data
|
419
|
-
refresh_archive_index(source_addr, :source => source_redis, :dest => dest_redis)
|
420
|
-
archives = mirror_get_archive_keys_stats(source_addr,
|
421
|
-
:source => source_redis, :dest => dest_redis).select {|a| a[:size] > 0}
|
422
|
-
end
|
421
|
+
archives = mirror_get_archive_keys_stats(:source => source_redis).select {|a|
|
422
|
+
a[:size] > 0
|
423
|
+
}
|
423
424
|
|
424
425
|
if archives.empty?
|
425
426
|
sleep 1
|
@@ -439,29 +440,13 @@ module Flapjack
|
|
439
440
|
end
|
440
441
|
end
|
441
442
|
|
442
|
-
def mirror_get_archive_keys_stats(
|
443
|
+
def mirror_get_archive_keys_stats(opts = {})
|
443
444
|
source_redis = opts[:source]
|
444
|
-
|
445
|
-
dest_redis.smembers("known_events_archive_keys:#{name}").sort.collect do |eak|
|
445
|
+
source_redis.smembers("known_events_archive_keys").sort.collect do |eak|
|
446
446
|
{:name => eak, :size => source_redis.llen(eak)}
|
447
447
|
end
|
448
448
|
end
|
449
449
|
|
450
|
-
def refresh_archive_index(name, opts = {})
|
451
|
-
source_redis = opts[:source]
|
452
|
-
dest_redis = opts[:dest]
|
453
|
-
# refresh the key name cache, avoid repeated calls to redis KEYS
|
454
|
-
# this cache will be updated any time a new archive bucket is created
|
455
|
-
archive_keys = source_redis.keys("events_archive:*").group_by do |ak|
|
456
|
-
(source_redis.llen(ak) > 0) ? 't' : 'f'
|
457
|
-
end
|
458
|
-
|
459
|
-
{'f' => :srem, 't' => :sadd}.each_pair do |k, cmd|
|
460
|
-
next unless archive_keys.has_key?(k) && !archive_keys[k].empty?
|
461
|
-
dest_redis.send(cmd, "known_events_archive_keys:#{name}", archive_keys[k])
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
450
|
end
|
466
451
|
end
|
467
452
|
end
|
@@ -7,6 +7,7 @@ require 'redis/connection/synchrony'
|
|
7
7
|
|
8
8
|
require 'flapjack/configuration'
|
9
9
|
require 'flapjack/data/event'
|
10
|
+
require 'flapjack/data/migration'
|
10
11
|
|
11
12
|
module Flapjack
|
12
13
|
module CLI
|
@@ -51,7 +52,10 @@ module Flapjack
|
|
51
52
|
private
|
52
53
|
|
53
54
|
def redis
|
54
|
-
@redis
|
55
|
+
return @redis unless @redis.nil?
|
56
|
+
@redis = Redis.new(@redis_options)
|
57
|
+
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
58
|
+
@redis
|
55
59
|
end
|
56
60
|
|
57
61
|
def events(opts = {})
|
data/lib/flapjack/coordinator.rb
CHANGED
@@ -32,7 +32,7 @@ module Flapjack
|
|
32
32
|
EM.synchrony do
|
33
33
|
setup_signals if options[:signals]
|
34
34
|
|
35
|
-
redis = Flapjack::RedisPool.new(:config => @redis_options, :size => 1)
|
35
|
+
redis = Flapjack::RedisPool.new(:config => @redis_options, :size => 1, :logger => @logger)
|
36
36
|
['entity', 'check'].each do |type|
|
37
37
|
discovered = redis.keys("#{type}_tag:*")
|
38
38
|
redis.sadd("known_tags:#{type}_tag", discovered) unless discovered.empty?
|
data/lib/flapjack/data/entity.rb
CHANGED
@@ -21,19 +21,16 @@ module Flapjack
|
|
21
21
|
current_entity_names = (options.has_key?(:enabled) && !options[:enabled].nil?) ?
|
22
22
|
Flapjack::Data::Entity.current_names(:redis => redis) : nil
|
23
23
|
|
24
|
-
|
25
|
-
return []
|
26
|
-
ids = redis.mget(keys)
|
27
|
-
keys.inject([]) {|memo, k|
|
28
|
-
k =~ /^entity_id:(.+)$/; entity_name = $1; entity_id = ids.shift
|
24
|
+
entity_names_by_id = redis.hgetall("all_entity_names_by_id")
|
25
|
+
return [] if entity_names_by_id.empty?
|
29
26
|
|
27
|
+
entity_names_by_id.inject([]) {|memo, (eid, ename)|
|
30
28
|
if options[:enabled].nil? ||
|
31
|
-
(options[:enabled].is_a?(TrueClass) && current_entity_names.include?(
|
32
|
-
(options[:enabled].is_a?(FalseClass) && !current_entity_names.include?(
|
29
|
+
(options[:enabled].is_a?(TrueClass) && current_entity_names.include?(ename) ) ||
|
30
|
+
(options[:enabled].is_a?(FalseClass) && !current_entity_names.include?(ename))
|
33
31
|
|
34
|
-
memo << self.new(:name =>
|
32
|
+
memo << self.new(:name => ename, :id => eid, :redis => redis)
|
35
33
|
end
|
36
|
-
|
37
34
|
memo
|
38
35
|
}.sort_by(&:name)
|
39
36
|
end
|
@@ -59,6 +56,7 @@ module Flapjack
|
|
59
56
|
|
60
57
|
alerting_check_keys = redis.keys("contact_alerting_checks:*")
|
61
58
|
|
59
|
+
all_checks = {}
|
62
60
|
failed_checks = {}
|
63
61
|
hashes_to_remove = []
|
64
62
|
hashes_to_add = {}
|
@@ -77,6 +75,9 @@ module Flapjack
|
|
77
75
|
existing_check = "#{existing_name}:#{ch}"
|
78
76
|
new_check = "#{entity_name}:#{ch}"
|
79
77
|
|
78
|
+
ch_all_score = redis.zscore("all_checks", existing_check)
|
79
|
+
all_checks[ch] = ch_all_score unless ch_all_score.nil?
|
80
|
+
|
80
81
|
ch_fail_score = redis.zscore("failed_checks", existing_check)
|
81
82
|
failed_checks[ch] = ch_fail_score unless ch_fail_score.nil?
|
82
83
|
|
@@ -111,12 +112,18 @@ module Flapjack
|
|
111
112
|
redis.rename(chk, chk.sub(/^#{Regexp.escape(existing_name)}:/, "#{entity_name}:"))
|
112
113
|
end
|
113
114
|
|
115
|
+
all_checks.each_pair do |ch, score|
|
116
|
+
redis.zrem('all_checks', "#{existing_name}:#{ch}")
|
117
|
+
redis.zadd('all_checks', score, "#{entity_name}:#{ch}")
|
118
|
+
end
|
119
|
+
|
114
120
|
# currently failing checks
|
115
121
|
failed_checks.each_pair do |ch, score|
|
116
122
|
redis.zrem('failed_checks', "#{existing_name}:#{ch}")
|
117
123
|
redis.zadd('failed_checks', score, "#{entity_name}:#{ch}")
|
118
124
|
end
|
119
125
|
|
126
|
+
redis.rename("all_checks:#{existing_name}", "all_checks:#{entity_name}")
|
120
127
|
redis.rename("current_checks:#{existing_name}", "current_checks:#{entity_name}")
|
121
128
|
|
122
129
|
unless current_score.nil?
|
@@ -160,6 +167,9 @@ module Flapjack
|
|
160
167
|
keys_to_delete = []
|
161
168
|
keys_to_rename = {}
|
162
169
|
|
170
|
+
all_checks_to_remove = []
|
171
|
+
all_checks_to_add = {}
|
172
|
+
|
163
173
|
failed_checks_to_remove = []
|
164
174
|
failed_checks_to_add = {}
|
165
175
|
|
@@ -182,6 +192,7 @@ module Flapjack
|
|
182
192
|
old_states = "#{old_check}:states"
|
183
193
|
new_states = "#{current_check}:states"
|
184
194
|
|
195
|
+
all_checks_to_remove << old_check
|
185
196
|
failed_checks_to_remove << old_check
|
186
197
|
|
187
198
|
if redis.exists("check:#{current_check}")
|
@@ -195,6 +206,9 @@ module Flapjack
|
|
195
206
|
keys_to_delete << old_states
|
196
207
|
else
|
197
208
|
|
209
|
+
ch_all_score = redis.zscore("all_checks", old_check)
|
210
|
+
all_checks_to_add[current_check] = ch_all_score unless ch_all_score.nil?
|
211
|
+
|
198
212
|
# can move a failing checks entry over, if it exists
|
199
213
|
ch_fail_score = redis.zscore("failed_checks", old_check)
|
200
214
|
failed_checks_to_add[current_check] = ch_fail_score unless ch_fail_score.nil?
|
@@ -240,6 +254,14 @@ module Flapjack
|
|
240
254
|
|
241
255
|
end
|
242
256
|
|
257
|
+
# TODO all_checks sorted set -- merge/rename entries
|
258
|
+
|
259
|
+
if redis.exists("all_checks:#{current_name}")
|
260
|
+
keys_to_delete << "all_checks:#{old_name}"
|
261
|
+
else
|
262
|
+
keys_to_rename["all_checks:#{old_name}"] = "all_checks:#{current_name}"
|
263
|
+
end
|
264
|
+
|
243
265
|
if redis.exists("current_checks:#{current_name}")
|
244
266
|
keys_to_delete << "current_checks:#{old_name}"
|
245
267
|
else
|
@@ -339,6 +361,14 @@ module Flapjack
|
|
339
361
|
redis.zunionstore(dest, [ctk, dest], :aggregate => :max)
|
340
362
|
end
|
341
363
|
|
364
|
+
all_checks_to_remove.each do |actr|
|
365
|
+
redis.zrem('all_checks', actr)
|
366
|
+
end
|
367
|
+
|
368
|
+
all_checks_to_add.each_pair do |acta, score|
|
369
|
+
redis.zadd('all_checks', score, acta)
|
370
|
+
end
|
371
|
+
|
342
372
|
failed_checks_to_remove.each do |fctr|
|
343
373
|
redis.zrem('failed_checks', fctr)
|
344
374
|
end
|
@@ -415,31 +445,33 @@ module Flapjack
|
|
415
445
|
|
416
446
|
# if an entity exists with the same name as the incoming data,
|
417
447
|
# use its id; failing that allocate a random one
|
418
|
-
entity_id = redis.
|
448
|
+
entity_id = redis.hget('all_entity_ids_by_name', entity_name)
|
419
449
|
|
420
450
|
if entity_id.nil? || entity_id.empty?
|
421
451
|
entity_id = SecureRandom.uuid
|
422
|
-
redis.
|
423
|
-
redis.hset(
|
452
|
+
redis.hset('all_entity_ids_by_name', entity_name, entity_id)
|
453
|
+
redis.hset('all_entity_names_by_id', entity_id, entity_name)
|
424
454
|
end
|
425
455
|
else
|
426
456
|
# most likely from API import
|
427
|
-
existing_name = redis.hget(
|
457
|
+
existing_name = redis.hget('all_entity_names_by_id', entity_id)
|
428
458
|
|
429
|
-
if
|
459
|
+
# if there's an entity with a matching name, this will change its
|
460
|
+
# id; if no entity exists it creates a new one
|
430
461
|
|
431
|
-
|
432
|
-
|
433
|
-
redis.
|
434
|
-
redis.hset("entity:#{entity_id}", 'name', entity_name)
|
462
|
+
if existing_name.nil?
|
463
|
+
redis.hset('all_entity_ids_by_name', entity_name, entity_id)
|
464
|
+
redis.hset('all_entity_names_by_id', entity_id, entity_name)
|
435
465
|
|
436
466
|
elsif existing_name != entity_name
|
437
|
-
if redis.
|
467
|
+
if redis.hexists('all_entity_ids_by_name', entity_name)
|
468
|
+
merge(existing_name, entity_name, :redis => redis)
|
469
|
+
else
|
438
470
|
rename(existing_name, entity_name, :redis => redis) {
|
439
|
-
redis.
|
471
|
+
redis.hdel('all_entity_ids_by_name', existing_name)
|
472
|
+
redis.hset('all_entity_ids_by_name', entity_name, entity_id)
|
473
|
+
redis.hset('all_entity_names_by_id', entity_id, entity_name)
|
440
474
|
}
|
441
|
-
else
|
442
|
-
merge(existing_name, entity_name, :redis => redis)
|
443
475
|
end
|
444
476
|
end
|
445
477
|
end
|
@@ -463,7 +495,7 @@ module Flapjack
|
|
463
495
|
|
464
496
|
def self.find_by_name(entity_name, options = {})
|
465
497
|
raise "Redis connection not set" unless redis = options[:redis]
|
466
|
-
entity_id = redis.
|
498
|
+
entity_id = redis.hget("all_entity_ids_by_name", entity_name)
|
467
499
|
if entity_id.nil? || entity_id.empty?
|
468
500
|
# key doesn't exist
|
469
501
|
return unless options[:create]
|
@@ -476,7 +508,7 @@ module Flapjack
|
|
476
508
|
|
477
509
|
def self.find_by_id(entity_id, options = {})
|
478
510
|
raise "Redis connection not set" unless redis = options[:redis]
|
479
|
-
entity_name = redis.hget("
|
511
|
+
entity_name = redis.hget("all_entity_names_by_id", entity_id)
|
480
512
|
return if entity_name.nil? || entity_name.empty?
|
481
513
|
self.new(:name => entity_name, :id => entity_id, :redis => redis)
|
482
514
|
end
|
@@ -495,21 +527,17 @@ module Flapjack
|
|
495
527
|
# time
|
496
528
|
def self.find_all_name_matching(pattern, options = {})
|
497
529
|
raise "Redis connection not set" unless redis = options[:redis]
|
530
|
+
regexp = nil
|
498
531
|
begin
|
499
|
-
|
532
|
+
regexp = Regexp.new(pattern)
|
500
533
|
rescue => e
|
501
534
|
if @logger
|
502
535
|
@logger.info("Jabber#self.find_all_name_matching - unable to use /#{pattern}/ as a regex pattern: #{e}")
|
503
536
|
end
|
504
|
-
|
537
|
+
regexp = nil
|
505
538
|
end
|
506
|
-
|
507
|
-
|
508
|
-
if (entity_name =~ regex) && !memo.include?(entity_name)
|
509
|
-
memo << entity_name
|
510
|
-
end
|
511
|
-
memo
|
512
|
-
}.sort
|
539
|
+
return if regexp.nil?
|
540
|
+
redis.hkeys('all_entity_ids_by_name').select {|en| regexp === en }.sort
|
513
541
|
end
|
514
542
|
|
515
543
|
def self.current_names(options = {})
|
@@ -549,11 +577,12 @@ module Flapjack
|
|
549
577
|
raise "Redis connection not set" unless redis = options[:redis]
|
550
578
|
|
551
579
|
entity_ids.inject({}) do |memo, entity_id|
|
552
|
-
entity_name = redis.hget(
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
580
|
+
entity_name = redis.hget('entity_names_by_id', entity_id)
|
581
|
+
next memo if entity_name.nil? || entity_name.empty?
|
582
|
+
en = Regexp.escape(entity_name)
|
583
|
+
check_names = redis.keys("check:#{entity_name}:*").map {|c| c.sub(/^check:#{en}:/, '') } |
|
584
|
+
Flapjack::Data::EntityCheck.find_current_names_for_entity_name(entity_name, :redis => redis)
|
585
|
+
memo[entity_id] = check_names.map {|cn| "#{entity_name}:#{cn}"}
|
557
586
|
memo
|
558
587
|
end
|
559
588
|
end
|
@@ -568,13 +597,6 @@ module Flapjack
|
|
568
597
|
checks.length
|
569
598
|
end
|
570
599
|
|
571
|
-
# def as_json(*args)
|
572
|
-
# {
|
573
|
-
# "id" => self.id,
|
574
|
-
# "name" => self.name,
|
575
|
-
# }
|
576
|
-
# end
|
577
|
-
|
578
600
|
def to_jsonapi(opts = {})
|
579
601
|
json_data = {
|
580
602
|
"id" => self.id,
|