Advertisement
Guest User

Untitled

a guest
Jan 18th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.87 KB | None | 0 0
  1. require 'aws-sdk'
  2.  
  3. # ENV NEED:
  4. # # ENV['AWS_REGION']
  5. # # ENV['BDASH_OPT_DB_HOST']
  6. # # ENV['BDASH_OPT_DB_USERNAME']
  7. # # ENV['BDASH_OPT_DB_PASSWORD']
  8. # # ENV['BDASH_OPT_DB_NAME']
  9. def get_aws_account_id
  10. begin
  11. iam = Aws::IAM::Client.new.get_user
  12. r = iam[:user][:arn].match('^arn:aws:iam::([0-9]{12}):.*$')[1]
  13. rescue Aws::IAM::Errors::AccessDenied
  14. result = $!
  15. r = result.to_s.match('^User: arn:aws:iam::([0-9]{12}):.*$')[1]
  16. end
  17. r
  18. end
  19.  
  20. ret = "jdbc:mysql://#{ENV['BDASH_OPT_DB_HOST']}:3306/#{ENV['BDASH_OPT_DB_NAME']}?autoReconnect=true"
  21. min_value = 100000
  22.  
  23. respect_tag_value="batch"
  24. respect_tag_value=ENV["USAGE_TAG_VALUE"] unless ENV["USAGE_TAG_VALUE"] == nil
  25.  
  26. myzone_list = []
  27. other_list = []
  28.  
  29. rds = Aws::RDS::Client.new(region: ENV['AWS_REGION'])
  30. resp = rds.describe_db_instances
  31. resp.db_instances.each do |r|
  32. if r.endpoint != nil and r.endpoint.address == ENV['BDASH_OPT_DB_HOST'] then
  33. replicas = []
  34. if r.engine == "aurora" then
  35. db_cluster_identifier = r.db_cluster_identifier
  36. recs = rds.describe_db_instances
  37. recs.db_instances.each do |rec|
  38. if rec.db_cluster_identifier == db_cluster_identifier then
  39. addr = rec.endpoint.address
  40. port = rec.endpoint.port
  41. cmd = "/usr/bin/mysql -u #{ENV['BDASH_OPT_DB_USERNAME']} -p#{ENV['BDASH_OPT_DB_PASSWORD']} -h #{addr} -P #{port} -e \"SHOW GLOBAL VARIABLES LIKE 'innodb_read_only';\" | grep 'innodb_read_only' | awk '{print $2}'"
  42. result = `#{cmd}`
  43. result.strip!
  44. if result == "ON" then
  45. replicas << rec.db_instance_identifier
  46. end
  47. end
  48. end
  49. else
  50. replicas = r.read_replica_db_instance_identifiers
  51. end
  52. p replicas
  53. unless replicas.empty?
  54. replicas.each do |x|
  55. res1 = rds.describe_db_instances({db_instance_identifier: x})
  56. if res1.db_instances.size >= 1 and res1.db_instances[0].endpoint != nil then
  57. account_id=get_aws_account_id
  58. rds_arn = sprintf("arn:aws:rds:%s:%d:db:%s", ENV['AWS_REGION'], account_id, x)
  59. response = rds.list_tags_for_resource(:resource_name => rds_arn)
  60. usage_tag = response[:tag_list].find { |tag| tag[:key] == 'usage' }
  61. if usage_tag != nil && usage_tag[:value] != respect_tag_value
  62. next
  63. else
  64. preferred_maintenance_window = res1.db_instances[0].preferred_maintenance_window
  65. wday = {"mon"=>1,"tue"=>2,"wed"=>3,"thu"=>4,"fri"=>5,"sat"=>6,"sun"=>0}
  66. weekday = wday[preferred_maintenance_window.split("-")[0].split(":")[0]]
  67. from_tm = preferred_maintenance_window.split("-")[0].split(":")[1].to_i - 1
  68. to_tm = preferred_maintenance_window.split("-")[1].split(":")[1].to_i
  69. current_wday = Time.now.wday
  70. current_tm = Time.now.hour
  71. if current_wday == weekday && from_tm <= current_tm && to_tm >= current_tm
  72. next
  73. end
  74. addr = res1.db_instances[0].endpoint.address
  75. port = res1.db_instances[0].endpoint.port
  76. if ENV["MY_ZONE"] == res1.db_instances[0].availability_zone
  77. myzone_list << {"addr"=>addr, "port"=>port}
  78. else
  79. other_list << {"addr"=>addr, "port"=>port}
  80. end
  81. end
  82. end
  83. end
  84. end
  85. end
  86. end
  87. check_list = []
  88. if !myzone_list.empty?
  89. check_list = myzone_list
  90. else
  91. if !other_list.empty?
  92. check_list = other_list
  93. end
  94. end
  95.  
  96. check_list.each do |r|
  97. addr = r["addr"]
  98. port = r["port"]
  99. cmd = "/usr/bin/mysql -u #{ENV['BDASH_OPT_DB_USERNAME']} -p#{ENV['BDASH_OPT_DB_PASSWORD']} -h #{addr} -P #{port} -e \"show status like 'Threads_connected'\" | grep Threads_connected | awk '{print $2}'"
  100. res = `#{cmd}`
  101. res.strip!
  102. p cmd
  103. p res
  104. if min_value > res.to_i and res.to_i != 0
  105. min_value = res.to_i
  106. ret = "jdbc:mysql://#{addr}:#{port}/#{ENV['BDASH_OPT_DB_NAME']}?autoReconnect=true"
  107. end
  108. end
  109.  
  110. puts ret
  111. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement