Sha256: 284ac3f0712a56f62390bf56d190955c0fdde2da7ca84e9757b21ba9620410da

Contents?: true

Size: 1.33 KB

Versions: 10

Compression:

Stored size: 1.33 KB

Contents

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.logger.debug("Initializing GVL probe")
        @appsignal = appsignal
        @gvl_tools = gvl_tools
      end

      def call
        probe_global_timer if @gvl_tools::GlobalTimer.enabled?
        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|
          time_delta_ms = time_delta_ns / 1_000_000
          set_gauge_with_hostname("gvl_global_timer", time_delta_ms)
        end
      end

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

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
appsignal-3.3.11-java lib/appsignal/probes/gvl.rb
appsignal-3.3.11 lib/appsignal/probes/gvl.rb
appsignal-3.4.0-java lib/appsignal/probes/gvl.rb
appsignal-3.4.0 lib/appsignal/probes/gvl.rb
appsignal-3.3.10-java lib/appsignal/probes/gvl.rb
appsignal-3.3.10 lib/appsignal/probes/gvl.rb
appsignal-3.3.9-java lib/appsignal/probes/gvl.rb
appsignal-3.3.9 lib/appsignal/probes/gvl.rb
appsignal-3.3.8-java lib/appsignal/probes/gvl.rb
appsignal-3.3.8 lib/appsignal/probes/gvl.rb