20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/flapjack/gateways/jsonapi/report_methods.rb', line 20
def load_api_data(entity_ids, event_ids, &block)
entities = if entity_ids.nil?
Flapjack::Data::Entity.all(:redis => redis)
elsif !entity_ids.empty?
entity_ids.collect {|entity_id| find_entity_by_id(entity_id) }
else
nil
end
checks = if event_ids.nil?
Flapjack::Data::EntityCheck.find_current_names(:redis => redis).
each_with_object([]) do |check_name, memo|
en, cn = check_name.split(':', 2)
halt(err(400, 'Malformed check ID')) if en.nil? || cn.nil?
logger.debug("Flapjack::Gateways::JSONAPI::ReportMethods::Helpers#load_api_data entity: #{en}, check: #{cn}")
memo << find_entity_check_by_name(en, cn)
end
elsif !event_ids.empty?
event_ids.each_with_object([]) do |event_id, memo|
en, cn = event_id.split(':', 2)
halt(err(400, 'Malformed check ID')) if en.nil? || cn.nil?
memo << find_entity_check_by_name(en, cn)
end
else
nil
end
entities_by_id = {}
entity_checks_by_entity_id = {}
(entities || []).each do |entity|
entities_by_id[entity.id] = entity
entity_checks_by_entity_id[entity.id] = entity.check_list.collect {|check_name|
find_entity_check(entity, check_name)
}
end
(checks || []).each do |check|
check_entity = check.entity
check_entity_id = check_entity.id
entities_by_id[check_entity_id] ||= check_entity
entity_checks_by_entity_id[check_entity_id] ||= []
entity_checks_by_entity_id[check_entity_id] << check
end
entity_data = entities_by_id.inject([]) do |memo, (entity_id, entity)|
entity_name = entity.name
memo << {
'id' => entity_id,
'name' => entity_name,
'links' => {
'checks' => entity_checks_by_entity_id[entity_id].collect {|entity_check|
"#{entity_name}:#{entity_check.check}"
},
}
}
memo
end
report_data = []
entity_check_data = []
entity_checks_by_entity_id.each_pair do |entity_id, entity_checks|
entity = entities_by_id[entity_id]
entity_checks.each do |entity_check|
entity_check_name = entity_check.check
entity_check_id = "#{entity.name}:#{entity_check.check}"
report_data << yield(Flapjack::Gateways::JSONAPI::CheckPresenter.new(entity_check)).
merge('links' => {
'entity' => [entity_id],
'check' => [entity_check_id],
})
entity_check_data << {
'id' => entity_check_id,
'name' => entity_check_name
}
end
end
[report_data, entity_data, entity_check_data]
end
|