summaryrefslogtreecommitdiffstats
path: root/lib/puppet/rails
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-24 21:24:29 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-24 21:24:29 +0000
commit2c3abbeef6298683dd199f2a5e663caaaa88dffa (patch)
treee20950ee2d67a4e4aa8d6b267814aecfe2b5570d /lib/puppet/rails
parent33f4a66a4ead50a570bd5eeeb97087829f84e132 (diff)
downloadpuppet-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.rb63
-rw-r--r--lib/puppet/rails/resource.rb17
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)