diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-24 21:24:29 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-24 21:24:29 +0000 |
commit | 2c3abbeef6298683dd199f2a5e663caaaa88dffa (patch) | |
tree | e20950ee2d67a4e4aa8d6b267814aecfe2b5570d /lib/puppet/rails | |
parent | 33f4a66a4ead50a570bd5eeeb97087829f84e132 (diff) | |
download | puppet-2c3abbeef6298683dd199f2a5e663caaaa88dffa.tar.gz puppet-2c3abbeef6298683dd199f2a5e663caaaa88dffa.tar.xz puppet-2c3abbeef6298683dd199f2a5e663caaaa88dffa.zip |
Refactoring some of the rails code. The speed is now pretty good, but the tagging stuff does not seem to be working and is certainly working very ineffficiently. Blake says he is going to take a look at that.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2350 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/rails')
-rw-r--r-- | lib/puppet/rails/host.rb | 63 | ||||
-rw-r--r-- | lib/puppet/rails/resource.rb | 17 |
2 files changed, 34 insertions, 46 deletions
diff --git a/lib/puppet/rails/host.rb b/lib/puppet/rails/host.rb index ac547e013..fbf51c838 100644 --- a/lib/puppet/rails/host.rb +++ b/lib/puppet/rails/host.rb @@ -3,6 +3,8 @@ require 'puppet/rails/fact_name' require 'puppet/rails/source_file' require 'puppet/util/rails/collection_merger' +# Puppet::TIME_DEBUG = true + class Puppet::Rails::Host < ActiveRecord::Base include Puppet::Util include Puppet::Util::CollectionMerger @@ -40,7 +42,8 @@ class Puppet::Rails::Host < ActiveRecord::Base #unless host = find_by_name(name) seconds = Benchmark.realtime { #unless host = find_by_name(name, :include => {:resources => {:param_names => :param_values}, :fact_names => :fact_values}) - unless host = find_by_name(name) + unless host = find_by_name(name, :include => {:fact_names => :fact_values}) + #unless host = find_by_name(name) host = new(:name => name) end } @@ -56,7 +59,11 @@ class Puppet::Rails::Host < ActiveRecord::Base raise ArgumentError, "You must pass resources" end - host.setresources(hash[:resources]) + + seconds = Benchmark.realtime { + host.setresources(hash[:resources]) + } + Puppet.notice("Handled resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) host.last_compile = Time.now @@ -85,35 +92,17 @@ class Puppet::Rails::Host < ActiveRecord::Base facts = facts.dup remove = [] - existing = nil - seconds = Benchmark.realtime { - existing = fact_names.find(:all, :include => :fact_values) - } - Puppet.debug("Searched for facts in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) - - existing.each do |fn| - if value = facts[fn.name] - facts.delete(fn.name) - fn.fact_values.each do |fv| - unless value == fv.value - fv.value = value - end + collection_merge :fact_names, :updates => facts, :modify => Proc.new { |fn, name, value| + fn.fact_values.each do |fv| + unless value == fv.value + fv.value = value end - else - remove << fn + break end - end - - # Make a new fact for the rest of them - facts.each do |fact, value| - fn = fact_names.build(:name => fact) + }, :create => Proc.new { |name, value| + fn = fact_names.build(:name => name) fn.fact_values = [fn.fact_values.build(:value => value)] - end - - # Now remove anything necessary. - remove.each do |fn| - fact_names.delete(fn) - end + } end # Set our resources. @@ -122,28 +111,16 @@ class Puppet::Rails::Host < ActiveRecord::Base remove = [] existing = nil seconds = Benchmark.realtime { + #existing = resources.find(:all) existing = resources.find(:all, :include => {:param_names => :param_values}) + #existing = resources } Puppet.notice("Searched for resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) list.each do |resource| compiled[resource.ref] = resource end - existing.each do |resource| - if comp = compiled[resource.ref] - compiled.delete(comp.ref) - comp.to_rails(self, resource) - else - remove << resource - end - end - - compiled.each do |name, resource| - resource.to_rails(self) - end - remove.each do |resource| - resources.delete(resource) - end + collection_merge :resources, :existing => existing, :updates => compiled end def update_connect_time diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb index c3bf8c38a..4f26af6d9 100644 --- a/lib/puppet/rails/resource.rb +++ b/lib/puppet/rails/resource.rb @@ -14,19 +14,30 @@ class Puppet::Rails::Resource < ActiveRecord::Base acts_as_taggable def tags=(tags) - tags.each do |tag| - self.tag_with tag + #puts "setting tags %s" % tags.inspect + self.tag_with(tags.join(",")) + end + + def file + if f = self.source_file + return f.filename + else + return nil end end def file=(file) - self.source_file = Puppet::Rails::SourceFile.new(:filename => file) + self.source_file = Puppet::Rails::SourceFile.new(:filename => file) end def [](param) return super || parameter(param) end + def name + ref() + end + def parameter(param) if pn = param_names.find_by_name(param) if pv = pn.param_values.find(:first) |