sr-scripts 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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