Class: Kennel::Syncer::Resolver
- Inherits:
-
Object
- Object
- Kennel::Syncer::Resolver
- Defined in:
- lib/kennel/syncer.rb
Instance Method Summary collapse
- #add_actual(actual) ⇒ Object
-
#each_resolved(list) ⇒ Object
loop over items until everything is resolved or crash when we get stuck this solves cases like composite monitors depending on each other or monitor->monitor slo->slo monitor chains.
-
#initialize(expected:, project_filter:, tracking_id_filter:) ⇒ Resolver
constructor
A new instance of Resolver.
- #resolve_as_much_as_possible(expected) ⇒ Object
Constructor Details
#initialize(expected:, project_filter:, tracking_id_filter:) ⇒ Resolver
Returns a new instance of Resolver.
197 198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/kennel/syncer.rb', line 197 def initialize(expected:, project_filter:, tracking_id_filter:) @id_map = IdMap.new @project_filter = project_filter @tracking_id_filter = tracking_id_filter # mark everything as new expected.each do |e| id_map.set(e.class.api_resource, e.tracking_id, IdMap::NEW) if e.class.api_resource == "synthetics/tests" id_map.set(Kennel::Models::Monitor.api_resource, e.tracking_id, IdMap::NEW) end end end |
Instance Method Details
#add_actual(actual) ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/kennel/syncer.rb', line 211 def add_actual(actual) # override resources that exist with their id project_prefixes = project_filter&.map { |p| "#{p}:" } actual.each do |a| # ignore when not managed by kennel next unless tracking_id = a.fetch(:tracking_id) # ignore when deleted from the codebase # (when running with filters we cannot see the other resources in the codebase) api_resource = a.fetch(:klass).api_resource next if !id_map.get(api_resource, tracking_id) && (!project_prefixes || tracking_id.start_with?(*project_prefixes)) && (!tracking_id_filter || tracking_id_filter.include?(tracking_id)) id_map.set(api_resource, tracking_id, a.fetch(:id)) if a.fetch(:klass).api_resource == "synthetics/tests" id_map.set(Kennel::Models::Monitor.api_resource, tracking_id, a.fetch(:monitor_id)) end end end |
#each_resolved(list) ⇒ Object
loop over items until everything is resolved or crash when we get stuck this solves cases like composite monitors depending on each other or monitor->monitor slo->slo monitor chains
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/kennel/syncer.rb', line 242 def each_resolved(list) list = list.dup loop do return if list.empty? list.reject! do |item| if resolved?(item.expected) yield item true else false end end || assert_resolved(list[0].expected) # resolve something or show a circular dependency error end end |
#resolve_as_much_as_possible(expected) ⇒ Object
234 235 236 237 238 |
# File 'lib/kennel/syncer.rb', line 234 def resolve_as_much_as_possible(expected) expected.each do |e| e.resolve_linked_tracking_ids!(id_map, force: false) end end |