gaptool-server 0.2.4 → 0.3.0

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