class Utracker::MongoDB::Drawer

Constants

EDGE_MAP_FN
EDGE_REDUCE_FN

Attributes

database[R]

Public Class Methods

new(database_name: "utracker", collection_name: "entries") click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 6
def initialize(database_name: "utracker", collection_name: "entries")
  @client = Mongo::MongoClient.new
  @database = @client[database_name]
  @collection_name = collection_name
end

Protected Instance Methods

build_graph() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 14
def build_graph
  nodes.values.each do |node|
    node.edges = edges_for(node)
  end
end

Private Instance Methods

collection() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 56
def collection
  @collection ||= database[@collection_name]
end
edge_collection() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 48
def edge_collection
  @edge_collection ||= collection.map_reduce(
    EDGE_MAP_FN,
    EDGE_REDUCE_FN,
    out: { replace: "#{@collection_name}_drawer" }
  )
end
edges() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 37
def edges
  @edges ||= edge_collection.aggregate([
    { "$unwind" => "$value.handled_by" },
    { "$group" => {
        "_id" => { "service" => "$value.authored_by" },
        "edges" => { "$addToSet" => "$value.handled_by" },
      },
    },
  ])
end
edges_for(node) click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 32
def edges_for(node)
  aggregate = edges.find { |agg| agg["_id"]["service"] == node.service }
  aggregate && aggregate["edges"].map{ |service_name| nodes[service_name] }
end
nodes() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 22
def nodes
  @nodes ||= service_names.each_with_object({}) do |service_name, directory|
    directory[service_name] = Utracker::Drawer::Node.new(service_name, nil)
  end
end
service_names() click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 28
def service_names
  collection.distinct('service')
end