Skip to content

Instantly share code, notes, and snippets.

@tadamak
Created February 21, 2015 13:14
Show Gist options
  • Select an option

  • Save tadamak/e597c0d119cd2d669fa5 to your computer and use it in GitHub Desktop.

Select an option

Save tadamak/e597c0d119cd2d669fa5 to your computer and use it in GitHub Desktop.

Revisions

  1. tadamak created this gist Feb 21, 2015.
    70 changes: 70 additions & 0 deletions gistfile1.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    require 'zlib'
    require 'fileutils'
    require 'time'
    require 'tempfile'

    module Utils
    def delete_file(path)
    File.delete(path) if File.exists?(path)
    end

    def get_tempfile
    tmp_file = Tempfile.new('cryo', @tmp_path)
    path = tmp_file.path
    tmp_file.close
    at_exit {delete_file path}
    path
    end

    def get_tempdir
    # ruby standard library doesn't wrap `mkdtemp`, so let's fake it
    tmp_file = Tempfile.new('cryo', @tmp_path)
    path = tmp_file.path
    tmp_file.close
    tmp_file.unlink
    FileUtils.mkdir_p(path)
    at_exit {FileUtils.rm_rf path}
    path
    end

    def gzip_file(path)
    # given a path to a file, return a gzipped version of it
    tempfile = get_tempfile
    #logger.info "gzipping #{path} to #{tempfile}"

    # stream the gzipped content into a file as we compute it
    Zlib::GzipWriter.open(tempfile) do |gz|
    File.open(path) do |f|
    # write 1M chunks at a time
    gz.write f.read(1024*1024) until f.eof?
    end
    end
    #logger.info "done unzipping"
    tempfile
    end

    def safe_run(command)
    #logger.debug "about to run #{command}"
    output = `bash -c "set -o pipefail && #{command}"`.chomp
    raise "command '#{command}' failed!\nOutput was:\n#{output}" unless $?.success?
    output
    end

    def verify_system_dependency(command)
    raise "system dependency #{command} is not installed" unless system "which #{command} > /dev/null"
    end

    def get_utc_time_from_key_name(key_name)
    logger.debug "getting time for #{key_name}"
    year,month,day,time = key_name.split('/')
    hour,min,sec = time.split(':')
    Time.utc(year,month,day,hour,min,sec)
    end

    # returns the age of the snapshot in mins
    def get_age_from_key_name(key_name)
    snapshot_time = get_utc_time_from_key_name(key_name)
    age_in_mins_as_float = (@time - snapshot_time) / 60
    age_in_mins_as_float.to_i
    end
    end