Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- # frozen_string_literal: true
- require "optparse"
- require "json"
- require "open3"
- OptionParser.new do |opts|
- opts.on("-e", "--profile PROFILE", "Profile Name") do |value|
- @profile_name = value
- end
- end.parse!
- abort "profile required" unless @profile_name
- def list_tables(profile_name)
- stdout_str, stderr_str, status = Open3.capture3(
- "aws",
- "--profile", profile_name,
- "dynamodb", "list-tables"
- )
- raise stderr_str.strip unless status.success?
- JSON.parse(stdout_str).fetch("TableNames")
- end
- def to_filesize(size)
- {
- "B" => 1024,
- "KB" => 1024 * 1024,
- "MB" => 1024 * 1024 * 1024,
- "GB" => 1024 * 1024 * 1024 * 1024,
- "TB" => 1024 * 1024 * 1024 * 1024 * 1024
- }.each_pair { |e, s| return "#{(size / (s / 1024)).round(2)}#{e}" if size < s }
- end
- def describe_table(profile_name, table_name)
- stdout_str, stderr_str, status = Open3.capture3(
- "aws",
- "--profile", profile_name,
- "dynamodb", "describe-table", "--table-name", table_name
- )
- raise stderr_str.strip unless status.success?
- JSON.parse(stdout_str)
- end
- table_names = list_tables(@profile_name)
- total_size = 0
- table_names.each do |table_name|
- description = describe_table(@profile_name, table_name)
- size_in_bytes = description.dig("Table", "TableSizeBytes").to_f
- total_size += size_in_bytes
- puts "#{table_name}\t#{to_filesize(size_in_bytes)}"
- end
- puts "Total Size\t#{to_filesize(total_size)}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement