Sha256: a250ea09b08af74d4bce96dfe397a10758b50d51b6f78490e8c10dc17c584442
Contents?: true
Size: 1.94 KB
Versions: 3
Compression:
Stored size: 1.94 KB
Contents
# frozen_string_literal: true require 'thread' module Mnemosyne class Instrumenter IDENT = :__mnemosyne_current_trace MUTEX = Mutex.new include ::Mnemosyne::Logging def initialize(config:, client:) @client = client @config = config ::Mnemosyne::Probes.activate! logger.debug(Mnemosyne) { 'Instrumenter started' } end def current_trace Thread.current[IDENT] end def current_trace=(trace) Thread.current[IDENT] = trace end def trace(name, **kwargs) if (trace = current_trace) return yield trace if block_given? return trace end trace = self.current_trace = Trace.new(self, name, **kwargs) return trace unless block_given? begin yield trace ensure self.current_trace = nil trace.submit end end def submit(trace) logger.debug(Mnemosyne) { "Submit trace #{trace.uuid}" } @client.call trace end def release(trace) return unless current_trace.equal?(trace) self.current_trace = nil end class << self attr_reader :instance def start!(config = nil) return @instance if @instance MUTEX.synchronize do return @instance if @instance client = Client.new(config) @instance = new(config: config, client: client) end rescue StandardError => err ::Mnemosyne::Logging.logger.warn(Mnemosyne) do "Unable to start instrumenter: #{err}" end raise end def with(instrumenter) old = instance @instance = instrumenter yield(instrumenter) ensure @instance = old end def trace(*args) return unless (instrumenter = instance) instrumenter.trace(*args) end def current_trace return unless (instrumenter = instance) instrumenter.current_trace end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
mnemosyne-ruby-1.5.1 | lib/mnemosyne/instrumenter.rb |
mnemosyne-ruby-1.5.0 | lib/mnemosyne/instrumenter.rb |
mnemosyne-ruby-1.4.0 | lib/mnemosyne/instrumenter.rb |