Sha256: 765703907793475c9d2c616ea6807291027acdfb184b0a751a3dd674d385562e

Contents?: true

Size: 1.24 KB

Versions: 155

Compression:

Stored size: 1.24 KB

Contents

module Prometheus
  module Client
    module Helper
      class FileLocker
        class << self
          LOCK_FILE_MUTEX = Mutex.new

          def lock_to_process(filepath)
            LOCK_FILE_MUTEX.synchronize do
              @file_locks ||= {}
              return false if @file_locks[filepath]

              file = File.open(filepath, 'ab')
              if file.flock(File::LOCK_NB | File::LOCK_EX)
                @file_locks[filepath] = file
                return true
              else
                return false
              end
            end
          end

          def unlock(filepath)
            LOCK_FILE_MUTEX.synchronize do
              @file_locks ||= {}
              return false unless @file_locks[filepath]

              file = @file_locks[filepath]
              file.flock(File::LOCK_UN)
              file.close
              @file_locks.delete(filepath)
            end
          end

          def unlock_all
            LOCK_FILE_MUTEX.synchronize do
              @file_locks ||= {}
              @file_locks.values.each do |file|
                file.flock(File::LOCK_UN)
                file.close
              end

              @file_locks = {}
            end
          end
        end
      end
    end
  end
end

Version data entries

155 entries across 155 versions & 2 rubygems

Version Path
prometheus-client-mmap-0.28.0-arm64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.28.0-aarch64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.27.0 lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.27.0-x86_64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.27.0-x86_64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.27.0-arm64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.27.0-aarch64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.1 lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.1-x86_64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.1-x86_64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.1-arm64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.1-aarch64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.0 lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.0-x86_64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.0-x86_64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.0-arm64-darwin lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.26.0-aarch64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.25.0 lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.25.0-x86_64-linux lib/prometheus/client/helper/file_locker.rb
prometheus-client-mmap-0.25.0-x86_64-darwin lib/prometheus/client/helper/file_locker.rb