Sha256: 82ffe636a8364b78c3c9f09d561cd5da44ea97763cc4907e5c9c05c6451d65fd

Contents?: true

Size: 1.4 KB

Versions: 13

Compression:

Stored size: 1.4 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 StandardError
        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

13 entries across 13 versions & 1 rubygems

Version Path
rails_ops-1.5.8 lib/rails_ops/profiler.rb
rails_ops-1.5.7 lib/rails_ops/profiler.rb
rails_ops-1.5.6 lib/rails_ops/profiler.rb
rails_ops-1.5.5 lib/rails_ops/profiler.rb
rails_ops-1.5.4 lib/rails_ops/profiler.rb
rails_ops-1.5.0 lib/rails_ops/profiler.rb
rails_ops-1.4.8 lib/rails_ops/profiler.rb
rails_ops-1.4.7 lib/rails_ops/profiler.rb
rails_ops-1.4.6 lib/rails_ops/profiler.rb
rails_ops-1.4.5 lib/rails_ops/profiler.rb
rails_ops-1.4.4 lib/rails_ops/profiler.rb
rails_ops-1.4.3 lib/rails_ops/profiler.rb
rails_ops-1.4.2 lib/rails_ops/profiler.rb