Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. # frozen_string_literal: true
  3.  
  4. require "optparse"
  5. require "json"
  6. require "open3"
  7.  
  8. OptionParser.new do |opts|
  9. opts.on("-e", "--profile PROFILE", "Profile Name") do |value|
  10. @profile_name = value
  11. end
  12. end.parse!
  13.  
  14. abort "profile required" unless @profile_name
  15.  
  16. def list_tables(profile_name)
  17. stdout_str, stderr_str, status = Open3.capture3(
  18. "aws",
  19. "--profile", profile_name,
  20. "dynamodb", "list-tables"
  21. )
  22. raise stderr_str.strip unless status.success?
  23. JSON.parse(stdout_str).fetch("TableNames")
  24. end
  25.  
  26. def to_filesize(size)
  27. {
  28. "B" => 1024,
  29. "KB" => 1024 * 1024,
  30. "MB" => 1024 * 1024 * 1024,
  31. "GB" => 1024 * 1024 * 1024 * 1024,
  32. "TB" => 1024 * 1024 * 1024 * 1024 * 1024
  33. }.each_pair { |e, s| return "#{(size / (s / 1024)).round(2)}#{e}" if size < s }
  34. end
  35.  
  36. def describe_table(profile_name, table_name)
  37. stdout_str, stderr_str, status = Open3.capture3(
  38. "aws",
  39. "--profile", profile_name,
  40. "dynamodb", "describe-table", "--table-name", table_name
  41. )
  42. raise stderr_str.strip unless status.success?
  43. JSON.parse(stdout_str)
  44. end
  45.  
  46. table_names = list_tables(@profile_name)
  47.  
  48. total_size = 0
  49. table_names.each do |table_name|
  50. description = describe_table(@profile_name, table_name)
  51. size_in_bytes = description.dig("Table", "TableSizeBytes").to_f
  52. total_size += size_in_bytes
  53. puts "#{table_name}\t#{to_filesize(size_in_bytes)}"
  54. end
  55.  
  56. puts "Total Size\t#{to_filesize(total_size)}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement