Sha256: 8741f04233f24953d159c2865e1bc31db32bf9825999700e4282f2bbc4acabd7

Contents?: true

Size: 1.39 KB

Versions: 34

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Appsignal
  module Probes
    class GvlProbe
      include Helpers

      # @api private
      def self.dependencies_present?
        defined?(::GVLTools) && gvltools_0_2_or_newer? && ruby_3_2_or_newer? &&
          !Appsignal::System.jruby?
      end

      # @api private
      def self.gvltools_0_2_or_newer?
        Gem::Version.new(::GVLTools::VERSION) >= Gem::Version.new("0.2.0")
      end

      # @api private
      def self.ruby_3_2_or_newer?
        Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.2.0")
      end

      def initialize(appsignal: Appsignal, gvl_tools: ::GVLTools)
        Appsignal.internal_logger.debug("Initializing GVL probe")
        @appsignal = appsignal
        @gvl_tools = gvl_tools
      end

      def call
        probe_global_timer
        probe_waiting_threads if @gvl_tools::WaitingThreads.enabled?
      end

      private

      def probe_global_timer
        monotonic_time_ns = @gvl_tools::GlobalTimer.monotonic_time
        gauge_delta :gvl_global_timer, monotonic_time_ns do |time_delta_ns|
          if time_delta_ns > 0
            time_delta_ms = time_delta_ns / 1_000_000
            set_gauge_with_hostname("gvl_global_timer", time_delta_ms)
          end
        end
      end

      def probe_waiting_threads
        set_gauge_with_hostname("gvl_waiting_threads", @gvl_tools::WaitingThreads.count)
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
appsignal-3.9.2-java lib/appsignal/probes/gvl.rb
appsignal-3.9.2 lib/appsignal/probes/gvl.rb
appsignal-3.9.1-java lib/appsignal/probes/gvl.rb
appsignal-3.9.1 lib/appsignal/probes/gvl.rb
appsignal-3.9.0-java lib/appsignal/probes/gvl.rb
appsignal-3.9.0 lib/appsignal/probes/gvl.rb
appsignal-3.8.1-java lib/appsignal/probes/gvl.rb
appsignal-3.8.1 lib/appsignal/probes/gvl.rb
appsignal-3.8.0-java lib/appsignal/probes/gvl.rb
appsignal-3.8.0 lib/appsignal/probes/gvl.rb
appsignal-3.7.6-java lib/appsignal/probes/gvl.rb
appsignal-3.7.6 lib/appsignal/probes/gvl.rb
appsignal-3.7.2-java lib/appsignal/probes/gvl.rb
appsignal-3.7.2 lib/appsignal/probes/gvl.rb
appsignal-3.7.1-java lib/appsignal/probes/gvl.rb
appsignal-3.7.1 lib/appsignal/probes/gvl.rb
appsignal-3.7.0-java lib/appsignal/probes/gvl.rb
appsignal-3.7.0 lib/appsignal/probes/gvl.rb
appsignal-3.6.5-java lib/appsignal/probes/gvl.rb
appsignal-3.6.5 lib/appsignal/probes/gvl.rb