Here is an attempt to cover with process name probes some of the longest
parts of a puppet agent or master.
Currently:
* node compilation
* individual resource evaluation
* some configurer parts
* individual network requests

Signed-off-by: Brice Figureau <[email protected]>
---
 lib/puppet/configurer.rb           |   24 ++++++++++++++++++------
 lib/puppet/network/http/handler.rb |    6 +++++-
 lib/puppet/parser/compiler.rb      |    6 +++++-
 lib/puppet/transaction.rb          |    9 +++++++--
 4 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/lib/puppet/configurer.rb b/lib/puppet/configurer.rb
index 31d31c2..4320aa9 100644
--- a/lib/puppet/configurer.rb
+++ b/lib/puppet/configurer.rb
@@ -3,6 +3,7 @@ require 'sync'
 require 'timeout'
 require 'puppet/network/http_pool'
 require 'puppet/util'
+require 'puppet/util/instrumentation'
 
 class Puppet::Configurer
   class CommandHookError < RuntimeError; end
@@ -12,6 +13,7 @@ class Puppet::Configurer
 
   include Puppet::Configurer::FactHandler
   include Puppet::Configurer::PluginHandler
+  include Puppet::Util::Instrumentation
 
   # For benchmarking
   include Puppet::Util
@@ -80,11 +82,17 @@ class Puppet::Configurer
   def prepare
     dostorage
 
-    download_plugins
+    instrument("downloading plugins") do
+      download_plugins
+    end
 
-    download_fact_plugins
+    instrument("downloading facts plugins") do
+      download_fact_plugins
+    end
 
-    execute_prerun_command
+    instrument("executing prerun command") do
+      execute_prerun_command
+    end
   end
 
   # Get the remote catalog, yo.  Returns nil if no catalog can be found.
@@ -148,8 +156,10 @@ class Puppet::Configurer
     transaction = nil
 
     begin
-      benchmark(:notice, "Finished catalog run") do
-        transaction = catalog.apply(options)
+      instrument("applying catalog") do
+        benchmark(:notice, "Finished catalog run") do
+          transaction = catalog.apply(options)
+        end
       end
       report
     rescue => detail
@@ -169,7 +179,9 @@ class Puppet::Configurer
 
     Puppet::Util::Log.close(report)
 
-    send_report(report, transaction)
+    instrument("sending report") do
+      send_report(report, transaction)
+    end
   end
 
   def send_report(report, trans = nil)
diff --git a/lib/puppet/network/http/handler.rb 
b/lib/puppet/network/http/handler.rb
index 82238aa..855a9b7 100644
--- a/lib/puppet/network/http/handler.rb
+++ b/lib/puppet/network/http/handler.rb
@@ -5,10 +5,12 @@ require 'puppet/network/http/api/v1'
 require 'puppet/network/rest_authorization'
 require 'puppet/network/rights'
 require 'resolv'
+require 'puppet/util/instrumentation'
 
 module Puppet::Network::HTTP::Handler
   include Puppet::Network::HTTP::API::V1
   include Puppet::Network::RestAuthorization
+  include Puppet::Util::Instrumentation
 
   attr_reader :server, :handler
 
@@ -65,7 +67,9 @@ module Puppet::Network::HTTP::Handler
 
     check_authorization(indirection, method, key, params)
 
-    send("do_#{method}", indirection, key, params, request, response)
+    instrument("processing #{indirection} #{key}") do
+      send("do_#{method}", indirection, key, params, request, response)
+    end
   rescue SystemExit,NoMemoryError
     raise
   rescue Exception => e
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
index c60e1d4..7da50c2 100644
--- a/lib/puppet/parser/compiler.rb
+++ b/lib/puppet/parser/compiler.rb
@@ -4,6 +4,7 @@
 require 'puppet/node'
 require 'puppet/resource/catalog'
 require 'puppet/util/errors'
+require 'puppet/util/instrumentation'
 
 require 'puppet/resource/type_collection_helper'
 
@@ -13,9 +14,12 @@ class Puppet::Parser::Compiler
   include Puppet::Util
   include Puppet::Util::Errors
   include Puppet::Resource::TypeCollectionHelper
+  extend Puppet::Util::Instrumentation
 
   def self.compile(node)
-    new(node).compile.to_resource
+    instrument("compiling #{node.name}") do
+      new(node).compile.to_resource
+    end
   rescue => detail
     puts detail.backtrace if Puppet[:trace]
     raise Puppet::Error, "#{detail} on node #{node.name}"
diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb
index dcd9aad..0a3bfc3 100644
--- a/lib/puppet/transaction.rb
+++ b/lib/puppet/transaction.rb
@@ -4,8 +4,11 @@
 require 'puppet'
 require 'puppet/util/tagging'
 require 'puppet/application'
+require 'puppet/util/instrumentation'
 
 class Puppet::Transaction
+  include Puppet::Util::Instrumentation
+
   require 'puppet/transaction/change'
   require 'puppet/transaction/event'
   require 'puppet/transaction/event_manager'
@@ -139,8 +142,10 @@ class Puppet::Transaction
           next
         end
         ret = nil
-        seconds = thinmark do
-          ret = eval_resource(resource)
+        instrument("evaluating #{resource}") do
+          seconds = thinmark do
+            ret = eval_resource(resource)
+          end
         end
 
         resource.info "Evaluated in %0.2f seconds" % seconds if 
Puppet[:evaltrace] and @catalog.host_config?
-- 
1.7.2.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to