Sha256: 3dd00b82978b073e6aa6daa8067571d714b6a127a38e3696c91d5483e7f6d851

Contents?: true

Size: 1.38 KB

Versions: 32

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

module Karafka
  module Web
    # Namespace used to encapsulate all components needed to track and report states of particular
    # processes
    module Tracking
      # Class used to run shell command that also returns previous result in case of a failure
      # This is used because children can get signals when performing stat fetches and then
      # fetch is stopped. This can cause invalid results from sub-shell commands.
      #
      # This will return last result as log as there was one.
      class MemoizedShell
        # Hpw many tries do we want to perform before giving up on the shell command
        MAX_ATTEMPTS = 4

        private_constant :MAX_ATTEMPTS

        def initialize
          @accu = {}
        end

        # @param cmd [String]
        # @return [String, nil] sub-shell evaluation string result or nil if we were not able to
        #   run or re-run the call.
        def call(cmd)
          attempt ||= 0

          while attempt < MAX_ATTEMPTS
            attempt += 1

            stdout_str, status = Open3.capture2(cmd)

            if status.success?
              @accu[cmd] = stdout_str
              return stdout_str
            else
              return stdout_str if attempt > MAX_ATTEMPTS
              return @accu[cmd] if @accu.key?(cmd)
            end
          end

          @accu[cmd]
        end
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
karafka-web-0.10.4 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.3 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.2 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.0 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.0.rc2 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.0.rc1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.10.0.beta1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.9.1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.9.0 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.9.0.rc3 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.9.0.rc2 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.9.0.rc1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.8.2 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.8.1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.8.0 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.8.0.rc1 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.7.10 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.7.9 lib/karafka/web/tracking/memoized_shell.rb
karafka-web-0.7.8 lib/karafka/web/tracking/memoized_shell.rb