Class: InventoryRefresh::SaveCollection::TopologicalSort

Inherits:
Base
  • Object
show all
Defined in:
lib/inventory_refresh/save_collection/topological_sort.rb

Class Method Summary collapse

Methods inherited from Base

save_inventory_object_inventory

Methods included from Logging

#logger

Class Method Details

.save_collections(ems, inventory_collections) ⇒ Object

Saves the passed InventoryCollection objects by doing a topology sort of the graph, then going layer by layer and saving InventoryCollection object in each layer.

Parameters:

  • ems (ExtManagementSystem)

    manager owning the inventory_collections

  • inventory_collections (Array<InventoryRefresh::InventoryCollection>)

    array of InventoryCollection objects for saving



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/inventory_refresh/save_collection/topological_sort.rb', line 14

def save_collections(ems, inventory_collections)
  graph = InventoryRefresh::InventoryCollection::Graph.new(inventory_collections)
  graph.build_directed_acyclic_graph!

  layers = InventoryRefresh::Graph::TopologicalSort.new(graph).topological_sort

  logger.debug("Saving manager #{ems.name}...")

  sorted_graph_log = "Topological sorting of manager #{ems.name} resulted in these layers processable in parallel:\n"
  sorted_graph_log += graph.to_graphviz(:layers => layers)
  logger.debug(sorted_graph_log)

  layers.each_with_index do |layer, index|
    logger.debug("Saving manager #{ems.name} | Layer #{index}")
    layer.each do |inventory_collection|
      save_inventory_object_inventory(ems, inventory_collection) unless inventory_collection.saved?
    end
    logger.debug("Saved manager #{ems.name} | Layer #{index}")
  end

  logger.debug("Saving manager #{ems.name}...Complete")
end