Sha256: f55215557906c29419cbf4982e52731605909652c705c533ca9f8e8adc22b089

Contents?: true

Size: 1.39 KB

Versions: 71

Compression:

Stored size: 1.39 KB

Contents

module RailsOps
  class Profiler
    def self.profile(object_id, description = nil, &_block)
      node = tstore_nodes[object_id] = ::RailsOps::Profiler::Node.new(object_id, description, tstore_current_parent)
      self.tstore_current_parent = node
      begin
        res = yield
      rescue
        node.erroneous!
        fail
      ensure
        self.tstore_current_parent = node.parent
        node.finish_measure
      end
      return res
    end

    def self.time(descr = nil, &_block)
      descr += ' - ' if descr
      start = Time.now
      res = yield
      puts "#{descr}#{((Time.now - start).to_f * 1000).round(1)}ms elapsed.".magenta
      res
    end

    def self.forget_all
      Thread.current[:rails_ops_profiler][:nodes] = {}
    end

    def self.forget(object_id)
      tstore_nodes.delete(object_id)
    end

    def self.node(object_id)
      tstore_nodes[object_id] || fail("Unkown object_id #{object_id}.")
    end

    def self.tstore_current_parent
      Thread.current[:rails_ops_profiler] ||= {}
      Thread.current[:rails_ops_profiler][:current_parent]
    end

    def self.tstore_current_parent=(parent)
      Thread.current[:rails_ops_profiler] ||= {}
      Thread.current[:rails_ops_profiler][:current_parent] = parent
    end

    def self.tstore_nodes
      Thread.current[:rails_ops_profiler] ||= {}
      Thread.current[:rails_ops_profiler][:nodes] ||= {}
    end
  end
end

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
rails_ops-1.0.17.1 lib/rails_ops/profiler.rb
rails_ops-1.4.1 lib/rails_ops/profiler.rb
rails_ops-1.4.0 lib/rails_ops/profiler.rb
rails_ops-1.3.0 lib/rails_ops/profiler.rb
rails_ops-1.2.3 lib/rails_ops/profiler.rb
rails_ops-1.2.2 lib/rails_ops/profiler.rb
rails_ops-1.2.1 lib/rails_ops/profiler.rb
rails_ops-1.2.0 lib/rails_ops/profiler.rb
rails_ops-1.1.31 lib/rails_ops/profiler.rb
rails_ops-1.1.30 lib/rails_ops/profiler.rb
rails_ops-1.1.29 lib/rails_ops/profiler.rb
rails_ops-1.1.28 lib/rails_ops/profiler.rb
rails_ops-1.1.27 lib/rails_ops/profiler.rb
rails_ops-1.1.26 lib/rails_ops/profiler.rb
rails_ops-1.1.25 lib/rails_ops/profiler.rb
rails_ops-1.1.24 lib/rails_ops/profiler.rb
rails_ops-1.1.23 lib/rails_ops/profiler.rb
rails_ops-1.1.22 lib/rails_ops/profiler.rb
rails_ops-1.1.21 lib/rails_ops/profiler.rb
rails_ops-1.1.20 lib/rails_ops/profiler.rb