Sha256: 6c8c05de844c371642b9dca2df3af9306209117f5591084fe8a57c9759c45a99

Contents?: true

Size: 1.65 KB

Versions: 27

Compression:

Stored size: 1.65 KB

Contents

require 'prometheus/client/helper/entry_parser'
require 'prometheus/client/helper/file_locker'

# load precompiled extension if available
begin
  ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION)
  require_relative "../../../#{ruby_version}/fast_mmaped_file"
rescue LoadError
  require 'fast_mmaped_file'
end

module Prometheus
  module Client
    module Helper
      class MmapedFile < FastMmapedFile
        include EntryParser

        attr_reader :filepath, :size

        def initialize(filepath)
          @filepath = filepath

          File.open(filepath, 'a+b') do |file|
            file.truncate(initial_mmap_file_size) if file.size < MINIMUM_SIZE
            @size = file.size
          end

          super(filepath)
        end

        def close
          munmap
          FileLocker.unlock(filepath)
        end

        private

        def initial_mmap_file_size
          Prometheus::Client.configuration.initial_mmap_file_size
        end

        public

        class << self
          def open(filepath)
            MmapedFile.new(filepath)
          end

          def ensure_exclusive_file(file_prefix = 'mmaped_file')
            (0..Float::INFINITY).lazy
              .map { |f_num| "#{file_prefix}_#{Prometheus::Client.pid}-#{f_num}.db" }
              .map { |filename| File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename) }
              .find { |path| Helper::FileLocker.lock_to_process(path) }
          end

          def open_exclusive_file(file_prefix = 'mmaped_file')
            filename = Helper::MmapedFile.ensure_exclusive_file(file_prefix)
            open(filename)
          end
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
prometheus-client-mmap-0.23.1 lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.1-x86_64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.1-x86_64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.1-arm64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.1-aarch64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.0 lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.0-x86_64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.0-x86_64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.0-arm64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.23.0-aarch64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0-x86_64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0 lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0-x86_64-linux-musl lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0-x86_64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0-arm64-darwin lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.22.0-aarch64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.21.0 lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.21.0-x86_64-linux lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.21.0-x86_64-linux-musl lib/prometheus/client/helper/mmaped_file.rb
prometheus-client-mmap-0.21.0-x86_64-darwin lib/prometheus/client/helper/mmaped_file.rb