Sha256: 64b03208a993e3be2123005f4485f4adcaddb0a41624ec2fa5b1eaa4cbc26bac

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require 'usdt'

module Cache
  module Object
    class DTraceProvider
      attr_reader :provider, :probes

      def initialize
        @provider = USDT::Provider.create(:ruby, :cache_object)

        @probes = {
          # args: Class name, id, ttl
          fetch: provider.probe(:adapter, :fetch, :string, :string, :string),
          # args: Class name, id, ttl
          fetch_miss: provider.probe(:adapter, :fetch_miss, :string, :string, :string),
          # args: Class name, attributes.inspect, ttl
          fetch_mapping: provider.probe(:adapter, :fetch_mapping, :string, :string, :string),
          # args: Class name, attributes.inspect, ttl
          fetch_mapping_miss: provider.probe(:adapter, :fetch_mapping_miss, :string, :string, :string),
          # args: args.inspect, hits, misses
          read_multi: provider.probe(:adapter, :read_multi, :string, :integer, :integer),
          # args: class_name, id, ttl
          write: provider.probe(:adapter, :write, :string, :string, :string),
          # args: class_name, id
          delete: provider.probe(:adapter, :delete, :string, :string)
        }
      end

      def self.provider
        @provider ||= new.tap do |p|
          p.provider.enable
        end
      end

      def self.fire!(probe_name, *args)
        raise "Unknown probe: #{probe_name}" unless self.provider.probes[probe_name]
        probe = self.provider.probes[probe_name]
        probe.fire(*args) if probe.enabled?
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cache-object-0.2.0 lib/cache/object/dtrace_provider.rb
cache-object-0.1.0 lib/cache/object/dtrace_provider.rb
cache-object-0.0.7 lib/cache/object/dtrace_provider.rb