class Symian::CostAnalyzer
Public Class Methods
new(configuration)
click to toggle source
# File lib/symian/cost_analyzer.rb, line 5 def initialize(configuration) @configuration = configuration unless @configuration.cost_analysis[:operations] raise ArgumentError, 'No operations cost configuration provided!' end end
Public Instance Methods
evaluate(kpis)
click to toggle source
# File lib/symian/cost_analyzer.rb, line 12 def evaluate(kpis) # evaluate operation costs operations_cost = @configuration.support_groups.inject(0.0) do |sum,(sg_name,sg_conf)| sg_costs = @configuration.cost_analysis[:operations].find{|sg| sg[:sg_name] == sg_name } unless sg_costs raise "Cannot find salaries for support group #{sg_name}!" end # ugly hack sum += sg_conf[:operators][:number] * sg_costs[:operator_salary] end # need to consider daily costs (salaries are annual) operations_cost /= 365.0 # evaluate contracting costs (SLO violations) contracting_func = @configuration.cost_analysis[:contracting] contracting_cost = (contracting_func.nil? ? 0.0 : (contracting_func.call(kpis) or 0.0)) # evaluate drift costs drift_func = @configuration.cost_analysis[:drift] drift_cost = (drift_func.nil? ? 0.0 : (drift_func.call(kpis) or 0.0)) # return result { :operations => operations_cost, :contracting => contracting_cost, :drift => drift_cost } end