Project

General

Profile

Download (1.7 KB) Statistics
| Branch: | Tag: | Revision:
class TrendImporter
def self.update!
importer = new
importer.check_values
importer.update_trend_counters
importer.aggregate_counters
end

# Check for missing values
# Comparing a count prior to trying to recreating them all for efficiency sake
def check_values
ForemanTrend.types.pluck(:trendable_type).each do |trend_type|
changes = trend_type.constantize.pluck(:id) - ForemanTrend.has_value.where(:trendable_type => trend_type).pluck(:trendable_id)
ForemanTrend.create_values(trend_type) unless changes.empty?
end

FactTrend.types.pluck(:trendable_id).each do |fact_name_id|
changes = FactValue.where(:fact_name_id => fact_name_id).group(:value).pluck(:value) - FactTrend.has_value.where(:trendable_id => fact_name_id).pluck(:fact_value)
FactTrend.create_values(fact_name_id) unless changes.empty?
end
end

def update_trend_counters
timestamp = Time.now
counter_hash = {}
Trend.types.each do |trend|
if trend.is_a? FactTrend
counter_hash[trend.trendable_id] = Host.joins(:fact_values).where(:fact_values => {:fact_name_id => trend.trendable_id}).group(:value).count
else
counter_hash[trend.trendable_type] = Host.group(trend.trendable_type.foreign_key.to_sym).count
end
end
Trend.has_value.each do |trend|
counter = trend.trend_counters.new
counter.count = if trend.is_a? FactTrend
counter_hash[trend.trendable_id][trend.fact_value]
else
counter_hash[trend.trendable_type][trend.trendable_id]
end || 0
counter.created_at = timestamp
counter.save!
end
end

def aggregate_counters
end
end
(18-18/18)