gaptool-server 0.4.13 → 0.4.14

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9dc233e16ff443dbc4132570c3c357425bbcce53
4
- data.tar.gz: 302eba8e8fc18f28f55e576f41a3e72eea3fba95
3
+ metadata.gz: 4438725ee040e587e69c0ed33fa6392d1296a8d6
4
+ data.tar.gz: 1245aed75de37b9f483e3dc56299c67b9eae4b6c
5
5
  SHA512:
6
- metadata.gz: a7f878f89d5f390a72d9ec1ea14471bf674e4fe914e2a10ca78064d8b34ff893809348ce2083c16bee05620cd6255ffc9939ad6f7cc2060f7e99c8d3a6f0e05b
7
- data.tar.gz: 0419b357af1b6e77db66893b2707660e5cfc2cb60037b49992745cbf26c33611fc56aa1788aa4f91c3c59ee314cc37d42ff10bc8b13dfb3b4dc07216f26a936f
6
+ metadata.gz: da43276993074df11e5531c55c923d3c982d090b70cabe779d828fc1a53d3ab12ea1e1c1075831805c6b9116e32bdcc29ea7c576f0ddc527950dae3a555889df
7
+ data.tar.gz: baf01a34b4bbb210d4fd712b07fd28056b6fd9ac8f9cfda8e2b02f5b9499e583be4779e835df929920357f029289161fdb3f87a3161400caf1712fbe4ef79b1b
data/lib/app.rb CHANGED
@@ -30,5 +30,4 @@ class GaptoolServer < Sinatra::Application
30
30
  end
31
31
 
32
32
  require_relative 'helpers/init'
33
- require_relative 'models/init'
34
33
  require_relative 'routes/init'
@@ -1,24 +1,12 @@
1
1
  # encoding: utf-8
2
2
  module GaptoolBaseHelpers
3
- def hash2redis( key, hash )
3
+ def hash2redis(key, hash)
4
4
  hash.keys.each do |hkey|
5
5
  $redis.hset key, hkey, hash[hkey]
6
6
  end
7
7
  end
8
8
 
9
- def redishash(query)
10
- result = Hash.new
11
- query.keys.each do |key|
12
- entry = Hash.new
13
- query[key].each do |hkey|
14
- entry.merge!(hkey => $redis.hget(key, hkey))
15
- end
16
- result.merge!({ key => entry })
17
- end
18
- return result
19
- end
20
-
21
- def putkey( host )
9
+ def putkey(host)
22
10
  @key = OpenSSL::PKey::RSA.new 2048
23
11
  @pubkey = "#{@key.ssh_type} #{[@key.to_blob].pack('m0')} GAPTOOL_GENERATED_KEY"
24
12
  ENV['SSH_AUTH_SOCK'] = ''
@@ -47,121 +35,4 @@ module GaptoolBaseHelpers
47
35
  return sg.id
48
36
  end
49
37
 
50
- def runservice(host, role, environment, service, keys, state)
51
- ENV['SSH_AUTH_SOCK'] = ''
52
- Net::SSH.start(host, 'admin', :key_data => [$redis.hget('config', 'gaptoolkey')], :config => false, :keys_only => true, :paranoid => false) do |ssh|
53
- if state == 'start'
54
- ssh.exec! "echo '#{keys.to_yaml}' > /tmp/apikeys-#{service}.yml"
55
- ssh.exec! "sudo restart #{service} || sudo start #{service} || exit 0"
56
- $redis.lpush("running", "{:hostname => '#{host}', :role => '#{role}', :environment => '#{environment}', :service => '#{service}'}")
57
- elsif state == 'stop'
58
- ssh.exec! "rm /tmp/apikeys-#{service}.yml"
59
- ssh.exec! "sudo stop #{service} || exit 0"
60
- $redis.lrem("running", -1, "{:hostname => '#{host}', :role => '#{role}', :environment => '#{environment}', service => '#{service}'}")
61
- end
62
- end
63
- end
64
-
65
- def balanceservices(role, environment)
66
- @runable = Array.new
67
- @available = Array.new
68
- @totalcap = 0
69
- @volume = 0
70
- $redis.keys("host:#{role}:#{environment}:*").each do |host|
71
- @available << {
72
- :hostname => $redis.hget(host, 'hostname'),
73
- :instance => $redis.hget(host, 'instance'),
74
- :capacity => $redis.hget(host, 'capacity').to_i,
75
- }
76
- @totalcap = @totalcap + $redis.hget(host, 'capacity').to_i
77
- end
78
- $redis.keys("service:#{role}:#{environment}:*").each do |service|
79
- unless service =~ /:count/
80
- if $redis.hget(service, 'run').to_i == 1
81
- @runable << {
82
- :name => $redis.hget(service, 'name'),
83
- :keys => eval($redis.hget(service, 'keys')),
84
- :weight => $redis.hget(service, 'weight').to_i
85
- }
86
- end
87
- end
88
- end
89
- @volume = 0
90
- @runable.each do |service|
91
- @volume += service[:weight]
92
- end
93
- if @totalcap < @volume
94
- return { :error => true, :message => "This would overcommit, remove some resources or add nodes", :totalcap => @totalcap, :volume => @volume }
95
- else
96
- @runable.sort! { |x, y| x[:weight] <=> y[:weight] }
97
- @available.sort! { |x, y| x[:capacity] <=> y[:capacity] }
98
- @runlist = Array.new
99
- @svctab = Hash.new
100
- @runable.each do |event|
101
- @svctab[event[:name]] = Array.new
102
- end
103
- @exitrunable = 0
104
- while @runable != []
105
- break if @exitrunable == 1
106
- @available.each do |host|
107
- break if @runable.last.nil?
108
- @exitrunable = 1 if @svctab[@runable.last[:name]].include? host[:hostname]
109
- break if @svctab[@runable.last[:name]].include? host[:hostname]
110
- if host[:capacity] >= @runable.last[:weight]
111
- host[:capacity] = host[:capacity] - @runable.last[:weight]
112
- @svctab[@runable.last[:name]] << host[:hostname]
113
- @runlist << { :host => host, :service => @runable.pop }
114
- end
115
- end
116
- end
117
- return @runlist
118
- end
119
- end
120
-
121
- def servicestopall(role, environment)
122
- $redis.lrange('running', 0, -1).peach do |service|
123
- line = eval(service)
124
- if line[:role] == role && line[:environment] == environment
125
- runservice(line[:hostname], role, environment, line[:service], nil, 'stop')
126
- end
127
- end
128
- end
129
-
130
- def hostsgen(zone)
131
- AWS.config(:access_key_id => $redis.hget('config', 'aws_id'), :secret_access_key => $redis.hget('config', 'aws_secret'), :ec2_endpoint => "ec2.#{zone}.amazonaws.com")
132
- @ec2 = AWS::EC2.new
133
- hosts = Hash.new
134
- $redis.keys("host:*").each do |host|
135
- $redis.hset(host, 'hostname', @ec2.instances[$redis.hget(host, 'instance')].dns_name)
136
- hosts.merge!(host.gsub(/host:/, '').gsub(/:/,'-') => Resolv.getaddress($redis.hget(host, 'hostname')))
137
- if $redis.hget(host, 'alias')
138
- hosts.merge!($redis.hget(host, 'alias') => Resolv.getaddress($redis.hget(host, 'hostname')))
139
- end
140
- end
141
-
142
- hostsfile = "# DO NOT EDIT, GENERATED BY GAPTOOL\n127.0.0.1 localhost\n::1 localhost\n"
143
- hosts.keys.each do |key|
144
- hostsfile += "#{hosts[key]} #{key} # PLACED BY GT\n"
145
- end
146
- # $redis.keys("host:*").peach do |host|
147
- # ENV['SSH_AUTH_SOCK'] = ''
148
- # Net::SSH.start($redis.hget(host, 'hostname'), 'admin', :key_data => [$redis.hget('config', 'gaptoolkey')], :config => false, :keys_only => true, :paranoid => false) do |ssh|
149
- # ssh.exec! "echo \"127.0.0.1 #{currenthost}\n\" \"#{hostsfile}\" > /etc/hosts.generated"
150
- # end
151
- # end
152
- return hosts
153
- end
154
-
155
- def getservices()
156
- services = Array.new
157
- $redis.keys('service:*').each do |service|
158
- unless service =~ /:count/
159
- line = $redis.hgetall(service)
160
- line['keys'] = eval(line['keys'])
161
- services << line
162
- end
163
- end
164
- return services
165
- end
166
-
167
38
  end
@@ -1,21 +1,6 @@
1
1
  # encoding: utf-8
2
- require_relative 'partials'
3
- GaptoolServer.helpers PartialPartials
4
-
5
- require_relative 'nicebytes'
6
- GaptoolServer.helpers NiceBytes
7
-
8
2
  require_relative 'gaptool-base'
9
3
  GaptoolServer.helpers GaptoolBaseHelpers
10
4
 
11
- require_relative 'redis'
12
- GaptoolServer.helpers RedisHelpers
13
-
14
- require_relative 'mongodb'
15
- GaptoolServer.helpers MongodbHelpers
16
-
17
- require_relative 'services'
18
- GaptoolServer.helpers ServiceHelpers
19
-
20
5
  require_relative 'rehash'
21
6
  GaptoolServer.helpers RehashHelpers
@@ -1,6 +1,3 @@
1
1
  # encoding: utf-8
2
2
  require_relative 'main'
3
- require_relative 'redis'
4
- require_relative 'mongodb'
5
- require_relative 'services'
6
3
  require_relative 'rehash'
@@ -9,28 +9,6 @@ class GaptoolServer < Sinatra::Application
9
9
  "PONG"
10
10
  end
11
11
 
12
- post '/redishash' do
13
- data = JSON.parse request.body.read
14
- redishash(data).to_json
15
- end
16
-
17
- get '/servicebalance/:role/:environment' do
18
- runlist = balanceservices(params[:role], params[:environment])
19
- unless runlist.kind_of? Hash
20
- servicestopall(params[:role], params[:environment])
21
- runlist.peach do |event|
22
- runservice(event[:host][:hostname], params[:role], params[:environment], event[:service][:name], event[:service][:keys], 'start')
23
- end
24
- end
25
- runlist.to_json
26
- end
27
-
28
- post '/regenhosts' do
29
- data = JSON.parse request.body.read
30
- hostsgen(data['zone'])
31
- hosts.to_json
32
- end
33
-
34
12
  post '/init' do
35
13
  data = JSON.parse request.body.read
36
14
  AWS.config(:access_key_id => $redis.hget('config', 'aws_id'), :secret_access_key => $redis.hget('config', 'aws_secret'), :ec2_endpoint => "ec2.#{data['zone'].chop}.amazonaws.com")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gaptool-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.13
4
+ version: 0.4.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Bailey
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-12 00:00:00.000000000 Z
12
+ date: 2014-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -95,34 +95,6 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
- - !ruby/object:Gem::Dependency
99
- name: bson_ext
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :runtime
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- - !ruby/object:Gem::Dependency
113
- name: mongo
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
98
  - !ruby/object:Gem::Dependency
127
99
  name: shoulda
128
100
  requirement: !ruby/object:Gem::Requirement
@@ -222,7 +194,7 @@ dependencies:
222
194
  - !ruby/object:Gem::Version
223
195
  version: '0'
224
196
  description: gaptool-server for managing cloud resources
225
- email: m@mdb.io
197
+ email: ops@gild.com
226
198
  executables:
227
199
  - gaptool-server
228
200
  extensions: []
@@ -230,40 +202,18 @@ extra_rdoc_files:
230
202
  - LICENSE.txt
231
203
  - README.rdoc
232
204
  files:
233
- - ".document"
234
- - Gemfile
235
205
  - LICENSE.txt
236
- - Procfile
237
206
  - README.rdoc
238
- - Rakefile
239
- - VERSION
240
207
  - bin/gaptool-server
241
- - config.ru
242
- - gaptool-server.gemspec
243
208
  - lib/app.rb
244
209
  - lib/helpers/gaptool-base.rb
245
210
  - lib/helpers/init.rb
246
- - lib/helpers/mongodb.rb
247
- - lib/helpers/nicebytes.rb
248
- - lib/helpers/partials.rb
249
- - lib/helpers/redis.rb
250
211
  - lib/helpers/rehash.rb
251
- - lib/helpers/services.rb
252
- - lib/models/init.rb
253
- - lib/models/user.rb
254
212
  - lib/public/css/common.css
255
- - lib/public/js/manifest.txt
256
213
  - lib/routes/init.rb
257
214
  - lib/routes/main.rb
258
- - lib/routes/mongodb.rb
259
- - lib/routes/redis.rb
260
215
  - lib/routes/rehash.rb
261
- - lib/routes/services.rb
262
- - lib/views/hosts.erb
263
216
  - lib/views/init.erb
264
- - setup.rb
265
- - test/helper.rb
266
- - test/test_gaptool-server.rb
267
217
  homepage: http://github.com/mattbailey/gaptool-server
268
218
  licenses:
269
219
  - MIT
@@ -284,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
234
  version: '0'
285
235
  requirements: []
286
236
  rubyforge_project:
287
- rubygems_version: 2.4.1
237
+ rubygems_version: 2.2.2
288
238
  signing_key:
289
239
  specification_version: 4
290
240
  summary: gaptool-server for managing cloud resources
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/Gemfile DELETED
@@ -1,25 +0,0 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem "shoulda", ">= 0"
10
- gem "rdoc", ">= 0"
11
- gem "bundler", ">= 0"
12
- gem "jeweler", "~> 1.8.4"
13
- gem "simplecov", ">= 0"
14
- gem "shotgun", ">= 0"
15
- gem "pry", ">= 0"
16
- end
17
-
18
- gem 'sinatra'
19
- gem 'thin', "~> 1.5.1"
20
- gem 'redis'
21
- gem 'aws-sdk'
22
- gem 'net-ssh'
23
- gem 'peach'
24
- gem 'bson_ext'
25
- gem 'mongo'
data/Procfile DELETED
@@ -1 +0,0 @@
1
- web: bundle exec ruby web.rb -p $PORT
data/Rakefile DELETED
@@ -1,129 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "gaptool-server"
18
- gem.homepage = "http://github.com/mattbailey/gaptool-server"
19
- gem.license = "MIT"
20
- gem.summary = %Q{gaptool-server for managing cloud resources}
21
- gem.description = %Q{gaptool-server for managing cloud resources}
22
- gem.email = "m@mdb.io"
23
- gem.authors = ["Matt Bailey"]
24
- gem.executables = ['gaptool-server']
25
- gem.default_executable = 'gaptool-server'
26
- # dependencies defined in Gemfile
27
- end
28
- Jeweler::RubygemsDotOrgTasks.new
29
-
30
- require 'rake/testtask'
31
- Rake::TestTask.new(:test) do |test|
32
- test.libs << 'lib' << 'test'
33
- test.pattern = 'test/**/test_*.rb'
34
- test.verbose = true
35
- end
36
-
37
- task :default => :test
38
-
39
- require 'rdoc/task'
40
- Rake::RDocTask.new do |rdoc|
41
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
-
43
- rdoc.rdoc_dir = 'rdoc'
44
- rdoc.title = "gaptool-server #{version}"
45
- rdoc.rdoc_files.include('README*')
46
- rdoc.rdoc_files.include('lib/**/*.rb')
47
- end
48
-
49
- namespace :dev do
50
- require 'pry'
51
- require 'yaml'
52
- require 'redis'
53
- require 'aws-sdk'
54
- YAML::ENGINE.yamler='syck'
55
- task :shell do
56
- $stderr.puts "env vars REDIS_HOST, REDIS_PORT, and REDIS_PASS should all be set or\ndefaults of localhost:6379 with no password will be used"
57
- ENV['REDIS_HOST'] = 'localhost' unless ENV['REDIS_HOST']
58
- ENV['REDIS_PORT'] = '6379' unless ENV['REDIS_PORT']
59
- ENV['REDIS_PASS'] = nil unless ENV['REDIS_PASS']
60
- @redis = Redis.new(:host => ENV['REDIS_HOST'], :port => ENV['REDIS_PORT'], :password => ENV['REDIS_PASS'])
61
- $stderr.puts "@redis available"
62
- if @redis.hget('config', 'aws_id' ) && @redis.hget('config', 'aws_secret')
63
- if !ENV['AWS_ZONE']
64
- print "Shortname aws zone? "
65
- zone = $stdin.gets.chomp
66
- else
67
- zone = ENV['AWS_ZONE']
68
- end
69
- AWS.config(:access_key_id => @redis.hget('config', 'aws_id'), :secret_access_key => @redis.hget('config', 'aws_secret'), :ec2_endpoint => "ec2.#{zone}.amazonaws.com")
70
- @ec2 = AWS::EC2.new
71
- $stderr.puts "@ec2 available"
72
- end
73
- binding.pry
74
- puts "exiting"
75
- end
76
- end
77
-
78
- namespace :config do
79
- require 'redis'
80
- require 'yaml'
81
- ENV['REDIS_HOST'] = 'localhost' unless ENV['REDIS_HOST']
82
- ENV['REDIS_PORT'] = '6379' unless ENV['REDIS_PORT']
83
- ENV['REDIS_PASS'] = nil unless ENV['REDIS_PASS']
84
- @redis = Redis.new(:host => ENV['REDIS_HOST'], :port => ENV['REDIS_PORT'], :password => ENV['REDIS_PASS'])
85
- $stderr.puts "env vars REDIS_HOST, REDIS_PORT, and REDIS_PASS should all be set or\ndefaults of localhost:6379 with no password will be used"
86
- YAML::ENGINE.yamler='syck'
87
-
88
- task :import do
89
- data = YAML::Parser($stdin)
90
- puts data
91
- end
92
- task :delete do
93
- print "Delete ALL existing data (y/N)? "
94
- delete = gets.chomp
95
- hashes = [
96
- 'sg:us-east-1',
97
- 'sg:us-west-1',
98
- 'sg:us-west-2',
99
- 'sg:ap-northeast-1',
100
- 'sg:ap-southeast-1',
101
- 'sg:ap-southeast-2',
102
- 'sg:eu-west-1',
103
- 'sg:sa-east-1',
104
- 'config',
105
- 'amis',
106
- 'users',
107
- ]
108
-
109
- if delete == 'y'
110
- @redis.keys("*") do |key|
111
- @redis.del key
112
- end
113
- end
114
-
115
- end
116
-
117
- task :dump do
118
- dump = Hash.new
119
- @redis.keys("*").each do |key|
120
- if @redis.type(key) == 'hash'
121
- dump.merge!({ key => @redis.hgetall(key) })
122
- else
123
- dump.merge!({ key => @redis.get(key) })
124
- end
125
- end
126
- puts dump.to_yaml
127
- end
128
-
129
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.4.13
data/config.ru DELETED
@@ -1,24 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'redis'
4
-
5
- ENV['REDIS_HOST'] = 'localhost' unless ENV['REDIS_HOST']
6
- ENV['REDIS_PORT'] = '6379' unless ENV['REDIS_PORT']
7
- ENV['REDIS_PASS'] = nil unless ENV['REDIS_PASS']
8
- $redis = Redis.new(:host => ENV['REDIS_HOST'], :port => ENV['REDIS_PORT'], :password => ENV['REDIS_PASS'])
9
-
10
- libpath = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
11
-
12
- $:.unshift(libpath)
13
-
14
- require "#{libpath}/app.rb"
15
- #Dir["#{ENV['HOME']}/.gaptool-server-plugins/*.rb"].each {|file| require file }
16
- #Dir["#{libpath}/plugins/*.rb"].each {|file| require file }
17
-
18
- instance = GaptoolServer.new
19
- #$redis.smembers("plugins").each do |plugin|
20
- ## puts "Loading Plugin #{plugin}"
21
- # instance.extend(Object.instance_eval{remove_const(plugin)})
22
- #end
23
-
24
- run instance
@@ -1,116 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "gaptool-server"
8
- s.version = "0.4.13"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Matt Bailey", "Francesco Laurita"]
12
- s.date = "2013-08-12"
13
- s.description = "gaptool-server for managing cloud resources"
14
- s.email = "m@mdb.io"
15
- s.executables = ["gaptool-server"]
16
- s.extra_rdoc_files = [
17
- "LICENSE.txt",
18
- "README.rdoc"
19
- ]
20
- s.files = [
21
- ".document",
22
- "Gemfile",
23
- "LICENSE.txt",
24
- "Procfile",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "bin/gaptool-server",
29
- "config.ru",
30
- "gaptool-server.gemspec",
31
- "lib/app.rb",
32
- "lib/helpers/gaptool-base.rb",
33
- "lib/helpers/init.rb",
34
- "lib/helpers/mongodb.rb",
35
- "lib/helpers/nicebytes.rb",
36
- "lib/helpers/partials.rb",
37
- "lib/helpers/redis.rb",
38
- "lib/helpers/rehash.rb",
39
- "lib/helpers/services.rb",
40
- "lib/models/init.rb",
41
- "lib/models/user.rb",
42
- "lib/public/css/common.css",
43
- "lib/public/js/manifest.txt",
44
- "lib/routes/init.rb",
45
- "lib/routes/main.rb",
46
- "lib/routes/mongodb.rb",
47
- "lib/routes/redis.rb",
48
- "lib/routes/rehash.rb",
49
- "lib/routes/services.rb",
50
- "lib/views/hosts.erb",
51
- "lib/views/init.erb",
52
- "setup.rb",
53
- "test/helper.rb",
54
- "test/test_gaptool-server.rb"
55
- ]
56
- s.homepage = "http://github.com/mattbailey/gaptool-server"
57
- s.licenses = ["MIT"]
58
- s.require_paths = ["lib"]
59
- s.rubygems_version = "2.0.5"
60
- s.summary = "gaptool-server for managing cloud resources"
61
-
62
- if s.respond_to? :specification_version then
63
- s.specification_version = 4
64
-
65
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
66
- s.add_runtime_dependency(%q<sinatra>, [">= 0"])
67
- s.add_runtime_dependency(%q<thin>, ["~> 1.5.1"])
68
- s.add_runtime_dependency(%q<redis>, [">= 0"])
69
- s.add_runtime_dependency(%q<aws-sdk>, [">= 0"])
70
- s.add_runtime_dependency(%q<net-ssh>, [">= 0"])
71
- s.add_runtime_dependency(%q<peach>, [">= 0"])
72
- s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
73
- s.add_runtime_dependency(%q<mongo>, [">= 0"])
74
- s.add_development_dependency(%q<shoulda>, [">= 0"])
75
- s.add_development_dependency(%q<rdoc>, [">= 0"])
76
- s.add_development_dependency(%q<bundler>, [">= 0"])
77
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
78
- s.add_development_dependency(%q<simplecov>, [">= 0"])
79
- s.add_development_dependency(%q<shotgun>, [">= 0"])
80
- s.add_development_dependency(%q<pry>, [">= 0"])
81
- else
82
- s.add_dependency(%q<sinatra>, [">= 0"])
83
- s.add_dependency(%q<thin>, ["~> 1.5.1"])
84
- s.add_dependency(%q<redis>, [">= 0"])
85
- s.add_dependency(%q<aws-sdk>, [">= 0"])
86
- s.add_dependency(%q<net-ssh>, [">= 0"])
87
- s.add_dependency(%q<peach>, [">= 0"])
88
- s.add_dependency(%q<bson_ext>, [">= 0"])
89
- s.add_dependency(%q<mongo>, [">= 0"])
90
- s.add_dependency(%q<shoulda>, [">= 0"])
91
- s.add_dependency(%q<rdoc>, [">= 0"])
92
- s.add_dependency(%q<bundler>, [">= 0"])
93
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
94
- s.add_dependency(%q<simplecov>, [">= 0"])
95
- s.add_dependency(%q<shotgun>, [">= 0"])
96
- s.add_dependency(%q<pry>, [">= 0"])
97
- end
98
- else
99
- s.add_dependency(%q<sinatra>, [">= 0"])
100
- s.add_dependency(%q<thin>, ["~> 1.5.1"])
101
- s.add_dependency(%q<redis>, [">= 0"])
102
- s.add_dependency(%q<aws-sdk>, [">= 0"])
103
- s.add_dependency(%q<net-ssh>, [">= 0"])
104
- s.add_dependency(%q<peach>, [">= 0"])
105
- s.add_dependency(%q<bson_ext>, [">= 0"])
106
- s.add_dependency(%q<mongo>, [">= 0"])
107
- s.add_dependency(%q<shoulda>, [">= 0"])
108
- s.add_dependency(%q<rdoc>, [">= 0"])
109
- s.add_dependency(%q<bundler>, [">= 0"])
110
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
111
- s.add_dependency(%q<simplecov>, [">= 0"])
112
- s.add_dependency(%q<shotgun>, [">= 0"])
113
- s.add_dependency(%q<pry>, [">= 0"])
114
- end
115
- end
116
-
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
- require 'mongo'
3
- module MongodbHelpers
4
- def collectioncount(dbcollections)
5
- @remote_mongodb = Mongo::MongoClient.new(
6
- 'localhost' || $redis.hget('config', 'remotemongo:host'),
7
- 27017 || $redis.hget('config', 'remotemongo:port'),
8
- )
9
- result = Hash.new
10
- dbcollections.keys.each do |db|
11
- @db = @remote_mongodb[db]
12
- count = Hash.new
13
- dbcollections[db].each do |collection|
14
- count.merge!(collection => @db[collection].stats['count'])
15
- end
16
- result.merge!(db => count)
17
- end
18
- return result
19
- end
20
- end
@@ -1,30 +0,0 @@
1
- # encoding: utf-8
2
- module NiceBytes
3
- K = 2.0**10
4
- M = 2.0**20
5
- G = 2.0**30
6
- T = 2.0**40
7
- def nice_bytes( bytes, max_digits=3 )
8
- value, suffix, precision = case bytes
9
- when 0...K
10
- [ bytes, 'B', 0 ]
11
- else
12
- value, suffix = case bytes
13
- when K...M then [ bytes / K, 'kiB' ]
14
- when M...G then [ bytes / M, 'MiB' ]
15
- when G...T then [ bytes / G, 'GiB' ]
16
- else [ bytes / T, 'TiB' ]
17
- end
18
- used_digits = case value
19
- when 0...10 then 1
20
- when 10...100 then 2
21
- when 100...1000 then 3
22
- else 4
23
- end
24
- leftover_digits = max_digits - used_digits
25
- [ value, suffix, leftover_digits > 0 ? leftover_digits : 0 ]
26
- end
27
- "%.#{precision}f#{suffix}" % value
28
- end
29
- module_function :nice_bytes
30
- end
@@ -1,6 +0,0 @@
1
- # encoding: utf-8
2
- module PartialPartials
3
- def spoof_request(uri,env_modifications={})
4
- call(env.merge("PATH_INFO" => uri).merge(env_modifications)).last.join
5
- end
6
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
- module RedisHelpers
3
- def remotellen(lists)
4
- @remote_redis = Redis.new(
5
- :host => $redis.hget('config', 'remoteredis:host'),
6
- :port => $redis.hget('config', 'remoteredis:port'),
7
- :password => nil || $redis.hget('config', 'remoteredis:password')
8
- )
9
- result = Hash.new
10
- lists.each do |list|
11
- result.merge!(list => @remote_redis.llen(list))
12
- end
13
- return result
14
- end
15
-
16
- def remotelpush(list, value)
17
- @remote_redis = Redis.new(
18
- :host => $redis.hget('config', 'remoteredis:host'),
19
- :port => 6379 || $redis.hget('config', 'remoteredis:port'),
20
- :password => nil || $redis.hget('config', 'remoteredis:password')
21
- )
22
- begin
23
- @remote_redis.lpush(list, value)
24
- return { success => "true" }
25
- rescue
26
- return { success => "false" }
27
- end
28
- end
29
- end
@@ -1,47 +0,0 @@
1
- # encoding: utf-8
2
- module ServiceHelpers
3
- def svcapi_getkey(service)
4
- $redis.brpoplpush("apikey:available:#{service}", "apikey:inuse:#{service}", 120)
5
- end
6
- def svcapi_releasekey(service, key)
7
- $redis.lrem("apikey:inuse:#{service}", 1, key)
8
- $redis.rpush("apikey:available:#{service}", key)
9
- end
10
- def svcapi_showkeys(service)
11
- unless service == :all
12
- @inuse = $redis.lrange("apikey:inuse:#{service}", 0, -1)
13
- @available = $redis.lrange("apikey:available:#{service}", 0, -1)
14
- return { :inuse => @inuse, :available => @available }
15
- else
16
- @all = Hash.new
17
- $redis.keys('apikey:*').each do |service|
18
- if service =~ /:available:/
19
- begin
20
- @all[service.gsub('apikey:available:', '')][:available] = $redis.lrange(service, 0, -1)
21
- rescue
22
- @all[service.gsub('apikey:available:', '')] = Hash.new
23
- @all[service.gsub('apikey:available:', '')][:available] = $redis.lrange(service, 0, -1)
24
- end
25
- elsif service =~ /:inuse:/
26
- begin
27
- @all[service.gsub('apikey:inuse:', '')][:inuse] = $redis.lrange(service, 0, -1)
28
- rescue
29
- @all[service.gsub('apikey:inuse:', '')] = Hash.new
30
- @all[service.gsub('apikey:inuse:', '')][:inuse] = $redis.lrange(service, 0, -1)
31
- end
32
- end
33
- end
34
- return @all
35
- end
36
- end
37
- def svcapi_deletekey(service, key)
38
- begin
39
- $redis.lrem("apikey:inuse:#{service}", 1, key)
40
- $redis.lrem("apikey:available:#{service}", 1, key)
41
- rescue
42
- end
43
- end
44
- def svcapi_putkey(service, key)
45
- $redis.lpush("apikey:available:#{service}", key)
46
- end
47
- end
@@ -1,6 +0,0 @@
1
- # encoding: utf-8
2
- #require 'sequel'
3
- # DB = Sequel.postgres 'dbname', user:'bduser', password:'dbpass', host:'localhost'
4
- # DB << "SET CLIENT_ENCODING TO 'UTF8';"
5
-
6
- #require_relative 'user'
@@ -1,4 +0,0 @@
1
- # encoding: utf-8
2
- #class User < Sequel::Model
3
- # ...
4
- #end
@@ -1 +0,0 @@
1
-
@@ -1,7 +0,0 @@
1
- # encoding: utf-8
2
- class GaptoolServer < Sinatra::Application
3
- post '/status/mongo/colcount' do
4
- data = JSON.parse request.body.read
5
- collectioncount(data).to_json
6
- end
7
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- class GaptoolServer < Sinatra::Application
3
- post '/status/redis/llen' do
4
- data = JSON.parse request.body.read
5
- remotellen(data).to_json
6
- end
7
- post '/status/redis/lpush' do
8
- data = JSON.parse request.body.read
9
- remotelpush(data['list'], data['value']).to_json
10
- end
11
- end
@@ -1,80 +0,0 @@
1
- # encoding: utf-8
2
- class GaptoolServer < Sinatra::Application
3
-
4
- get '/servicekeys/use/:service' do
5
- svcapi_getkey(params[:service])
6
- end
7
-
8
- get '/servicekeys/:service' do
9
- svcapi_showkeys(params[:service]).to_json
10
- end
11
-
12
- get '/servicekeys' do
13
- svcapi_showkeys(:all).to_json
14
- end
15
-
16
- post '/servicekeys/release/:service' do
17
- data = JSON.parse request.body.read
18
- svcapi_releasekey(params[:service], data['key'])
19
- end
20
-
21
- put '/servicekeys/:service' do
22
- data = JSON.parse request.body.read
23
- "{\"count\": \"#{svcapi_putkey(params[:service], data['key'])}\"}"
24
- end
25
-
26
- delete '/servicekeys/:service' do
27
- data = JSON.parse request.body.read
28
- "{\"count\": \"#{svcapi_deletekey(params[:service], data['key'])}\"}"
29
- end
30
-
31
- put '/service/:role/:environment' do
32
- data = JSON.parse request.body.read
33
- count = $redis.incr("service:#{params[:role]}:#{params[:environment]}:#{data['name']}:count")
34
- key = "service:#{params[:role]}:#{params[:environment]}:#{data['name']}:#{count}"
35
- $redis.hset(key, 'name', data['name'])
36
- $redis.hset(key, 'keys', data['keys'])
37
- $redis.hset(key, 'weight', data['weight'])
38
- $redis.hset(key, 'role', params[:role])
39
- $redis.hset(key, 'environment', params[:environment])
40
- $redis.hset(key, 'run', data['enabled'])
41
- {
42
- :role => params[:role],
43
- :environment => params[:environment],
44
- :service => data['name'],
45
- :count => count,
46
- }.to_json
47
- end
48
-
49
- delete '/service/:role/:environment/:service' do
50
- if $redis.get("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count") == '0'
51
- count = 0
52
- else
53
- count = $redis.decr("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count")
54
- service = eval($redis.range("running", 0, -1).grep(/scoring/).last)
55
- runservice(service[:hostname], params[:role], params[:environment], params[:service], 'stop')
56
- $redis.del("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:#{count + 1}")
57
- end
58
- {
59
- :role => params[:role],
60
- :environment => params[:environment],
61
- :service => params[:service],
62
- :count => count,
63
- }.to_json
64
- end
65
-
66
- get '/services' do
67
- getservices().to_json
68
- end
69
-
70
- get '/servicebalance/:role/:environment' do
71
- runlist = balanceservices(params[:role], params[:environment])
72
- unless runlist.kind_of? Hash
73
- servicestopall(params[:role], params[:environment])
74
- runlist.peach do |event|
75
- runservice(event[:host][:hostname], params[:role], params[:environment], event[:service][:name], event[:service][:keys], 'start')
76
- end
77
- end
78
- runlist.to_json
79
- end
80
- end
@@ -1,9 +0,0 @@
1
- <html>
2
- <body>
3
- <ul>
4
- <% @hosts.each do |host|%>
5
- <li><%=host%> <%=$redis.get host%></li>
6
- <% end %>
7
- </ul>
8
- </body>
9
- </html>
data/setup.rb DELETED
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'aws-sdk'
4
-
5
- zones = [
6
- 'us-east-1',
7
- 'us-west-1',
8
- 'us-west-2',
9
- 'sa-east-1',
10
- 'eu-west-1',
11
- 'ap-southeast-1',
12
- 'ap-northeast-1',
13
- 'ap-southeast-2',
14
- ]
15
-
16
- puts "This script will set up your gaptool-server, make sure you have the aws-sdk gem installed."
17
- puts "Before getting started, either create a new IAM role with full access to EC2, or input your master AWS ID and Secret."
18
- puts "Also ensure that you have an EMPTY redis server running somewhere avilable."
19
- puts "Read the source of this script if you're worried about what it does with it."
20
-
21
- print "Enter AWS ID: "
22
- aws_id = gets.chomp
23
- print "Enter AWS Secret: "
24
- aws_secret = gets.chomp
25
- print "Redis host: "
26
- redis_host = gets.chomp
27
- print "Redis port: "
28
- redis_port = gets.chomp
29
- print "Redis password (leave blank if none): "
30
- redis_pass = gets.chomp
31
-
32
- @redis = Redis.new(:host => redis_host, :port => redis_port, :password => redis_pass)
33
-
34
- zones.each do |zone|
35
- # Run for each AZ
36
- AWS.config(:access_key_id => aws_id, :secret_access_key => aws_secret, :ec2_endpoint => "ec2.#{zone}.amazonaws.com")
37
- @ec2 = AWS::EC2.new
38
- @key = @ec2.key_pairs.create('gaptool-server')
39
- @private = @key.private_key
40
- end
41
-
42
-
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'gaptool-server'
16
-
17
- class Test::Unit::TestCase
18
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestGaptoolServer < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end