gaptool-server 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
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