class LogStash::Outputs::Swift::TemporaryFile

Wrap the actual file descriptor into an utility classe It make it more OOP and easier to reason with the paths.

Attributes

fd[R]

Public Class Methods

create_from_existing_file(file_path, temporary_folder) click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 61
def self.create_from_existing_file(file_path, temporary_folder)
  key_parts = Pathname.new(file_path).relative_path_from(temporary_folder).to_s.split(::File::SEPARATOR)

  TemporaryFile.new(key_parts.slice(1, key_parts.size).join("/"),
                 ::File.open(file_path, "r"),
                 ::File.join(temporary_folder, key_parts.slice(0, 1)))
end
new(key, fd, temp_path) click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 18
def initialize(key, fd, temp_path)
  @fd = fd
  @key = key
  @temp_path = temp_path
  @created_at = Time.now
end

Public Instance Methods

ctime() click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 25
def ctime
  @created_at
end
delete!() click to toggle source

Each temporary file is made inside a directory named with an UUID, instead of deleting the file directly and having the risk of deleting other files we delete the root of the UUID, using a UUID also remove the risk of deleting unwanted file, it acts as a sandbox.

# File lib/logstash/outputs/swift/temporary_file.rb, line 52
def delete!
  @fd.close rescue IOError # force close anyway
  FileUtils.rm_r(@temp_path, :secure => true)
end
empty?() click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 57
def empty?
  size == 0
end
key() click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 44
def key
  @key.gsub(/^\//, "")
end
size() click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 33
def size
  # Use the fd size to get the accurate result,
  # so we dont have to deal with fsync
  # if the file is close we will use the File::size
  begin
    @fd.size
  rescue IOError
    ::File.size(path)
  end
end
temp_path() click to toggle source
# File lib/logstash/outputs/swift/temporary_file.rb, line 29
def temp_path
  @temp_path
end