Sha256: 87859e79bea6e47250edc6ae14e9131d1bdf8f7ae740cfe653790f7518b2e5db

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

require 'datacenter'
require 'class_config'

require_relative 'simple_profiler/version'
require_relative 'simple_profiler/event'
require_relative 'simple_profiler/reporters/logger'
require_relative 'simple_profiler/reporters/summary'

Datacenter.logger.level = Logger::ERROR

module SimpleProfiler

  extend ClassConfig
  attr_config :reporters, [SimpleProfiler::Reporters::Logger.new(Logger.new(STDOUT))]
  attr_config :enabled_log_memory, true

  class << self

    def profile_instance_methods(klass, *methods)
      methods.each do |method|
        new_method = "__#{method}_profiled__"
        klass.send :alias_method, new_method, method
        klass.send(:define_method, method) do |*args, &block|
          SimpleProfiler.track klass, :instance, method, args do
            send new_method, *args, &block
          end
        end
      end
    end

    def profile_class_methods(klass, *methods)
      methods.each do |method|
        new_method = "__#{method}_profiled__"
        klass.singleton_class.send :alias_method, new_method, method
        klass.send(:define_singleton_method, method) do |*args, &block|
          SimpleProfiler.track klass, :class, method, args do
            send new_method, *args, &block
          end
        end
      end
    end

    def track(klass, target, method, args)
      started_at = Time.now
      memory = process_memory
      
      result = yield
      
      notify Event.new(klass, target, method, args, started_at, Time.now, memory, process_memory)
      result
    end

    private

    def notify(event)
      reporters.each do |report|
        report.notify event
      end
    end

    def process
      @process ||= Datacenter::Process.new Process.pid
    end

    def process_memory
      enabled_log_memory ? process.memory : 0
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_profiler-0.1.1 lib/simple_profiler.rb