gaptool-server 0.2.4 → 0.3.0

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/Gemfile CHANGED
@@ -21,3 +21,5 @@ gem 'redis'
21
21
  gem 'aws-sdk'
22
22
  gem 'net-ssh'
23
23
  gem 'peach'
24
+ gem 'bson_ext'
25
+ gem 'mongo'
data/Gemfile.lock CHANGED
@@ -9,6 +9,9 @@ GEM
9
9
  json (~> 1.4)
10
10
  nokogiri (>= 1.4.4)
11
11
  uuidtools (~> 2.1)
12
+ bson (1.7.1)
13
+ bson_ext (1.7.1)
14
+ bson (~> 1.7.1)
12
15
  coderay (1.0.8)
13
16
  daemons (1.1.9)
14
17
  eventmachine (1.0.0)
@@ -24,6 +27,8 @@ GEM
24
27
  rdoc
25
28
  json (1.7.5)
26
29
  method_source (0.8.1)
30
+ mongo (1.7.1)
31
+ bson (~> 1.7.1)
27
32
  multi_json (1.3.7)
28
33
  multi_xml (0.5.1)
29
34
  net-ssh (2.6.2)
@@ -69,8 +74,10 @@ PLATFORMS
69
74
 
70
75
  DEPENDENCIES
71
76
  aws-sdk
77
+ bson_ext
72
78
  bundler
73
79
  jeweler (~> 1.8.4)
80
+ mongo
74
81
  net-ssh
75
82
  peach
76
83
  pry
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.3.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gaptool-server"
8
- s.version = "0.2.4"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Bailey"]
12
- s.date = "2013-01-08"
12
+ s.date = "2013-02-06"
13
13
  s.description = "gaptool-server for managing cloud resources"
14
14
  s.email = "m@mdb.io"
15
15
  s.executables = ["gaptool-server"]
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
36
36
  "lib/helpers/nicebytes.rb",
37
37
  "lib/helpers/partials.rb",
38
38
  "lib/helpers/redis.rb",
39
+ "lib/helpers/services.rb",
39
40
  "lib/models/init.rb",
40
41
  "lib/models/user.rb",
41
42
  "lib/public/css/common.css",
@@ -44,6 +45,7 @@ Gem::Specification.new do |s|
44
45
  "lib/routes/main.rb",
45
46
  "lib/routes/mongodb.rb",
46
47
  "lib/routes/redis.rb",
48
+ "lib/routes/services.rb",
47
49
  "lib/views/hosts.erb",
48
50
  "lib/views/init.erb",
49
51
  "setup.rb",
@@ -66,6 +68,8 @@ Gem::Specification.new do |s|
66
68
  s.add_runtime_dependency(%q<aws-sdk>, [">= 0"])
67
69
  s.add_runtime_dependency(%q<net-ssh>, [">= 0"])
68
70
  s.add_runtime_dependency(%q<peach>, [">= 0"])
71
+ s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
72
+ s.add_runtime_dependency(%q<mongo>, [">= 0"])
69
73
  s.add_development_dependency(%q<shoulda>, [">= 0"])
70
74
  s.add_development_dependency(%q<rdoc>, [">= 0"])
71
75
  s.add_development_dependency(%q<bundler>, [">= 0"])
@@ -80,6 +84,8 @@ Gem::Specification.new do |s|
80
84
  s.add_dependency(%q<aws-sdk>, [">= 0"])
81
85
  s.add_dependency(%q<net-ssh>, [">= 0"])
82
86
  s.add_dependency(%q<peach>, [">= 0"])
87
+ s.add_dependency(%q<bson_ext>, [">= 0"])
88
+ s.add_dependency(%q<mongo>, [">= 0"])
83
89
  s.add_dependency(%q<shoulda>, [">= 0"])
84
90
  s.add_dependency(%q<rdoc>, [">= 0"])
85
91
  s.add_dependency(%q<bundler>, [">= 0"])
@@ -95,6 +101,8 @@ Gem::Specification.new do |s|
95
101
  s.add_dependency(%q<aws-sdk>, [">= 0"])
96
102
  s.add_dependency(%q<net-ssh>, [">= 0"])
97
103
  s.add_dependency(%q<peach>, [">= 0"])
104
+ s.add_dependency(%q<bson_ext>, [">= 0"])
105
+ s.add_dependency(%q<mongo>, [">= 0"])
98
106
  s.add_dependency(%q<shoulda>, [">= 0"])
99
107
  s.add_dependency(%q<rdoc>, [">= 0"])
100
108
  s.add_dependency(%q<bundler>, [">= 0"])
data/lib/helpers/init.rb CHANGED
@@ -13,3 +13,6 @@ GaptoolServer.helpers RedisHelpers
13
13
 
14
14
  require_relative 'mongodb'
15
15
  GaptoolServer.helpers MongodbHelpers
16
+
17
+ require_relative 'services'
18
+ GaptoolServer.helpers ServiceHelpers
@@ -1,5 +1,4 @@
1
1
  # encoding: utf-8
2
- require 'bson_ext'
3
2
  require 'mongo'
4
3
  module MongodbHelpers
5
4
  def collectioncount(dbcollections)
data/lib/helpers/redis.rb CHANGED
@@ -12,4 +12,18 @@ module RedisHelpers
12
12
  end
13
13
  return result
14
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
15
29
  end
@@ -0,0 +1,36 @@
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:inuse:*').each do |service|
18
+ @all[service.gsub('apikey:inuse:', '')][:inuse] = $redis.lrange("apikey:inuse:#{service}", 0, -1)
19
+ end
20
+ $redis.keys('apikey:available:*').each do |service|
21
+ @all[service][:available] = $redis.lrange("apikey:available:#{service}", 0, -1)
22
+ end
23
+ return @all
24
+ end
25
+ end
26
+ def svcapi_deletekey(service, key)
27
+ begin
28
+ $redis.lrem("apikey:inuse:#{service}", 1, key)
29
+ $redis.lrem("apikey:available:#{service}", 1, key)
30
+ rescue
31
+ end
32
+ end
33
+ def svcapi_putkey(service, key)
34
+ $redis.lpush("apikey:available:#{service}", key)
35
+ end
36
+ end
data/lib/routes/init.rb CHANGED
@@ -2,3 +2,4 @@
2
2
  require_relative 'main'
3
3
  require_relative 'redis'
4
4
  require_relative 'mongodb'
5
+ require_relative 'services'
data/lib/routes/main.rb CHANGED
@@ -21,45 +21,6 @@ class GaptoolServer < Sinatra::Application
21
21
  runlist.to_json
22
22
  end
23
23
 
24
- put '/service/:role/:environment' do
25
- data = JSON.parse request.body.read
26
- count = $redis.incr("service:#{params[:role]}:#{params[:environment]}:#{data['name']}:count")
27
- key = "service:#{params[:role]}:#{params[:environment]}:#{data['name']}:#{count}"
28
- $redis.hset(key, 'name', data['name'])
29
- $redis.hset(key, 'keys', data['keys'])
30
- $redis.hset(key, 'weight', data['weight'])
31
- $redis.hset(key, 'role', params[:role])
32
- $redis.hset(key, 'environment', params[:environment])
33
- $redis.hset(key, 'run', data['enabled'])
34
- {
35
- :role => params[:role],
36
- :environment => params[:environment],
37
- :service => data['name'],
38
- :count => count,
39
- }.to_json
40
- end
41
-
42
- delete '/service/:role/:environment/:service' do
43
- if $redis.get("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count") == '0'
44
- count = 0
45
- else
46
- count = $redis.decr("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count")
47
- service = eval($redis.range("running", 0, -1).grep(/scoring/).last)
48
- runservice(service[:hostname], params[:role], params[:environment], params[:service], 'stop')
49
- $redis.del("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:#{count + 1}")
50
- end
51
- {
52
- :role => params[:role],
53
- :environment => params[:environment],
54
- :service => params[:service],
55
- :count => count,
56
- }.to_json
57
- end
58
-
59
- get '/services' do
60
- getservices().to_json
61
- end
62
-
63
24
  post '/regenhosts' do
64
25
  data = JSON.parse request.body.read
65
26
  hostsgen(data['zone'])
@@ -183,10 +144,21 @@ class GaptoolServer < Sinatra::Application
183
144
  out.to_json
184
145
  end
185
146
 
147
+ get '/instance/:id' do
148
+ out = Array.new
149
+ $redis.hgetall($redis.keys("host:*:*:#{params[:id]}").first).to_json
150
+ end
151
+
186
152
  get '/hosts/:role/:environment' do
187
153
  out = Array.new
188
- $redis.keys("host:#{params[:role]}:#{params[:environment]}*").each do |host|
189
- out << $redis.hgetall(host)
154
+ unless params[:role] == "ALL"
155
+ $redis.keys("host:#{params[:role]}:#{params[:environment]}*").each do |host|
156
+ out << $redis.hgetall(host)
157
+ end
158
+ else
159
+ $redis.keys("host:*:#{params[:environment]}:*").each do |host|
160
+ out << $redis.hgetall(host)
161
+ end
190
162
  end
191
163
  out.to_json
192
164
  end
data/lib/routes/redis.rb CHANGED
@@ -4,4 +4,8 @@ class GaptoolServer < Sinatra::Application
4
4
  data = JSON.parse request.body.read
5
5
  remotellen(data).to_json
6
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
7
11
  end
@@ -0,0 +1,79 @@
1
+ # encoding: utf-8
2
+ class GaptoolServer < Sinatra::Application
3
+
4
+ get '/servicekeys/get/:service' do
5
+ svcapi_getkey(params[:service])
6
+ end
7
+
8
+ get '/servicekeys/list/:service' do
9
+ unless :service.nil?
10
+ svcapi_showkeys(params[:service]).to_json
11
+ else
12
+ svcapi_showkeys(:all).to_json
13
+ end
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
+ svcapi_putkey(params[:service], data['key'])
24
+ end
25
+
26
+ delete '/servicekeys/:service' do
27
+ svcapi_deletekey(params[:service], data['key'])
28
+ end
29
+
30
+ put '/service/:role/:environment' do
31
+ data = JSON.parse request.body.read
32
+ count = $redis.incr("service:#{params[:role]}:#{params[:environment]}:#{data['name']}:count")
33
+ key = "service:#{params[:role]}:#{params[:environment]}:#{data['name']}:#{count}"
34
+ $redis.hset(key, 'name', data['name'])
35
+ $redis.hset(key, 'keys', data['keys'])
36
+ $redis.hset(key, 'weight', data['weight'])
37
+ $redis.hset(key, 'role', params[:role])
38
+ $redis.hset(key, 'environment', params[:environment])
39
+ $redis.hset(key, 'run', data['enabled'])
40
+ {
41
+ :role => params[:role],
42
+ :environment => params[:environment],
43
+ :service => data['name'],
44
+ :count => count,
45
+ }.to_json
46
+ end
47
+
48
+ delete '/service/:role/:environment/:service' do
49
+ if $redis.get("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count") == '0'
50
+ count = 0
51
+ else
52
+ count = $redis.decr("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:count")
53
+ service = eval($redis.range("running", 0, -1).grep(/scoring/).last)
54
+ runservice(service[:hostname], params[:role], params[:environment], params[:service], 'stop')
55
+ $redis.del("service:#{params[:role]}:#{params[:environment]}:#{params[:service]}:#{count + 1}")
56
+ end
57
+ {
58
+ :role => params[:role],
59
+ :environment => params[:environment],
60
+ :service => params[:service],
61
+ :count => count,
62
+ }.to_json
63
+ end
64
+
65
+ get '/services' do
66
+ getservices().to_json
67
+ end
68
+
69
+ get '/servicebalance/:role/:environment' do
70
+ runlist = balanceservices(params[:role], params[:environment])
71
+ unless runlist.kind_of? Hash
72
+ servicestopall(params[:role], params[:environment])
73
+ runlist.peach do |event|
74
+ runservice(event[:host][:hostname], params[:role], params[:environment], event[:service][:name], event[:service][:keys], 'start')
75
+ end
76
+ end
77
+ runlist.to_json
78
+ end
79
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gaptool-server
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.4
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matt Bailey
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2013-01-08 00:00:00 Z
13
+ date: 2013-02-06 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra
@@ -79,29 +79,29 @@ dependencies:
79
79
  prerelease: false
80
80
  version_requirements: *id006
81
81
  - !ruby/object:Gem::Dependency
82
- name: shoulda
82
+ name: bson_ext
83
83
  requirement: &id007 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: "0"
89
- type: :development
89
+ type: :runtime
90
90
  prerelease: false
91
91
  version_requirements: *id007
92
92
  - !ruby/object:Gem::Dependency
93
- name: rdoc
93
+ name: mongo
94
94
  requirement: &id008 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: "0"
100
- type: :development
100
+ type: :runtime
101
101
  prerelease: false
102
102
  version_requirements: *id008
103
103
  - !ruby/object:Gem::Dependency
104
- name: bundler
104
+ name: shoulda
105
105
  requirement: &id009 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
@@ -112,18 +112,18 @@ dependencies:
112
112
  prerelease: false
113
113
  version_requirements: *id009
114
114
  - !ruby/object:Gem::Dependency
115
- name: jeweler
115
+ name: rdoc
116
116
  requirement: &id010 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
- - - ~>
119
+ - - ">="
120
120
  - !ruby/object:Gem::Version
121
- version: 1.8.4
121
+ version: "0"
122
122
  type: :development
123
123
  prerelease: false
124
124
  version_requirements: *id010
125
125
  - !ruby/object:Gem::Dependency
126
- name: simplecov
126
+ name: bundler
127
127
  requirement: &id011 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
@@ -134,18 +134,18 @@ dependencies:
134
134
  prerelease: false
135
135
  version_requirements: *id011
136
136
  - !ruby/object:Gem::Dependency
137
- name: shotgun
137
+ name: jeweler
138
138
  requirement: &id012 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
- - - ">="
141
+ - - ~>
142
142
  - !ruby/object:Gem::Version
143
- version: "0"
143
+ version: 1.8.4
144
144
  type: :development
145
145
  prerelease: false
146
146
  version_requirements: *id012
147
147
  - !ruby/object:Gem::Dependency
148
- name: pry
148
+ name: simplecov
149
149
  requirement: &id013 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
@@ -155,6 +155,28 @@ dependencies:
155
155
  type: :development
156
156
  prerelease: false
157
157
  version_requirements: *id013
158
+ - !ruby/object:Gem::Dependency
159
+ name: shotgun
160
+ requirement: &id014 !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: "0"
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: *id014
169
+ - !ruby/object:Gem::Dependency
170
+ name: pry
171
+ requirement: &id015 !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: "0"
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: *id015
158
180
  description: gaptool-server for managing cloud resources
159
181
  email: m@mdb.io
160
182
  executables:
@@ -183,6 +205,7 @@ files:
183
205
  - lib/helpers/nicebytes.rb
184
206
  - lib/helpers/partials.rb
185
207
  - lib/helpers/redis.rb
208
+ - lib/helpers/services.rb
186
209
  - lib/models/init.rb
187
210
  - lib/models/user.rb
188
211
  - lib/public/css/common.css
@@ -191,6 +214,7 @@ files:
191
214
  - lib/routes/main.rb
192
215
  - lib/routes/mongodb.rb
193
216
  - lib/routes/redis.rb
217
+ - lib/routes/services.rb
194
218
  - lib/views/hosts.erb
195
219
  - lib/views/init.erb
196
220
  - setup.rb
@@ -209,7 +233,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
233
  requirements:
210
234
  - - ">="
211
235
  - !ruby/object:Gem::Version
212
- hash: -3015715560940527206
236
+ hash: -4397796870067902928
213
237
  segments:
214
238
  - 0
215
239
  version: "0"