Parent

Class/Module Index [+]

Quicksearch

MCollective::Aggregate

Attributes

action[RW]
ddl[RW]
functions[RW]

Public Instance Methods

call_functions(reply) click to toggle source

Call all the appropriate functions with the reply data received from RPC::Client

# File lib/mcollective/aggregate.rb, line 35
def call_functions(reply)
  @functions.each do |function|
    Log.debug("Calling aggregate function #{function} for result")
    function.process_result(reply[:data][function.output_name], reply)
  end
end
contains_output?(output) click to toggle source

Check if the function param is defined as an output for the action in the ddl

# File lib/mcollective/aggregate.rb, line 30
def contains_output?(output)
  raise "'#{@ddl[:action]}' action does not contain output '#{output}'" unless @ddl[:output].keys.include?(output)
end
create_functions() click to toggle source

Creates instances of the Aggregate functions and stores them in the function array. All aggregate call and summarize method calls operate on these function as a batch.

# File lib/mcollective/aggregate.rb, line 18
def create_functions
  @ddl[:aggregate].each_with_index do |agg, i|
    contains_output?(agg[:args][0])

    output = agg[:args][0]
    arguments = agg[:args][1..(agg[:args].size)]

    @functions << load_function(agg[:function]).new(output, arguments, agg[:format], @action)
  end
end
load_function(function_name) click to toggle source

Loads function from disk for use

# File lib/mcollective/aggregate.rb, line 52
def load_function(function_name)
  function_name = function_name.to_s.capitalize

  PluginManager.loadclass("MCollective::Aggregate::#{function_name}") unless Aggregate.const_defined?(function_name)
  Aggregate.const_get(function_name)
rescue Exception
  raise "Aggregate function file '#{function_name.downcase}.rb' cannot be loaded"
end
summarize() click to toggle source

Finalizes the function returning a result object

# File lib/mcollective/aggregate.rb, line 43
def summarize
  summary = @functions.map do |function|
    function.summarize
  end

  summary.sort{|x,y| x.result[:output] <=> y.result[:output]}
end

Public Class Methods

new(ddl) click to toggle source
# File lib/mcollective/aggregate.rb, line 8
def initialize(ddl)
  @functions = []
  @ddl = ddl
  @action = ddl[:action]

  create_functions
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.