sr-scripts 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .sr-scripts.yml
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
5
+ require 'fog'
6
+ require 'mysql'
7
+ require 'optparse'
8
+ require 'sr-scripts'
9
+
10
+ def get_public_ip(fog, instance_id)
11
+ return fog.servers.get(instance_id).public_ip_address
12
+ end
13
+
14
+ options = {}
15
+
16
+ optparse = OptionParser.new do|opts|
17
+ opts.on( '--master-alias-tag MASTER_ALIAS', 'AWS Tag For Master Alias') do |o|
18
+ options[:master_alias_tag] = o
19
+ end
20
+ opts.on( '--mysql-user USER', 'Mysql User') do |o|
21
+ options[:mysql_user] = o
22
+ end
23
+ opts.on( '--mysql-pass PASSWORD', 'Mysql Password') do |o|
24
+ options[:mysql_password] = o
25
+ end
26
+ opts.on( '-h', '--help', 'Display this screen' ) do
27
+ puts opts
28
+ exit
29
+ end
30
+ end
31
+
32
+ optparse.parse!
33
+
34
+ if(options[:master_alias_tag] == nil)
35
+ p "Must specify --master-alias-tag"
36
+ exit
37
+ end
38
+
39
+ mysql_user = options[:mysql_user]
40
+ mysql_pass = options[:mysql_password]
41
+
42
+ connection = SrScripts::Compute.get
43
+
44
+ all_servers = []
45
+ connection.servers.all.each do |server|
46
+ all_servers.push(server) if server.tags["master_alias"] == options[:master_alias_tag] && server.state == "running"
47
+ end
48
+
49
+ p "Found #{all_servers.length} Running Servers: " + all_servers.map {|s| s.id}.join(", ")
50
+
51
+ def print_server (server, padding)
52
+ printf "%#{padding}s: %90s\n", server.id, server.created_at
53
+ end
54
+
55
+ def print_all_slaves (server, all_servers, padding)
56
+ slave_servers = all_servers.find_all { |s| s.tags["master_instance_id"] == server.id }
57
+ slave_servers.each do |slave|
58
+ padding += 6
59
+ print_server(slave, padding)
60
+
61
+ print_all_slaves(slave, all_servers, padding) unless slave.tags["master_status"] == "master"
62
+ end
63
+ end
64
+
65
+ master_servers = all_servers.find_all { |server| server.tags["master_status"] == "master" }
66
+ p master_servers.length
67
+
68
+ master_servers.each do |master|
69
+ p "FOUND MASTER: #{master.id}"
70
+ padding = 10
71
+ print_server(master, padding)
72
+ print_all_slaves(master, all_servers, padding)
73
+ end
74
+
75
+ all_servers.each do |server|
76
+ mysql_conn = Mysql.new(server.public_ip_address, mysql_user, mysql_pass)
77
+ result = mysql_conn.query("SHOW SLAVE STATUS;")
78
+ result.each_hash do |row|
79
+ p row
80
+ p "SECONDS BEHIND: #{row['Seconds_Behind_Master']}"
81
+ if row['Seconds_Behind_Master'] == nil
82
+ p "Doesn't have a master"
83
+ end
84
+ end
85
+
86
+ puts "END SERVER: #{server.id}"
87
+
88
+ end
data/bin/sr-start-slave CHANGED
@@ -106,8 +106,8 @@ latest_snapshots.each_index do |index|
106
106
  vol.save
107
107
  p vol
108
108
 
109
- until vol.state == "in-use" do
110
- sleep 1
109
+ until vol.state == "in-use" || vol.state == "attached" do
110
+ sleep 3
111
111
  vol.reload
112
112
  end
113
113
  end
@@ -126,6 +126,8 @@ while disks_attaching
126
126
  end
127
127
  end
128
128
 
129
+ puts "All Disks Are Attached"
130
+
129
131
 
130
132
  `mkdir /mnt/mysql`
131
133
  # NEED TO FIND OUT IF NUMBER OF DISKS IS GREATER THAN 1, IF SO, THEN use mdadm to create an array and mount, if not, then just mount
@@ -150,3 +152,6 @@ connection.tags.create(:resource_id => current_instance.id, :key => "master_inst
150
152
  connection.tags.create(:resource_id => current_instance.id, :key => "mysql_disks", :value => current_master.tags["mysql_disks"])
151
153
  connection.tags.create(:resource_id => current_instance.id, :key => "master_alias", :value => current_master.tags["master_alias"])
152
154
  connection.tags.create(:resource_id => current_instance.id, :key => "master_status", :value => "slave")
155
+
156
+ p `mysql -e "SHOW SLAVE STATUS\G"`
157
+ puts "SERVER COMPLETED SETUP"
@@ -1,5 +1,5 @@
1
1
  module Sr
2
2
  module Scripts
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
  end
5
5
  end
data/lib/sr-scripts.rb CHANGED
@@ -2,9 +2,21 @@ require 'yaml'
2
2
  require 'logger'
3
3
 
4
4
  module SrScripts
5
+ class ConfigFile
6
+ def self.get
7
+ if File.exists? '.sr-scripts.yml'
8
+ return YAML.load_file '.sr-scripts.yml'
9
+ elsif File.exists? '/etc/sr-scripts.yml'
10
+ return YAML.load_file '/etc/sr-scripts.yml'
11
+ else
12
+ puts "Config File Is Missing: searching for ./.sr-scripts.yml or /etc/sr-scripts.yml"
13
+ exit 1
14
+ end
15
+ end
16
+ end
5
17
  class Compute
6
18
  def self.get
7
- yml = YAML.load_file '/etc/sr-scripts.yml'
19
+ yml = ConfigFile.get
8
20
  @aws_access_key = yml["aws_access_key"]
9
21
  @aws_secret_key = yml["aws_secret_key"]
10
22
  return Fog::Compute.new(:provider => "AWS", :aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key, :region => "us-west-1")
@@ -12,7 +24,7 @@ module SrScripts
12
24
  end
13
25
  class SimpleDB
14
26
  def self.get
15
- yml = YAML.load_file '/etc/sr-scripts.yml'
27
+ yml = ConfigFile.get
16
28
  @aws_access_key = yml["aws_access_key"]
17
29
  @aws_secret_key = yml["aws_secret_key"]
18
30
  return Fog::AWS::SimpleDB.new(:aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key, :host => "sdb.amazonaws.com")
@@ -20,7 +32,7 @@ module SrScripts
20
32
  end
21
33
  class SES
22
34
  def self.get
23
- yml = YAML.load_file '/etc/sr-scripts.yml'
35
+ yml = ConfigFile.get
24
36
  @aws_access_key = yml["aws_access_key"]
25
37
  @aws_secret_key = yml["aws_secret_key"]
26
38
  return Fog::AWS::SES.new(:aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key)
data/sr-scripts.gemspec CHANGED
@@ -18,4 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
+
22
+ s.add_dependency('fog')
23
+
21
24
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 8
9
- version: 0.1.8
8
+ - 9
9
+ version: 0.1.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Davy Campano
@@ -14,16 +14,28 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-03-20 00:00:00 -04:00
17
+ date: 2012-03-21 00:00:00 -04:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: fog
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
21
32
  description: Admin scripts
22
33
  email:
23
34
  - dcampano@gmail.com
24
35
  executables:
25
36
  - sr-backup-mysql
26
37
  - sr-check-slave
38
+ - sr-detect-slaves
27
39
  - sr-ec2-consistent-snapshot
28
40
  - sr-log-monitor
29
41
  - sr-promote-to-master
@@ -41,6 +53,7 @@ files:
41
53
  - Rakefile
42
54
  - bin/sr-backup-mysql
43
55
  - bin/sr-check-slave
56
+ - bin/sr-detect-slaves
44
57
  - bin/sr-ec2-consistent-snapshot
45
58
  - bin/sr-log-monitor
46
59
  - bin/sr-promote-to-master